如何将文件上传到我的 AWS S3 存储桶 CloudFormation 模板?
AWSTemplateFormatVersion: '2010-09-09'
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: PublicRead
BucketName: s3bucketuser
VersioningConfiguration:
Status: Enabled
答案1
您无法通过 CloudFormation 上传文件,因为 CFN 无法访问您的本地文件系统,所以不支持此功能。
我通常会做什么:
- 调用
cloudformation
任务自Ansible - CFN 创建存储桶并在
Outputs
导出中指定存储桶名称 s3_sync
一旦 CFN 任务完成,Ansible 就会上传下一个任务中使用的文件。
答案2
AWS 提供了示例宏这可能会有所帮助,具体取决于您的使用情况:https://github.com/awslabs/aws-cloudformation-templates/tree/a11722d/aws/services/CloudFormation/MacrosExamples/S3Objects。
- 使用以下方法创建单独的 CloudFormation 堆栈宏.模板。这将创建转换宏“S3Objects”,然后该宏将可供该区域中的任何其他堆栈使用。自述文件.md解释如何在添加到 CloudFormation 之前“打包”宏模板(它需要为 Lambda 函数包含单独的源文件)。
- 文件例子.模板提供示例用法。请注意顶层转换部分引用
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}