web-dev-qa-db-ja.com

CloudFormationテンプレートを介してS3バケットを生成することは可能ですか?

CFテンプレートのいくつかのファイル(GraphQLスキーマ、Lambdaソースなど)をS3バケットに保存する必要があります。これも(うまくいけば)同じテンプレートで定義されます。これは、コンテンツを直接ドロップする以外の唯一の方法のようです。それを行うためにテンプレートに。私はCI/CDについても先に考えています。これらのファイルをチェックインして、CI/CDツールが適切にそれらを移動できるといいですね。

テンプレートからS3にファイルをコピーする方法はありますか?ほとんどの人がCI/CDでそれをどのように行うのですか?

5
CodeChimp

同じテンプレートから作成されたバケットにアップロードすることはできません。ただし、バケットが既に存在する場合は、アカウント全体のdeploymentバケット、またはそれらの1つ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パイプラインで両方の方法を使用しており、どちらも優れています。

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

2
MLu

別の方法としては、 cfpack ツールを使用します。 S3バケットにアップロードする必要があるアーティファクトを定義できます。詳細については Artifacts セクションをご覧ください。Graphqlスキーマとリゾルバーの扱い方が説明されています。

これに加えて、cfpackを使用すると、大きなCloudFormationテンプレートを小さなファイルに分割できます。これは、巨大なCloudFormationテンプレートがある場合に特に便利です。だから、それを試してみてください。

1
Eugene Manuilov

Λ#などの一部のAWSツールは、アセットを使用して再デプロイ可能なCloudFormationテンプレートを作成できます。この例を見てみましょう: https://github.com/LambdaSharp/StaticWebsite-Sample

1
Bjorg