

# CodePipeline パイプラインでのパラメーターオーバーライド関数の使用
<a name="continuous-delivery-codepipeline-parameter-override-functions"></a>

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

**Topics**
+ [`Fn::GetArtifactAtt`](#w2aac21c17b7)
+ [`Fn::GetParam`](#w2aac21c17b9)
+ [関連情報](#w2aac21c17c11)

## `Fn::GetArtifactAtt`
<a name="w2aac21c17b7"></a>

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

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

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

### 構文
<a name="w2aac21c17b7b9"></a>

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

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

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

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

### 例
<a name="w2aac21c17b7c11"></a>

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

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

### 属性
<a name="w2aac21c17b7c13"></a>

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

`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`
<a name="w2aac21c17b9"></a>

`Fn::GetParam` 関数はキーと値のペアからの値を JSON 形式ファイルで返します。この JSON ファイルをアーティファクトに含める必要があります。

この関数を使用して CloudFormation スタックから出力値を取得し、別のアクションの入力として使用します。例えば、CloudFormation アクションの出力ファイル名を指定すると、CodePipelin は出力を JSON ファイルで保存して、それを出力アーティファクトの `.zip` ファイルに追加します。`Fn::GetParam` 関数を使用して出力値を取得し、それを別のアクションの入力として使用します。

### 構文
<a name="w2aac21c17b9b7"></a>

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

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

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

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

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

### 例
<a name="w2aac21c17b9b9"></a>

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

#### 構文
<a name="w2aac21c17b9b9b5"></a>

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

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

#### CloudFormation テンプレートスニペット
<a name="w2aac21c17b9b9b7"></a>

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

ステージのソース入力アーティファクトの名前は `TemplateSource` です。スタックテンプレートのファイル名は `teststackA.yaml` で、構成ファイルの名前は `test-configuration.json` です。どちらのステージにおいても、これらの値は `TemplateConfiguration` と `TemplatePath` プロパティに対して次のように指定されます。

```
TemplateConfiguration: TemplateSource::test-configuration.json
TemplatePath: TemplateSource::teststackA.yaml
```

**Example スタック 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` キーに関連付けられる値です。

**Example スタック 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'
```

## 関連情報
<a name="w2aac21c17c11"></a>

これらのパラメータを利用する際に役立つ関連リソースは以下の通りです。
+ CodePipeline の CloudFormation アクションパラメータの詳細については、「*AWS CodePipeline ユーザーガイド*」の「[アクション設定リファレンスの CloudFormation デプロイ](https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-CloudFormation.html)」を参照してください。
+ アクションプロバイダーごとのテンプレート値における例の場合 (`Owner` フィールドまたは `configuration` フィールドなど)、「*AWS CodePipeline ユーザーガイド*」の「[アクション構造リファレンス](https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference.html)」を参照してください。
+ サンプルのパイプラインスタックテンプレートを YAML または JSON 形式でダウンロードするには、「*AWS CodePipeline ユーザーガイド*」の「[Tutorial: Create a pipeline with CloudFormation](https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-cloudformation.html)」を参照してください。