

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

# コンピューティング環境のブルー/グリーン更新を実行する
<a name="blue-green-updates"></a>

ブルー/グリーン更新は、既存のコンピューティング環境 (ブルー) に沿って新しいコンピューティング環境 (グリーン) を作成することでダウンタイムとリスクを軽減する更新戦略です。このアプローチにより、既存の環境を運用しながら、ワークロードを新しい環境に徐々に移行できます。ブルー/グリーン更新は最も安全な更新パスを提供し、任意のサービスロールタイプまたは割り当て戦略で機能します。

## 概要:
<a name="blue-green-overview"></a>

ブルー/グリーン更新には、本番環境に最適ないくつかの利点があります。更新プロセス中にワークロードを継続的に実行することで、*ダウンタイムをゼロ*にします。このアプローチによって*簡単にロールバックできる*機能を得られ、問題が発生したらすぐに元の環境に戻すことができます。本番ワークロードに完全に切り替える前に、新しい環境のパフォーマンスを検証して*段階的な移行*戦略を実行できます。また、この方法では、元の環境は変更されず、削除されるまで動作するため、*リスク軽減*の面でも優れています。

### ブルー/グリーン更新が必要な場合
<a name="blue-green-when-required"></a>

ブルー/グリーン更新は、以下の状況で使用する必要があります。
+ コンピューティング環境において `BEST_FIT` 配分戦略を使用する場合 (インフラストラクチャの更新をサポートしていない)
+ コンピューティング環境が *AWSServiceRoleForBatch* サービスにリンクされたロールを使用しない場合
+ 異なるサービスロールタイプ間で移行する必要がある場合

### ブルー/グリーン更新が推奨される場合
<a name="blue-green-when-recommended"></a>

ブルー/グリーン更新は、ワークロードにとってダウンタイムゼロが重要な本番環境で特に推奨されます。このアプローチは、本番ワークロードを移行する前に新しい設定をテストし、変更がパフォーマンスと信頼性の要件に適合していることを確認する必要がある場合に適しています。クイックロールバック機能がオペレーションにとって重要な場合、特に大幅な変更でカスタム AMI を更新する場合は、ブルー/グリーン更新を選択します。この方法は、変更に完全にコミットする前にパフォーマンス特性と動作を検証し、更新プロセスの信頼性を提供する場合にも最適です。

### 前提条件
<a name="blue-green-prerequisites"></a>

ブルー/グリーン更新を実行する前に、以下があることを確認してください。
+ コンピューティング環境を作成および管理するための適切な [IAM アクセス許可](IAM_policies.md#IAM_policies.title)
+ ジョブキューの設定を表示および変更するためのアクセス
+ 移行中の潜在的な障害を処理するためにジョブ定義用に設定されたジョブ再試行戦略。詳細については、「[ジョブの再試行の自動化](job_retries.md)」を参照してください。
+ 新しいコンピューティング環境の AMI ID。これは以下のいずれかとなります。
  + Amazon ECS 最適化 AMI の最近の承認済みバージョン (デフォルトで使用)
  + Amazon ECS コンテナインスタンス AMI 仕様を満たすカスタム AMI。カスタム AMI を使用する場合は、次のいずれかの方法で指定できます。
    + EC2 設定で**イメージ ID オーバーライド**フィールドを使用する
    + 起動テンプレートでの指定

    カスタム AMI の作成の詳細については、「[チュートリアル: コンピューティングリソース AMI を作成する](create-batch-ami.md)」を参照してください。

新しい環境を作成する前に、既存のコンピューティング環境の設定を記録する必要があります。これを行うには、 AWS マネジメントコンソール または を使用します AWS CLI。

**注記**  
次の手順では、AMI のみを変更するブルー/グリーン更新を実行する方法について詳しく説明します。新しい環境の他の設定を更新できます。

**重要**  
古い (ブルー) コンピューティング環境を削除すると、インスタンスが終了するため、それらのインスタンスで現在実行中のジョブはすべて失敗します。これらの障害を自動的に処理するように、ジョブ定義でジョブ再試行戦略を設定します。詳細については、「[ジョブの再試行の自動化](job_retries.md)」を参照してください。  
新しい環境に確信を持てたら、以下を行います。  
ジョブキューを編集して古いコンピューティング環境を削除します。
古い環境で実行中のジョブが完了するまで待ちます。
古いコンピューティング環境を削除します。

------
#### [ Performing blue/green updates using the AWS マネジメントコンソール ]

1. 現在のコンピューティング環境のクローンを作成する

   1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) で AWS Batch コンソールを開きます。

   1. 既存のコンピューティング環境を選択します。

   1. **[アクション]** を選択してから **[クローン]** を選択します。

   1. **[名前]** で、新しいコンピューティング環境の一意の名前を入力します。

   1. **[次へ]** を選択します。

   1. **[インスタンス設定]** セクションで AMI の設定を更新します。

      1. **[追加設定]** を展開します。

      1. **[EC2 設定]** では、**[イメージタイプ]** に新しい AMI タイプを指定し、**[イメージ ID オーバーライド]** フィールドに AMI ID を指定します。

   1. [**次へ**] を選択します。

   1. **[ネットワーク設定]** で **[次へ]** を選択します。

   1. 既存の環境から自動的にコピーされる他の設定を確認します。

   1. **[コンピューティング環境の作成]** を選択します。

   1. 新しいコンピューティング環境のステータスが `VALID` になるまで待ちます。

1. ジョブキューの順序を変更する

   1. ナビゲーションペインで **[キュー]** を選択します。

   1. 既存のコンピューティング環境に関連付けられているジョブキューを選択します。

   1. **[編集]** を選択します。

   1. **[接続されたコンピューティング環境]** で、新しいコンピューティング環境を追加します。
      + 新しいコンピューティング環境を既存の環境よりも高い順序で追加して、ワークロードを移行します。
      + 新しい環境が正しく動作していることを確認したら、低い順序の番号を付けることで、それをプライマリ環境にすることができます。

   1. **[ジョブキューの更新]** を選択します。

1. クリーンアップ

   1. 新しい環境でジョブの実行をモニタリングし、すべてが期待どおりに動作していることを確認します。

   1. 新しい環境に確信を持てたら、以下を行います。

      1. ジョブキューを編集して古いコンピューティング環境を削除します。

      1. 古い環境で実行中のジョブが完了するまで待ちます。

      1. 古いコンピューティング環境を削除します。

------
#### [ Performing blue/green updates using the AWS CLI ]

1. を使用して設定を取得するには AWS CLI、次のコマンドを使用します。

   ```
   aws batch describe-compute-environments \
     --compute-environments your-compute-environment-name
   ```

   新しい環境を作成するときに、参照用に出力を保存します。

1. 既存の環境の設定を使用して新しいコンピューティング環境を作成しますが、新しい AMI を使用します。以下に、コマンド構造の例を示します。

   この例の値を前のステップの実際の設定に置き換えます。

   ```
   cat <<EOF > ./blue-green-compute-environment.json
   {
     "computeEnvironmentName": "your-new-compute-environment-name",
     "type": "MANAGED",
     "state": "ENABLED",
     "computeResources": {
       "instanceRole": "arn:aws:iam::012345678901:instance-profile/ecsInstanceRole",
       "type": "EC2",
       "minvCpus": 2,
       "desiredvCpus": 2,
       "maxvCpus": 256,
       "instanceTypes": [
         "optimal"
       ],
       "allocationStrategy": "BEST_FIT_PROGRESSIVE",
       "ec2Configuration": [
         {
           "imageType": "ECS_AL2023",
           "imageIdOverride": "ami-0abcdef1234567890"
         }
       ],
       "subnets": [,
         "subnet-0abcdef1234567890"
       ],
       "securityGroupIds": [
         "sg-0abcdef1234567890"
       ]
     }
   }
   EOF
   ```

   ```
   $ aws batch create-compute-environment --cli-input-json file://./blue-green-compute-environment.json
   ```

1. 新しい環境が使用可能になるまで待ちます。

   ```
   aws batch describe-compute-environments \
     --compute-environments your-new-compute-environment-name \
     --query 'computeEnvironments[].status'
   ```

1. 新しいコンピューティング環境をジョブキューに追加します。

   ```
   aws batch update-job-queue \
     --job-queue your-job-queue \
     --compute-environment-order order=1,computeEnvironment=your-existing-environment \
     order=2,computeEnvironment=your-new-compute-environment-name
   ```

1. 検証したら、再度更新して新しい環境をプライマリにします。

   ```
   aws batch update-job-queue \
     --job-queue your-job-queue \
     --compute-environment-order order=1,computeEnvironment=your-new-compute-environment-name
   ```

   古い環境ですべてのジョブが完了したら、無効にしてから削除します。

   ```
   aws batch update-compute-environment \
       --compute-environment your-existing-environment \
       --state DISABLED
   ```

   ```
   aws batch delete-compute-environment \
     --compute-environment your-existing-environment
   ```

------