使用 Bitbucket 和 AWS 自动化提供网站资产
内容提要
本文介绍了如何通过Bitbucket和AWS自动化将网站资产作为静态内容提供给网页使用。资产包括图像、CSS、JavaScript、字体、视频和文档。CDN存储网站资产的副本,并通过最近的服务器提供内容,加快访问速度,提高网站性能。需要AWS账户和Bitbucket存储库。创建存储库、上传资产、创建S3存储桶、修改存储桶策略、创建CodeBuild、创建CloudFront分发,并将自动化添加到CodeBuild。
延伸解读
为何选择 CodeBuild 而非 Lambda
作者最初考虑用 Lambda 作为 Webhook 上传资产到 S3,但最终选择了 CodeBuild。CodeBuild 是 AWS 的全托管构建服务,能直接与 Bitbucket 集成,通过 Webhook 在 PR 合并时自动触发,简化了流程。相比 Lambda,CodeBuild 无需管理函数代码和 API Gateway,配置更简单,适合这种自动化同步场景。
S3 存储桶策略与公共访问
文章中的 S3 存储桶策略允许任何人读取对象,这适用于公开的静态资产。但需注意,策略中 Resource 指定了特定存储桶(如 mf-assets),实际使用时需替换为自己的存储桶名称。同时,存储桶的“阻止公共访问”选项保持默认勾选,但策略仍能生效,因为策略本身允许公共读取。
CloudFront 缓存失效的必要性
当资产更新并同步到 S3 后,CloudFront 边缘节点可能仍缓存旧版本。因此,在 CodeBuild 的 post_build 阶段添加了创建缓存失效的命令,使所有路径(/*)的缓存立即失效,确保用户获取最新资产。这需要为 CodeBuild 角色添加 CloudFront 相关权限,如 CreateInvalidation。
可选的自定义域名配置
如果已有 Route53 域名和 ACM 证书,可以为 CloudFront 分配添加备用域名(CNAME),并创建指向 CloudFront 的 CNAME 记录。这样就能通过自定义域名提供资产,提升品牌一致性。但此步骤是可选的,不影响核心自动化流程。
Q&A
如何使用Bitbucket和AWS自动化提供网站资产?
通过创建Bitbucket存储库上传资产,创建S3存储桶并修改策略,使用AWS CodeBuild自动化构建过程,最后通过CloudFront分发内容。
网站资产包括哪些内容?
网站资产包括图像、CSS、JavaScript、字体、视频和文档。
CDN的作用是什么?
CDN通过最近的服务器提供内容,加快访问速度,提高网站性能,并提供更好的保护以应对流量高峰和DDoS攻击。
如何设置AWS S3存储桶的公共访问策略?
需要添加一个策略,允许任何人读取或下载存储在S3存储桶中的对象,通常用于公开资产的访问。
如何在合并PR时触发CodeBuild项目?
通过配置Webhook,每次合并PR时,CodeBuild项目将被触发以自动构建和同步文件。
如何使用CloudFront提供内容?
创建CloudFront分发,选择S3存储桶并设置Origin Access Control,以确保安全地提供内容。