

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# CodePipeline にクロスリージョンアクションを追加する
<a name="actions-create-cross-region"></a>

AWS CodePipeline には、自動リリースプロセスのリソースのビルド、テスト、デプロイの設定に役立つアクションが多数含まれています。パイプラインとは異なる AWS リージョンにあるアクションをパイプラインに追加できます。 AWS のサービス がアクションのプロバイダーであり、このアクションタイプ/プロバイダータイプがパイプラインとは異なる AWS リージョンにある場合、これはクロスリージョンアクションです。

**注記**  
クロスリージョンアクションはサポートされており、CodePipeline がサポートされている AWS リージョンでのみ作成できます。CodePipeline でサポートされている AWS リージョンのリストについては、「」を参照してください[AWS の CodePipeline 中のクォータ](limits.md)。

コンソール、または を使用して AWS CLI、パイプラインにクロスリージョンアクション CloudFormation を追加できます。

**注記**  
CodePipeline の特定のアクションタイプは、特定の AWS リージョンでのみ使用できます。また、アクションタイプは使用できるが、そのアクションタイプの特定の AWS プロバイダーは使用できない AWS リージョンがある場合もあります。

パイプラインを作成または編集する場合は、パイプラインリージョンにアーティファクトバケットが必要であり、アクションを実行する予定のリージョンごとに 1 つのアーティファクトバケットが必要です。`ArtifactStores` パラメータの詳細については、「[CodePipeline パイプライン構造リファレンス](reference-pipeline-structure.md)」をご参照ください。

**注記**  
CodePipeline は、クロスリージョンアクションを実行するときに、ある AWS リージョンから他のリージョンへのアーティファクトのコピーを処理します。

コンソールを使用してパイプラインまたはクロスリージョンアクションを作成する場合は、アクションの作成先のリージョンにデフォルトのアーティファクトバケットが CodePipeline によって設定されます。 AWS CLI、 CloudFormation、または SDK を使用してパイプラインまたはクロスリージョンアクションを作成する場合は、アクションがあるリージョンごとにアーティファクトバケットを指定します。

**注記**  
アーティファクトバケットと暗号化キーは、クロスリージョンアクションと同じ AWS リージョンとパイプラインと同じアカウントで作成する必要があります。

以下のアクションタイプのクロスリージョンアクションは作成できません。
+ ソースアクション
+ サードパーティーアクション
+ カスタムアクション

**注記**  
CodePipeline でクロスリージョン Lambda 呼び出しアクションを使用する場合、[PutJobSuccessResult](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PutJobSuccessResult.html) と [PutJobFailureResult](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PutJobFailureResult.html) を使用した Lambda 実行のステータスは、CodePipeline が存在する AWS リージョンではなく、Lambda 関数が存在するリージョンに送信する必要があります。

パイプラインに含まれているクロスリージョンアクションがステージの一部である場合、 CodePipeline はクロスリージョンアクションの入力アーティファクトのみを、アクションのリージョンにレプリケートします。

**注記**  
パイプラインリージョンと CloudWatch Events の変更検出リソースが保持されているリージョンは同じままです。パイプラインがホストされているリージョンは変わりません。



## パイプラインのクロスリージョンアクションを管理する (コンソール)
<a name="actions-cross-region-console"></a>

CodePipeline コンソールを使用して既存のパイプラインにクロスリージョンアクションを追加できます。[パイプラインの作成] ウィザードを使用してクロスリージョンアクションを含む新しいパイプラインを作成するには、「[カスタムパイプラインを作成する (コンソール)](pipelines-create.md#pipelines-create-console)」を参照してください。

コンソールでパイプラインステージのクロスリージョンアクションを作成するには、アクションプロバイダーと、そのプロバイダーのリージョンで作成したリソースを一覧表示する [**リージョン**] フィールドを選択します。クロスリージョンアクションを追加すると、CodePipeline は、このアクションのリージョンで別のアーティファクトバケットを使用します。クロスリージョンのアーティファクトバケットの詳細については、「[CodePipeline パイプライン構造リファレンス](reference-pipeline-structure.md)」を参照してください。

### パイプラインステージにクロスリージョンアクションを追加する (コンソール)
<a name="actions-cross-region-console-add"></a>

コンソールを使用してパイプラインにクロスリージョンアクションを追加します。

**注記**  
変更を保存する際にパイプラインが実行中の場合、その実行は完了しません。

**クロスリージョンアクションを追加するには**

1. コンソール ([http://console.aws.amazon.com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home)) にサインインします。

1. パイプラインを選択し、[**編集**] を選択します。

1. 図の下部で、新しいステージを追加する場合は [**\$1 Add stage (\$1 ステージの追加)**] を選択します。既存のステージにアクションを追加する場合は、[**Edit stage (ステージの編集)**] を選択します。

1. [**Edit: <Stage> (編集: <ステージ>)**] で、シリアルアクションを追加する場合は [**\$1 Add action group (\$1 アクショングループの追加)**] を選択します。または、パラレルアクションを追加する場合は、[**\$1Add action (\$1アクションの追加)**] を追加します。

1. [**アクションの編集**] ページで、以下の操作を行います。

   1. [**アクション名**] に、クロスリージョンアクションの名前を入力します。

   1. [**Action provider (アクションプロバイダー)**] で、アクションプロバイダーを選択します。

   1. **リージョン**で、アクションのリソースを作成または作成する予定の AWS リージョンを選択します。リージョンを選択すると、このリージョンで使用できるリソースが一覧表示されて選択できるようになります。**リージョン**フィールドは、このアクションタイプとプロバイダータイプに対して AWS リソースが作成される場所を指定します。このフィールドには、アクションプロバイダーが AWS のサービスであるアクションのみが表示されます。[**リージョン**] フィールドは、デフォルトで、パイプラインと同じ AWS リージョン になります。

   1. [**入力アーティファクト**] で、前のステージからの適切な入力を選択します。たとえば、前のステージがソースステージである場合は、[**SourceArtifact**] を選択します。

   1. 設定するアクションプロバイダーのすべての必須フィールドに入力します。

   1. [**出力アーティファクト**] で、次のステージへの適切な出力を選択します。たとえば、次のステージがデプロイステージである場合は、[**BuildArtifact**] を選択します。

   1. **[保存]** を選択します。

1. [**Edit: <Stage> (編集: <ステージ>)**] で、**完了**] を選択します。

1. **[保存]** を選択します。

### パイプラインステージのクロスリージョンアクションを編集する (コンソール)
<a name="actions-cross-region-console-edit"></a>

コンソールを使用してパイプラインの既存のクロスリージョンアクションを編集します。

**注記**  
変更を保存する際にパイプラインが実行中の場合、その実行は完了しません。

**クロスリージョンアクションを編集するには**

1. コンソール ([https://console.aws.amazon.com/codesuite/codepipeline/home.](https://console.aws.amazon.com/codesuite/codepipeline/home.)) にサインインします。

1. パイプラインを選択し、[**編集**] を選択します。

1. [**Edit stage (ステージの編集)**] を選択します。

1. [**Edit: <Stage> (編集: <ステージ>)**] で、既存のアクションを編集するためのアイコンを選択します。

1. [**アクションの編集**] ページで、必要に応じてフィールドを変更します。

1. [**Edit: <Stage> (編集: <ステージ>)**] で、**完了**] を選択します。

1. **[保存]** を選択します。

### パイプラインステージからクロスリージョンアクションを削除する (コンソール)
<a name="actions-cross-region-console-delete"></a>

コンソールを使用してパイプラインから既存のクロスリージョンアクションを削除します。

**注記**  
変更を保存する際にパイプラインが実行中の場合、その実行は完了しません。

**クロスリージョンアクションを削除するには**

1. コンソール ([http://console.aws.amazon.com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home)) にサインインします。

1. パイプラインを選択し、[**編集**] を選択します。

1. [**Edit stage (ステージの編集)**] を選択します。

1. [**Edit: <Stage> (編集: <ステージ>)**] で、既存のアクションを削除するためのアイコンを選択します。

1. [**Edit: <Stage> (編集: <ステージ>)**] で、**完了**] を選択します。

1. **[保存]** を選択します。

## パイプラインにクロスリージョンアクションを追加する (CLI)
<a name="actions-cross-region-cli"></a>

を使用して AWS CLI 、クロスリージョンアクションを既存のパイプラインに追加できます。

を使用してパイプラインステージでクロスリージョンアクションを作成するには AWS CLI、オプション`region`フィールドとともに設定アクションを追加します。また、アクションのリージョンにアーティファクトバケットを作成しておく必要があります。単一リージョンパイプラインの `artifactStore` パラメータを指定する代わりに、`artifactStores` パラメータを使用して各リージョンのアーティファクトバケットのリストを含めます。

**注記**  
このチュートリアルおよびその例では、*リージョン A* がパイプラインの作成先のリージョンです。このアカウントでは、CodePipeline で使用するパイプラインアーティファクトやサービスロールの保存先である *リージョン A* Amazon S3 バケットにアクセスできます。*リージョン B* は、CodeDeploy が使用する CodeDeploy アプリケーション、デプロイグループ、およびサービスロールが作成されるリージョンです。

### 前提条件
<a name="actions-create-cross-region-prereq"></a>

以下を作成しておく必要があります。
+ *リージョン A* のパイプライン。
+ *リージョン B* の Amazon S3 アーティファクトバケット 
+ CodeDeploy アプリケーションや、リージョンをまたがるデプロイアクションのデプロイグループなど、アクションに必要なリソースが *リージョン B* にあります。

### パイプラインにクロスリージョンアクションを追加する (CLI)
<a name="actions-create-cross-region-cli"></a>

を使用して AWS CLI 、クロスリージョンアクションをパイプラインに追加します。

**クロスリージョンアクションを追加するには**

1. *リージョン A* のパイプラインで、**get-pipeline** コマンドを実行し、パイプライン構造を JSON ファイルにコピーします。例えば、`MyFirstPipeline` という名前のパイプラインに対して、以下のコマンドを実行します。

   ```
   aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json
   ```

   このコマンドは何も返しませんが、作成したファイルは、コマンドを実行したディレクトリにあります。

1. `region` フィールドを追加して、アクションのリージョンとリソースを含むクロスリージョンアクションを関連付けた新しいステージを追加します。以下の JSON サンプルは、プロバイダーを CodeDeploy とするクロスリージョンデプロイアクションを関連付けたデプロイステージを、新しいリージョン `us-east-1` に追加します。

   ```
    {
                   "name": "Deploy",
                   "actions": [
                       {
                           "inputArtifacts": [
                               {
                                   "name": "SourceArtifact"
                               }
                           ],
                           "name": "Deploy",
                           "region": "RegionB",
                           "actionTypeId": {
                               "category": "Deploy",
                               "owner": "AWS",
                               "version": "1",
                               "provider": "CodeDeploy"
                           },
                           "outputArtifacts": [],
                           "configuration": {
                               "ApplicationName": "name",
                               "DeploymentGroupName": "name"
                           },
                           "runOrder": 1
                       }
   ```

1. パイプライン構造で、`artifactStore` フィールドを削除し、新しいクロスリージョンアクションの `artifactStores` マップを追加します。マッピングには、アクションがある各 AWS リージョンのエントリを含める必要があります。マッピングの各エントリについて、リソースはそれぞれの AWS リージョンにある必要があります。以下の例で、`ID-A` は、*リージョン A* は暗号化キー ID、`ID-B` は、*リージョン B* の暗号化キー ID を表します。

   ```
   "artifactStores":{  
      "RegionA":{  
         "encryptionKey":{  
            "id":"ID-A",
            "type":"KMS"
         },
         "location":"Location1",
         "type":"S3"
      },
      "RegionB":{  
         "encryptionKey":{  
            "id":"ID-B",
            "type":"KMS"
         },
         "location":"Location2",
         "type":"S3"
      }
   }
   ```

   以下の JSON 例では、us-west-2 バケットは `my-storage-bucket` と表示されており、`my-storage-bucket-us-east-1` という名前の新しい us-east-1 バケットを追加します。

   ```
           "artifactStores": {
               "us-west-2": {
                   "type": "S3",
                   "location": "my-storage-bucket"
               },
               "us-east-1": {
                   "type": "S3",
                   "location": "my-storage-bucket-us-east-1"
               }
           },
   ```

1. **get-pipeline** コマンドを使用して取得したパイプライン構造を使用している場合、JSON ファイルから `metadata` 行を削除します。それ以外の場合は、**update-pipeline** コマンドで使用することはできません。`"metadata": { }` 行と、`"created"`、`"pipelineARN"`、`"updated"` フィールドを削除します。

   例えば、構造から以下の行を削除します。

   ```
   "metadata": {  
     "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name",
     "created": "date",
     "updated": "date"
     }
   ```

   ファイルを保存します。

1. 変更を適用するには、パイプライン JSON ファイルを指定して、**update-pipeline** コマンドを実行します。
**重要**  
ファイル名の前に必ず `file://` を含めてください。このコマンドでは必須です。

   ```
   aws codepipeline update-pipeline --cli-input-json file://pipeline.json
   ```

   このコマンドは、編集したパイプラインの構造全体を返します。出力は以下のようになります。

   ```
   {
       "pipeline": {
           "version": 4,
           "roleArn": "ARN",
           "stages": [
               {
                   "name": "Source",
                   "actions": [
                       {
                           "inputArtifacts": [],
                           "name": "Source",
                           "actionTypeId": {
                               "category": "Source",
                               "owner": "AWS",
                               "version": "1",
                               "provider": "CodeCommit"
                           },
                           "outputArtifacts": [
                               {
                                   "name": "SourceArtifact"
                               }
                           ],
                           "configuration": {
                               "PollForSourceChanges": "false",
                               "BranchName": "main",
                               "RepositoryName": "MyTestRepo"
                           },
                           "runOrder": 1
                       }
                   ]
               },
               {
                   "name": "Deploy",
                   "actions": [
                       {
                           "inputArtifacts": [
                               {
                                   "name": "SourceArtifact"
                               }
                           ],
                           "name": "Deploy",
                           "region": "us-east-1",
                           "actionTypeId": {
                               "category": "Deploy",
                               "owner": "AWS",
                               "version": "1",
                               "provider": "CodeDeploy"
                           },
                           "outputArtifacts": [],
                           "configuration": {
                               "ApplicationName": "name",
                               "DeploymentGroupName": "name"
                           },
                           "runOrder": 1
                       }
                   ]
               }
           ],
           "name": "AnyCompanyPipeline",
           "artifactStores": {
               "us-west-2": {
                   "type": "S3",
                   "location": "my-storage-bucket"
               },
               "us-east-1": {
                   "type": "S3",
                   "location": "my-storage-bucket-us-east-1"
               }
           }
       }
   }
   ```
**注記**  
**update-pipeline** コマンドは、パイプラインを停止します。**update-pipeline** コマンドを実行したときにパイプラインによりリビジョンが実行されている場合、その実行は停止します。更新されたパイプラインによりそのリビジョンを実行するには、パイプラインを手動で開始する必要があります。パイプラインを手動で開始するには **`start-pipeline-execution`** コマンドを使用します。

1. パイプラインを更新したら、クロスリージョンのアクションはコンソールに表示されます。  
![\[クロスリージョンアクションを含むパイプラインの概要。\]](http://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/images/cross-region-icon.png)

## パイプラインにクロスリージョンアクションを追加する (CloudFormation)
<a name="actions-create-cross-region-cfn"></a>

 CloudFormation を使用して、既存のパイプラインにクロスリージョンアクションを追加できます。

**を使用してクロスリージョンアクションを追加するには CloudFormation**

1. この例に示すように、`Region` パラメータをテンプレートの `ActionDeclaration` リソースに追加します。

   ```
   ActionDeclaration:
                 Type: Object
                 Properties:
                   ActionTypeId:
                     Type: ActionTypeId
                     Required: true
                   Configuration:
                     Type: Map
                   InputArtifacts:
                     Type: Array
                     ItemType:
                       Type: InputArtifact
                   Name:
                     Type: String
                     Required: true
                   OutputArtifacts:
                     Type: Array
                     ItemType:
                       Type: OutputArtifact
                   RoleArn:
                     Type: String
                   RunOrder:
                     Type: Integer
                   Region:
                     Type: String
   ```

1. `Mappings` で、この例で示しているように、キー `SecondRegionMap` および `RegionA` の値をマップする `RegionB` という名前のマッピング用のリージョンマップを追加します。`Pipeline` リソースの `artifactStore` フィールドで、新しいクロスリージョンアクションの `artifactStores` マップを以下のように追加します。

   ```
   Mappings:
     SecondRegionMap:
       RegionA:
         SecondRegion: "RegionB"
       RegionB:
         SecondRegion: "RegionA"
   
   ...
   
             Properties:
               ArtifactStores:
                 -
                   Region: RegionB
                   ArtifactStore:
                     Type: "S3"
                     Location: test-cross-region-artifact-store-bucket-RegionB
                 -
                   Region: RegionA
                   ArtifactStore:
                     Type: "S3"
                     Location: test-cross-region-artifact-store-bucket-RegionA
   ```

   以下の YAML 例では、*リージョン A* バケットを `us-west-2`、新しい *リージョン B* バケットを `eu-central-1` とします。

   ```
   Mappings:
     SecondRegionMap:
       us-west-2:
         SecondRegion: "eu-central-1"
       eu-central-1:
         SecondRegion: "us-west-2"
   
   ...
   
             Properties:
               ArtifactStores:
                 -
                   Region: eu-central-1
                   ArtifactStore:
                     Type: "S3"
                     Location: test-cross-region-artifact-store-bucket-eu-central-1
                 -
                   Region: us-west-2
                   ArtifactStore:
                     Type: "S3"
                     Location: test-cross-region-artifact-store-bucket-us-west-2
   ```

1. 更新したテンプレートをローカルコンピュータに保存し、 CloudFormation コンソールを開きます。

1. スタックを選択し、[**既存スタックの変更セットの作成**] を選択します。

1. テンプレートをアップロードし、 CloudFormationに示された変更を表示します。これらがスタックに加えられる変更です。新しいリソースがリストに表示されています。

1. **[実行]** を選択してください。