Amazon-Web-Services
如何使用 CloudFormation 腳本將文件上傳到 S3 儲存桶?
如何將文件上傳到我的 AWS S3 儲存桶 CloudFormation 模板?
AWSTemplateFormatVersion: '2010-09-09' Resources: S3Bucket: Type: AWS::S3::Bucket Properties: AccessControl: PublicRead BucketName: s3bucketuser VersioningConfiguration: Status: Enabled
您無法通過 CloudFormation 上傳文件,因為 CFN 無權訪問您的本地文件系統,所以不支持該功能。
我通常做的事情:
- 從Ansible呼叫
cloudformation
任務- CFN 創建儲存桶並在
Outputs
導出中儲存儲存桶名稱- 一旦 CFN 完成, Ansible 就會上傳
s3_sync
在下一個任務中使用的文件。
AWS 提供了一個範例宏,可能會有所幫助,具體取決於您的案例:https ://github.com/awslabs/aws-cloudformation-templates/tree/a11722d/aws/services/CloudFormation/MacrosExamples/S3Objects 。
- 使用 macro.template創建一個單獨的CloudFormation堆棧。這將創建轉換宏“S3Objects”,然後該區域中的任何其他堆棧都可以使用該宏。README.md解釋瞭如何在添加到CloudFormation之前“打包”宏模板(它需要為 Lambda 函式包含一個單獨的源文件)。
- 文件example.template提供了範例用法。請注意引用的頂級Transform
S3Objects
部分,它允許使用Type: AWS::S3::Object
.在提供的範例中,該
Body
屬性允許直接在 YAML 或 JSON 模板中輸入文本。為了擴展這一點,可以使用Fn::Sub創建一個文件,其中包含來自其他資源的參數或屬性:--- AWSTemplateFormatVersion: '2010-09-09' Transform: S3Objects Parameters: ANameField: Type: String Resources: S3Bucket: Type: AWS::S3::Bucket Properties: AccessControl: PublicRead BucketName: s3bucketuser VersioningConfiguration: Status: Enabled S3Object: Type: AWS::S3::Object Properties: Target: Bucket: !Ref S3Bucket Key: README.md ContentType: text/markdown Body: !Sub | # My text file This is my text file for ${ANameField}. The region is ${AWS::Region} and my account ID is ${AWS::AccountId}. This file is in the ${S3Bucket} bucket. The bucket ARN is ${S3Bucket.Arn}, and its website endpoint is ${S3Bucket.WebsiteURL}