如何使用 CloudFormation 脚本将文件上传到 S3 存储桶?

如何使用 CloudFormation 脚本将文件上传到 S3 存储桶?

如何将文件上传到我的 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

  1. 使用以下方法创建单独的 CloudFormation 堆栈宏.模板。这将创建转换宏“S3Objects”,然后该宏将可供该区域中的任何其他堆栈使用。自述文件.md解释如何在添加到 CloudFormation 之前“打包”宏模板(它需要为 Lambda 函数包含单独的源文件)。
  2. 文件例子.模板提供示例用法。请注意顶层转换部分引用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}

相关内容