メニュー
AWS CloudFormation
ユーザーガイド (API Version 2010-05-15)

AWS CodePipeline パイプラインでのパラメーターオーバーライド関数の使用

AWS CodePipeline のステージで、AWS CloudFormation アクションにパラメーターオーバーライドを指定できます。パラメーターオーバーライドを使用すると、テンプレート設定ファイルの値をオーバーライドするテンプレートパラメーター値を指定できます。AWS CloudFormation では、動的な値 (パイプラインが実行されるまで不明な値) を指定できる関数を提供しています。

Fn::GetArtifactAtt

Fn::GetArtifactAtt 関数は、入力アーティファクトから属性の値を取得します。たとえば、アーティファクトが保存されている S3 バケット名などです。この関数を使用して、アーティファクトのファイル名や S3 バケット名など、アーティファクトの属性を指定します。

パイプラインを実行すると、AWS CodePipeline はファイルをコピーしてパイプラインのアーティファクトストア (S3 バケット) に書き込みます。AWS CodePipeline はアーティファクトストア内でファイル名を生成します。これらのファイル名は、パイプラインが実行されるまでは不明です。

たとえば、パイプラインで、AWS CodePipeline が AWS Lambda 関数ソースコードをアーティファクトストアにコピーするソースステージがあるとします。次のステージでは、Lambda 関数を作成する AWS CloudFormation テンプレートがありますが、AWS CloudFormation が関数を作成するにはそのファイル名が必要です。Fn::GetArtifactAtt 関数を使用して、正確な S3 バケット名およびファイル名を渡す必要があります。

構文

以下の構文を使用してアーティファクトの属性値を取得します。

Copy
{ "Fn::GetArtifactAtt" : [ "artifactName", "attributeName" ] }
artifactName

入力アーティファクトの名前。このアーティファクトを、関連付けられたアクションの入力として宣言する必要があります。

attributeName

値の取得元となるアーティファクト属性の名前。各アーティファクト属性の詳細については、後述の属性セクションを参照してください。

以下のパラメーターオーバーライドは、LambdaFunctionSource アーティファクトの S3 バケット名およびファイル名を取得して、BucketName および ObjectKey パラメーターを指定します。この例では、たとえばソースステージの一部として、AWS CodePipeline が Lambda 関数のソースコードをコピーし、アーティファクトとして保存したとします。

Copy
{ "BucketName" : { "Fn::GetArtifactAtt" : ["LambdaFunctionSource", "BucketName"]}, "ObjectKey" : { "Fn::GetArtifactAtt" : ["LambdaFunctionSource", "ObjectKey"]} }

属性

アーティファクトの次の属性を取得できます。

BucketName

アーティファクトが保存されている S3 バケットの名前。

ObjectKey

AWS 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 アクションの出力ファイル名を指定すると、AWS CodePipeline は出力を JSON ファイルで保存して、それを出力アーティファクトの .zip ファイルに追加します。Fn::GetParam 関数を使用して出力値を取得し、それを別のアクションの入力として使用します。

構文

以下の構文を使用してキーと値のペアから値を取得します。

Copy
{ "Fn::GetParam" : [ "artifactName", "JSONFileName", "keyName" ] }
artifactName

アーティファクトの名前です。関連アクションの入力アーティファクトとして含める必要があります。

JSONFileName

アーティファクトに含まれる JSON ファイルの名前。

keyName

値の取得元となるキーの名前。

次の例では、パラメーターオーバーライドで Fn::GetParam 関数を使用する方法を示します。

構文

以下のパラメーターオーバーライドは、WebStackOutput アーティファクトに存在する stack-output.json ファイルから URL キーの値を取得することで、WebSiteURL パラメーターを指定します。

Copy
{ "WebSiteURL" : { "Fn::GetParam" : ["WebStackOutput", "stack-output.json", "URL"]} }

AWS CloudFormation テンプレートスニペット

以下の AWS CodePipeline パイプラインからの AWS CloudFormation テンプレートのスニペットは、スタックの出力を渡す方法を示します。これらのスニペットは、パイプライン定義の 2 つのステージを示します。最初のステージは、スタックを作成し、出力を StackAOutput アーティファクトの TestOutput.json ファイルに保存します。これらの値は、OutputFileName および OutputArtifacts プロパティによって指定されます。

例 スタック A ステージの作成

Copy
- 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: TemplateSourceA OutputArtifacts: - Name: StackAOutput RunOrder: '1'

後続のステージで、スタック B はスタック A からの出力を使用します。例では、ParameterOverrides プロパティに Fn::GetParam 関数を使用して StackBInputParam パラメーターを指定します。結果の値は、StackAOutputName キーに関連付けられる値です。

例 スタック B ステージの作成

Copy
- 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: TemplateSourceB - Name: StackAOutput RunOrder: '1'

このページの内容: