【问题标题】:CodeDeploy to S3代码部署到 S3
【发布时间】:2017-09-04 07:09:05
【问题描述】:

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

因此,如果我推送到 stable 分支,Gitlab 运行器会执行 npm start build 命令来构建站点,然后 aws s3 sync 以同步到特定存储桶。

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


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

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

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

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

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

这在 AWS 功能的当前状态下是否可行?

【问题讨论】:

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


    【解决方案1】:

    今天,AWS 宣布了一项新功能,即在 CodePipeline 的部署阶段以 S3 为目标的能力。公告为here,文档中包含可用的教程here

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

    【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-18
        相关资源
        最近更新 更多