我在S3存储桶中有一个站点,配置为Web访问,每次我推送一个特定的git存储库时,我都会运行aws s3 sync
命令(我现在正在使用Gitlab)。
因此,如果我推送到stable
分支,Gitlab运行程序将执行npm start build
命令来构建站点,然后aws s3 sync
同步到特定存储桶。
我想迁移到CodeCommit并使用纯AWS工具来做同样的事情。
到目前为止,我能够成功设置存储库,创建 CodeBuild 来构建工件,并且工件存储(未部署)到S3存储桶。区别在于我无法将其部署到存储桶的根文件夹而不是子文件夹,似乎没有为此进行过程。我需要它在根文件夹上,因为如何配置Web访问。
对于部署过程,我正在查看 CodeDeploy 但它实际上并没有让我部署到S3存储桶,它只使用存储区作为中介来部署到EC2实例。到目前为止,我感觉 CodeDeploy 仅对涉及EC2的部署有用。
与我的要求相似的 This tutorial使用 CodePipeline 和 CodeBuild ,但部署步骤实际上是aws s3 sync
命令(与我正在使用Gitlab),并且禁用 CodePipeline 上的实际部署步骤。
我正在研究一种解决方案,该解决方案涉及使用为此特定目的而制作的AWS功能,但我找不到任何。
我也知道LambCI,但对我来说看起来像 CodePipeline / CodeBuild 正在做什么,存储工件(不部署到根文件夹)的桶)。另外,我正在寻找一个不需要我学习或部署新配置文件的选项(在AWS配置文件之外)。
AWS功能的当前状态是否可以实现?
答案 0 :(得分:7)
今天,AWS已宣布在CodePipeline的部署阶段以S3为目标的一项新功能。公告为here,文档包含here可用的指南。
使用CodeBuild / CodePipeline方法,您现在应该能够在部署阶段选择S3作为部署提供程序,而不必在构建脚本中执行同步。要配置阶段,请提供一个S3存储桶名称,指定是否提取工件zip的内容,如果是,则提供一个可选的提取路径。这样,您可以通过省略路径将内容直接部署到存储桶的根。
答案 1 :(得分:6)
我正在处理类似的问题,据我所知,没有适合将应用程序部署到S3的服务。
AWS CodeDeploy确实用于部署作为服务器运行的代码。
我的解决方案是使用CodePipeline分为三个阶段:
我使用了来自SeamusJ https://github.com/SeamusJ/deploy-build-to-s3
的AWS lambda函数必须进行一些更改,我使用node-unzip-2而不是unzip-stream来解压缩s3中的artifict。
我还必须在website.ts文件中更改ACL
答案 2 :(得分:2)
从CodeBuild上传是目前最好的解决方案。
有关如何通过this answer中的CodePipeline协调此部署的一些建议。