背景
为满足数据分析、审计及监控业务需求,我们将 Amazon S3 存储的文件数据同步至 SLS(Simple Log Service)系统进行统一处理与检索。然而,随着数据吞吐量的持续增长,AWS S3 直接出站流量费用已成为运营成本的主要压力点。尤其在跨云或大文件传输场景下,S3 直连不仅单价较高,而且在高并发拉取时易受网络波动影响,导致传输效率不稳定。
本文介绍通过 Amazon CloudFront 来优化数据传输链路。通过将 S3 配置为 CloudFront 源站,并将 SLS 数据拉取端点切换至 CloudFront 域名,利用其边缘分发能力替代直连。基于 CloudFront 更优的流量阶梯定价及全球网络特性,在降低带宽成本的同时,提升文件下载的成功率与吞吐性能,实现成本与稳定性的双重优化。这里我们仅使用 CloudFront 来获取文件数据,仍使用原模式(通过 SQS 或直连 S3)来获取文件元数据。若有安全需求,可以使用 CloudFront 提供的函数功能来对请求进行鉴权。接下来将依次介绍:1. 鉴权函数配置;2. CloudFront 详细配置;3. Distribution 关联函数;4. S3 导入任务的创建。
本文档为阿里云原创,知识产权归阿里云所有。由于本文档旨在介绍阿里云与第三方产品交互的服务能力,因此可能会提及第三方公司或其产品名称。
鉴权函数配置
步骤一:创建函数
在CloudFront中函数页创建函数,Runtime使用cloudfront-js-2.0。

步骤二:编辑鉴权函数并发布
使用以下代码,修改Token后构建函数并保存。测试后发布。
function handler(event) {
var request = event.request;
var headers = request.headers;
// 定义你的 Token(请替换为一个随机生成的强密码字符串)
var expectedToken = 'xxxxxx';
// 校验 X-CF-Token Header
if (!headers['x-cf-token'] || headers['x-cf-token'].value !== expectedToken) {
return {
statusCode: 403,
statusDescription: 'Forbidden',
body: {
encoding: 'text',
data: 'Access Denied'
}
};
}
// 校验通过,继续转发请求
return request;
}

CloudFront详细配置
步骤一:创建Distribution
在CloudFront中分配页创建分配,并选择合适的plan。

步骤二:命名Distribution
在Distribution Options 中设置Distribution name,设置Distribution type为Single website or app后进入下一步。

步骤三:源配置为S3
Origin type选择 Amazon S3类型,然后点击Browse S3按钮,浏览选择目标Bucket。

Origin settings保持默认。Cache settings选择自定义然后缓存策略选择CachingDisabled。

步骤四:安全防护按需开启
按照自己的安全需求选择是否开启安全防护。
步骤五:检查配置并创建
检查配置并创建,最后等待部署完成。部署状态变为时间戳,即表示部署完成。
创建导入任务时,需要获取这里的Domain name。
Distribution关联函数
步骤一:点击Distribution进行配置
在分配列表中选择CloudFront详细配置创建的Distribution,在行为页中创建行为。

步骤二:关联函数
下拉至页面底部,函数类型选择CloudFront Functions,选择鉴权函数配置定义的函数,最后点击创建。
创建S3导入任务
步骤一:进入任务管理并开始创建导入任务
登录日志服务控制台。单击Project名称,进入目标Project。
单击左侧导航栏的任务管理,在任务管理页单击数据导入,单击创建数据导入任务。
步骤二:开始接入
在弹出框单击 S3-数据导入的立即接入,然后选择需要接入的目标LogStore。
步骤三:配置任务信息
填写表单信息,开启是否使用CloudFront 按钮,并填入上述步骤获取的cloudFront domain name以及Token,预览查看是否符合预期,最后点击下一步即可。
此处主要介绍CloudFront相关配置,详细配置参考导入Amazon S3文件。

