【问题标题】:AWS CodePipline (CI/CD) to update the code of an existing AWS Lambda (not created with CloudFormation or SAM)AWS CodePipeline (CI/CD) 用于更新现有 AWS Lambda(不是使用 CloudFormation 或 SAM 创建)的代码
【发布时间】:2020-06-03 17:27:05
【问题描述】:

我需要构建一个 CI/CD 管道来更新使用控制台创建的现有 Lambda 函数的代码。 创建一个新的不是一种选择!

我在部署阶段使用 CloudFormation 成功部署了代码,但它只能更新使用 CloudFormation/SAM 创建的 Lambda 函数的代码。当我在 template.yaml 文件中指定 Lambda 的名称和现有 Lambda 时,它会尝试创建它并告诉我它已经存在!

我尝试的第二种方法是使用 CodeDeploy 进行部署,但出现此错误: - "BundleType 必须是 YAML 或 JSON"

此线程提供了解决此问题的方法,但我无法将其应用于我的案例: CodePipeline: CodeDeploy reports "BundleType must be either YAML or JSON"

是否有任何其他方法可以制作仅更新 Lambda 函数代码的适当 CI/CD 管道?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-code-deploy aws-codepipeline aws-code-deploy-appspec


    【解决方案1】:

    从 CloudFormation 更新 Lambda 代码的一种方法是将您的 Lambda 代码存储在启用版本控制的 S3 中。

    这里:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html

    堆栈更新期间不会自动检测到对 Amazon S3 中的部署包的更改。要更新函数代码,请更改模板中的对象键或版本。

    所以,管道可能是这样的:

    • 1) 从存储库中签出 Lambda 代码。或者
    • 2) 将新的 zip 文件上传到版本化的 S3 存储桶。
    • 如果是 1),则压缩内容并将其上传到版本化的 S3 存储桶。
    • 完成后,您将拥有一个新的版本化对象来调用 CloudFormation(您需要使用此新版本更新您的 template.yml 文件,这可以使用 CLI 检索此新对象版本来完成)并且可能会发生更新如文档中所述。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      我也遇到了类似的问题。我的要求有点不同。我将解释我们使用的问题和解决方案,以便对其他人有所帮助。我从@marianogg9 解释的方法开始。

      在我们的例子中,我使用 github 作为源尝试部署一个包含 lambda 函数的堆栈集。所以我在 github 中有一个 lambda python 文件和模板 yml 文件。为了部署,我使用了以下步骤,但遇到了即使每次部署堆栈集后 lambda 函数也没有更新的问题。

      1. 从 github 获取文件
      2. 压缩 lambda python 文件并上传到 s3 存储桶(现有存储桶)。
      3. yml 模板包含此存储桶路径和预定义的 s3key。所以每次我们在执行代码管道后覆盖 s3 lambda 文件。但根据 aws 文档

      堆栈更新期间不会自动检测到对 Amazon S3 中的部署包的更改。要更新功能代码,请更改模板中的对象键或版本。

      这意味着您需要使用新存储桶或每次都使用新版本。因此,为此,首先我为 s3 存储桶启用了版本控制。然后我在模板文件中创建了一个参数 versionId。所以我的想法是将zip文件上传到s3,然后使用cli命令获取最新的版本id,然后使用create stack instances cli命令的参数覆盖属性覆盖versionid参数。由于我必须创建一个堆栈集和代码管道,如果操作提供者是 cloudformation 堆栈集,默认情况下将不支持参数覆盖选项。因此,我不再使用代码构建阶段,然后使用 cli 命令创建堆栈集,然后创建堆栈实例。对堆栈实例使用 CLI 命令允许我使用参数覆盖属性,因此我能够更新模板中使用的版本 id 参数,该参数最终将在部署后更新 lambda 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        • 1970-01-01
        • 2020-04-13
        • 2021-05-01
        • 2021-01-24
        • 2021-08-14
        • 1970-01-01
        相关资源
        最近更新 更多