代码部署到 S3

CodeDeploy to S3

我在 S3 存储桶中有一个站点,配置用于 Web 访问,每次我推送特定的 git 存储库时,我 运行 一个 aws s3 sync 命令(我'我现在正在使用 Gitlab)。

所以如果我push到stable分支,一个Gitlab 运行ner执行npm start build命令建站,然后aws s3 sync同步到特定的桶.

我想迁移到 CodeCommit 并使用纯 AWS 工具来做同样的事情。


到目前为止,我能够成功地设置存储库,创建一个 CodeBuild 来构建工件,并且正在 存储 (未部署)到 S3 存储桶。不同之处在于我无法将其部署到存储桶的根文件夹而不是子文件夹,似乎该过程不是为此而设计的。由于 Web 访问的配置方式,我需要它位于根文件夹中。

对于部署过程,我看了一下CodeDeploy,但它实际上并没有让我部署到S3 bucket,它只是使用bucket作为部署的中介到 EC2 实例。到目前为止,我觉得 CodeDeploy 仅对涉及 EC2 的部署有用。

This tutorial 与我的要求类似,使用 CodePipelineCodeBuild,但部署步骤实际上是 aws s3 sync 命令(与我在 Gitlab 上所做的相同),CodePipeline 上的实际部署步骤被禁用。

我正在寻找一种解决方案,该解决方案涉及使用为此特定目的制作的 AWS 功能,但我找不到任何解决方案。

我也知道 LambCI,但对我来说 CodePipeline / CodeBuild 正在做的事情,存储工件(不部署到存储桶的根文件夹)。另外,我正在寻找一个不需要我学习或部署新配置文件(在 AWS 配置文件之外)的选项。

AWS 功能的当前状态是否可能?

从 CodeBuild 上传是目前可用的最佳解决方案。

this answer 中有一些关于如何通过 CodePipeline 编排此部署的建议。

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

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

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

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

我使用了 SeamusJ 的这个 AWS lambda 函数 https://github.com/SeamusJ/deploy-build-to-s3

必须进行一些更改,我使用 node-unzip-2 而不是 unzip-stream 从 s3 解压工件。

我还必须更改 website.ts 文件中的 ACL

今天 AWS 宣布了一项新功能,即能够在 CodePipeline 的部署阶段以 S3 为目标。公告是here, and the documentation contains a tutorial available here.

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