Amazon-Web-Services
是否可以通過 CloudFormation 模板填充 S3 儲存桶?
我需要將我的 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 管道中使用這兩種方法,並且都非常有效。
希望有幫助:)