是否可以通过 CloudFormation 模板填充 S3 存储桶?

Cod*_*imp 5 deployment amazon-web-services continuous-integration amazon-cloudformation aws-cli

我需要将我的 CF 模板(GraphQL 架构、Lambda 源等)的一些文件存储到 S3 存储桶中,该存储桶也(希望)在同一模板中定义,因为这似乎是直接删除内容之外的唯一方法进入模板来做。我也在尝试提前考虑 CI/CD,如果检查这些文件并且 CI/CD 工具适当地移动它们会很好。

有没有办法将文件从模板复制到 S3?大多数人如何使用 CI/CD 做到这一点?

MLu*_*MLu 2

恐怕无法上传到从同一模板创建的存储桶。但是,如果存储桶是预先存在的,例如帐户范围的deployment存储桶或其中一个cf-templates-...存储桶,则您有一些选择。

  • 使用Ansible playbook上传辅助文件,并在同一 playbook 中创建/更新 CloudFormation 堆栈。这是一种非常流行的 CI/CD 管道方法。在您的 Ansible 剧本中,您将看到如下内容:

    tasks:
    - name: "Upload files to s3://{{deployment_bucket}}/lambda/"
      s3_sync:
        bucket: "{{deployment_bucket}}"
        file_root: lambda/
        prefix: lambda/
        permission: private
    
    - name: "Create CloudFormation Stack"
      cloudformation:
        stack_name: "some-stack-name"
        state: present
        template: template.yml
        template_parameters:
          DeploymentS3Path: "s3://{{deployment_bucket}}/lambda/"
    
    Run Code Online (Sandbox Code Playgroud)
  • 让我们将aws cloudformation package文件压缩并上传到 S3,然后aws cloudformation deploy创建并执行 CloudFormation 更改集。这又是一种非常流行的方法,与 CI/CD 配合良好。

    然后,您可以在 CloudFormation 模板中引用本地文件,如下所示:

    MyLambda:
      Type: AWS::Lambda::Function
      Properties:
        Code: lambda/
    
    Run Code Online (Sandbox Code Playgroud)

    aws cloudformation package运行时,它将输出一个修改后的模板,并扩展了代码路径:

    MyLambda:
      Properties:
        Code:
          S3Bucket: cf-templates-1a2b3c4d5e6f-ap-southeast-2
          S3Key: e24e45d4f5f2ab3c5d437659fa2246a7
    
    Run Code Online (Sandbox Code Playgroud)

    然后你就可以得到aws cloudformation deploy这个扩展的模板。或者使用其他一些方法进行部署 - 模板已可供使用。

    package此/方法的美妙之处deploy在于它可以为您处理本地文件到 S3 的上传。

在不同的项目中,我们在各种 CI/CD 管道中使用这两种方法,并且效果都很好。

希望有帮助:)