CodePipeline ステージでは、AWS CloudFormation アクションのパラメータオーバーライドを指定できます。パラメータオーバーライドを使用すると、テンプレート構成ファイルの値をオーバーライドするテンプレートパラメータ値を指定できます。AWS CloudFormation では、動的な値 (パイプラインが実行されるまで不明な値) を指定できる関数を提供しています。
Fn::GetArtifactAtt
Fn::GetArtifactAtt
関数は、入力アーティファクトから属性の値を取得します。たとえば、アーティファクトが保存されている S3 バケット名などです。この関数を使用して、アーティファクトのファイル名や Amazon S3 バケット名など、アーティファクトの属性を指定します。
パイプラインを実行すると、CodePipeline はファイルをコピーしてパイプラインのアーティファクトストア (S3 バケット) に書き込みます。CodePipeline は、アーティファクトストアにファイル名を生成します。これらのファイル名は、パイプラインが実行されるまでは不明です。
例えば、パイプラインで、CodePipeline が AWS Lambda 関数ソースコードをアーティファクトストアにコピーするソースステージがあるとします。次のステージでは、関数を作成する AWS CloudFormation テンプレートがありますが、AWS CloudFormation が関数を作成するにはそのファイル名が必要です。Fn::GetArtifactAtt
関数を使用して、正確な S3 バケット名およびファイル名を渡す必要があります。
構文
以下の構文を使用してアーティファクトの属性値を取得します。
{ "Fn::GetArtifactAtt" : [ "artifactName
", "attributeName
" ] }
artifactName
-
入力アーティファクトの名前。このアーティファクトを、関連付けられたアクションの入力として宣言する必要があります。
attributeName
-
値の取得元となるアーティファクト属性の名前。各アーティファクト属性の詳細については、後述の属性セクションを参照してください。
例
以下のパラメータオーバーライドは、LambdaFunctionSource
アーティファクトの S3 バケット名およびファイル名を取得して、BucketName
および ObjectKey
パラメータを指定します。この例では、たとえばソースステージの一部として、CodePipeline が Lambda 関数のソースコードをコピーし、アーティファクトとして保存したとします。
{
"BucketName" : { "Fn::GetArtifactAtt" : ["LambdaFunctionSource", "BucketName"]},
"ObjectKey" : { "Fn::GetArtifactAtt" : ["LambdaFunctionSource", "ObjectKey"]}
}
属性
アーティファクトの次の属性を取得できます。
BucketName
-
アーティファクトが保存されている S3 バケットの名前。
ObjectKey
-
CodePipeline によって生成されるアーティファクトを含む
.zip
ファイルの名前 (1ABCyZZ.zip
など)。 URL
-
アーティファクトの Amazon Simple Storage Service (Amazon S3) URL (
https://s3.us-west-2.amazonaws.com/artifactstorebucket-yivczw8jma0c/test/TemplateSo/1ABCyZZ.zip
など)。
Fn::GetParam
Fn::GetParam
関数はキーと値のペアからの値を JSON 形式ファイルで返します。この JSON ファイルをアーティファクトに含める必要があります。
この関数を使用して AWS CloudFormation スタックから出力値を取得し、別のアクションの入力として使用します。例えば、AWS CloudFormation アクションの出力ファイル名を指定すると、CodePipelin は出力を JSON ファイルで保存して、それを出力アーティファクトの .zip
ファイルに追加します。Fn::GetParam
関数を使用して出力値を取得し、それを別のアクションの入力として使用します。
構文
以下の構文を使用してキーと値のペアから値を取得します。
{ "Fn::GetParam" : [ "artifactName
", "JSONFileName
", "keyName
" ] }
artifactName
-
アーティファクトの名前です。関連アクションの入力アーティファクトとして含める必要があります。
JSONFileName
-
アーティファクトに含まれる JSON ファイルの名前。
keyName
-
値の取得元となるキーの名前。
例
次の例では、パラメーターオーバーライドで Fn::GetParam
関数を使用する方法を示します。
構文
以下のパラメーターオーバーライドは、WebSiteURL
アーティファクトに存在する URL
ファイルから stack-output.json
キーの値を取得することで、WebStackOutput
パラメーターを指定します。
{
"WebSiteURL" : { "Fn::GetParam" : ["WebStackOutput", "stack-output.json", "URL"]}
}
AWS CloudFormation テンプレートスニペット
以下の CodePipeline パイプラインからの AWS CloudFormation テンプレートスニペットは、スタックの出力を渡す方法を示します。これらのスニペットは、パイプライン定義の 2 つのステージを示します。最初のステージは、スタックを作成し、出力を StackAOutput
アーティファクトの TestOutput.json
ファイルに保存します。これらの値は、OutputFileName
および OutputArtifacts
プロパティによって指定されます。
ステージのソース入力アーティファクトの名前は TemplateSource
です。スタックテンプレートのファイル名は teststackA.yaml
で、構成ファイルの名前は test-configuration.json
です。どちらのステージにおいても、これらの値は TemplateConfiguration
と TemplatePath
プロパティに対して次のように指定されます。
TemplateConfiguration: TemplateSource::test-configuration.json
TemplatePath: TemplateSource::teststackA.yaml
例 スタック A ステージの作成
- Name: CreateTestStackA
Actions:
- Name: CloudFormationCreate
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: '1'
Configuration:
ActionMode: CREATE_UPDATE
Capabilities: CAPABILITY_IAM
OutputFileName: TestOutput.json
RoleArn: !GetAtt [CFNRole, Arn]
StackName: StackA
TemplateConfiguration: TemplateSource::test-configuration.json
TemplatePath: TemplateSource::teststackA.yaml
InputArtifacts:
- Name: TemplateSource
OutputArtifacts:
- Name: StackAOutput
RunOrder: '1'
後続のステージで、スタック B はスタック A からの出力を使用します。例では、ParameterOverrides
プロパティに Fn::GetParam
関数を使用して StackBInputParam
パラメーターを指定します。結果の値は、StackAOutputName
キーに関連付けられる値です。
例 スタック B ステージの作成
- Name: CreateTestStackB
Actions:
- Name: CloudFormationCreate
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: '1'
Configuration:
ActionMode: CREATE_UPDATE
Capabilities: CAPABILITY_IAM
RoleArn: !GetAtt [CFNRole, Arn]
StackName: StackB
TemplateConfiguration: TemplateSource::test-configuration.json
TemplatePath: TemplateSource::teststackB.yaml
ParameterOverrides: |
{
"StackBInputParam" : { "Fn::GetParam" : ["StackAOutput", "TestOutput.json", "StackAOutputName"]}
}
InputArtifacts:
- Name: TemplateSource
- Name: StackAOutput
RunOrder: '1'
関連情報
これらのパラメータを利用する際に役立つ関連リソースは以下の通りです。
-
CodePipeline の CloudFormation アクションパラメータの詳細については、「AWS CodePipeline ユーザーガイド」の「アクション設定リファレンスの AWS CloudFormation デプロイ」を参照してください。
-
アクションプロバイダーごとのテンプレート値における例の場合 (
Owner
フィールドまたはconfiguration
フィールドなど)、「AWS CodePipeline ユーザーガイド」の「アクション構造のリファレンス」を参照してください。 -
サンプルのパイプラインスタックテンプレートを YAML または JSON 形式でダウンロードするには、「AWS CodePipeline ユーザーガイド」の「Tutorial: Create a pipeline with AWS CloudFormation」を参照してください。