web-dev-qa-db-ja.com

CloudFormationスクリプトを使用してファイルをS3バケットにアップロードする方法

AWS S3バケットのCloudFormationテンプレートにファイルをアップロードするにはどうすればよいですか?

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      BucketName: s3bucketuser
      VersioningConfiguration:
        Status: Enabled
5
Ayushi Garg

CloudFormationを介してファイルをアップロードすることはできません。CFNがローカルファイルシステムにアクセスできないため、サポートされていません。

私が通常行うこと:

  • Ansibleからcloudformationタスクを呼び出します
  • CFNはバケットを作成し、Outputsにバケット名をエクスポートします
  • Ansibleは、CFNが完了したら、次のタスクでs3_syncを使用してファイルをアップロードします。

それが役に立てば幸い:)

4
MLu

AWSはサンプル Macro を提供していますが、これはユースケースによって異なります: https://github.com/awslabs/aws-cloudformation-templates/tree/a11722d/aws/services/ CloudFormation/MacrosExamples/S3Objects

  1. macro.template を使用して、別のCloudFormationスタックを作成します。これにより、変換マクロ「S3Objects」が作成され、リージョン内の他のスタックで使用できるようになります。 README.md は、CloudFormationに追加する前にマクロテンプレートを「パッケージ化」する方法を説明します(Lambda関数の個別のソースファイルを含める必要があります)。
  2. ファイル example.template はサンプルの使用法を提供します。 S3Objectsを参照するType: AWS::S3::Objectを参照する最上位の Transform セクションに注意してください。

提供されている example では、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 Bucket
        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}
5
Alan Ivey