CFテンプレートのいくつかのファイル(GraphQLスキーマ、Lambdaソースなど)をS3バケットに保存する必要があります。これも(うまくいけば)同じテンプレートで定義されます。これは、コンテンツを直接ドロップする以外の唯一の方法のようです。それを行うためにテンプレートに。私はCI/CDについても先に考えています。これらのファイルをチェックインして、CI/CDツールが適切にそれらを移動できるといいですね。
テンプレートからS3にファイルをコピーする方法はありますか?ほとんどの人がCI/CDでそれをどのように行うのですか?
同じテンプレートから作成されたバケットにアップロードすることはできません。ただし、バケットが既に存在する場合は、アカウント全体の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パイプラインで両方の方法を使用しており、どちらも優れています。
それが役に立てば幸い:)
Λ#などの一部のAWSツールは、アセットを使用して再デプロイ可能なCloudFormationテンプレートを作成できます。この例を見てみましょう: https://github.com/LambdaSharp/StaticWebsite-Sample