CodeDeploy到S3

时间:2017-09-04 07:09:06

标签: amazon-web-services amazon-s3 aws-codepipeline aws-codecommit aws-codebuild

我在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功能的当前状态是否可以实现?

3 个答案:

答案 0 :(得分:7)

今天,AWS已宣布在CodePipeline的部署阶段以S3为目标的一项新功能。公告为here,文档包含here可用的指南。

使用CodeBuild / CodePipeline方法,您现在应该能够在部署阶段选择S3作为部署提供程序,而不必在构建脚本中执行同步。要配置阶段,请提供一个S3存储桶名称,指定是否提取工件zip的内容,如果是,则提供一个可选的提取路径。这样,您可以通过省略路径将内容直接部署到存储桶的根。

答案 1 :(得分:6)

我正在处理类似的问题,据我所知,没有适合将应用程序部署到S3的服务。

AWS CodeDeploy确实用于部署作为服务器运行的代码。

我的解决方案是使用CodePipeline分为三个阶段:

  1. 从AWS CodeCommit获取源代码的来源
  2. 使用AWS CodeBuild构建
  3. 自定义lambda函数,在成功构建后从S3工件存储获取工件,解压缩并将文件复制到我的S3网站主机。
  4. enter image description here

    我使用了来自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协调此部署的一些建议。