Amazon-Web-Services

是否可以通過 CloudFormation 模板填充 S3 儲存桶?

  • February 25, 2019

我需要將我的 CF 模板(GraphQL 架構、Lambda 源等)的一些文件儲存到 S3 儲存桶中,該儲存桶也將(希望)在同一模板中定義,因為這似乎是直接刪除內容之外的唯一方法進入模板來做。我也在嘗試提前考慮 CI/CD,如果簽入這些文件並且 CI/CD 工具適當地移動它們會很好。

有沒有辦法將文件從模板複製到 S3?大多數人如何使用 CI/CD 來做到這一點?

恐怕無法上傳到從同一模板創建的儲存桶。但是,如果儲存桶是預先存在的,例如帳戶範圍的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/"
  • aws cloudformation package將文件壓縮並上傳到 S3,然後aws cloudformation deploy創建並執行 CloudFormation 更改集。又是一種非常流行的方法,可以很好地與 CI/CD 配合使用。

在您的 CloudFormation 模板中,您可以像這樣引用本地文件:

MyLambda:
 Type: AWS::Lambda::Function
 Properties:
   Code: lambda/

aws cloudformation package執行時,它會輸出一個修改過的模板,擴展了程式碼路徑:

MyLambda:
 Properties:
   Code:
     S3Bucket: cf-templates-1a2b3c4d5e6f-ap-southeast-2
     S3Key: e24e45d4f5f2ab3c5d437659fa2246a7

然後你aws cloudformation deploy這個擴展的模板。或者使用其他方法進行部署 - 模板已準備好使用。

這個package/deploy方法的美妙之處在於它為您處理本地文件到 S3 的上傳。

在不同的項目中,我們在各種 CI/CD 管道中使用這兩種方法,並且都非常有效。

希望有幫助:)

引用自:https://serverfault.com/questions/925847