コンピューティング環境のブルー/グリーン更新を実行する
ブルー/グリーン更新は、既存のコンピューティング環境 (ブルー) に沿って新しいコンピューティング環境 (グリーン) を作成することでダウンタイムとリスクを軽減する更新戦略です。このアプローチにより、既存の環境を運用しながら、ワークロードを新しい環境に徐々に移行できます。ブルー/グリーン更新は最も安全な更新パスを提供し、任意のサービスロールタイプまたは割り当て戦略で機能します。
概要
ブルー/グリーン更新には、本番環境に最適ないくつかの利点があります。更新プロセス中にワークロードを継続的に実行することで、ダウンタイムをゼロにします。このアプローチによって簡単にロールバックできる機能を得られ、問題が発生したらすぐに元の環境に戻すことができます。本番ワークロードに完全に切り替える前に、新しい環境のパフォーマンスを検証して段階的な移行戦略を実行できます。また、この方法では、元の環境は変更されず、削除されるまで動作するため、リスク軽減の面でも優れています。
ブルー/グリーン更新が必要な場合
ブルー/グリーン更新は、以下の状況で使用する必要があります。
-
コンピューティング環境において BEST_FIT 配分戦略を使用する場合 (インフラストラクチャの更新をサポートしていない)
-
コンピューティング環境が AWSServiceRoleForBatch サービスにリンクされたロールを使用しない場合
-
異なるサービスロールタイプ間で移行する必要がある場合
ブルー/グリーン更新が推奨される場合
ブルー/グリーン更新は、ワークロードにとってダウンタイムゼロが重要な本番環境で特に推奨されます。このアプローチは、本番ワークロードを移行する前に新しい設定をテストし、変更がパフォーマンスと信頼性の要件に適合していることを確認する必要がある場合に適しています。クイックロールバック機能がオペレーションにとって重要な場合、特に大幅な変更でカスタム AMI を更新する場合は、ブルー/グリーン更新を選択します。この方法は、変更に完全にコミットする前にパフォーマンス特性と動作を検証し、更新プロセスの信頼性を提供する場合にも最適です。
前提条件
ブルー/グリーン更新を実行する前に、以下があることを確認してください。
-
コンピューティング環境を作成および管理するための適切な IAM アクセス許可
-
ジョブキュー設定を表示および変更するためのアクセス
-
移行中の潜在的な障害を処理するためにジョブ定義用に設定されたジョブ再試行戦略。詳細については、ジョブの再試行の自動化 を参照してください。
-
新しいコンピューティング環境の AMI ID。これは以下のいずれかとなります。
-
Amazon ECS 最適化 AMI の最近の承認済みバージョン (デフォルトで使用)
-
Amazon ECS コンテナインスタンス AMI 仕様を満たすカスタム AMI。カスタム AMI を使用する場合は、次のいずれかの方法で指定できます。
カスタム AMI の作成の詳細については、「チュートリアル: コンピューティングリソース AMI を作成する」を参照してください。
新しい環境を作成する前に、既存のコンピューティング環境の設定を記録する必要があります。これを行うには、AWS マネジメントコンソール または AWS CLI を使用します。
次の手順では、AMI のみを変更するブルー/グリーン更新を実行する方法について詳しく説明します。新しい環境の他の設定を更新できます。
古い (ブルー) コンピューティング環境を削除すると、インスタンスが終了するため、それらのインスタンスで現在実行中のジョブはすべて失敗します。これらの障害を自動的に処理するように、ジョブ定義でジョブ再試行戦略を設定します。詳細については、ジョブの再試行の自動化 を参照してください。
新しい環境に確信を持てたら、以下を行います。
-
ジョブキューを編集して古いコンピューティング環境を削除します。
-
古い環境で実行中のジョブが完了するまで待ちます。
-
古いコンピューティング環境を削除します。
- Performing blue/green updates using the AWS マネジメントコンソール
-
-
現在のコンピューティング環境のクローンを作成する
-
AWS Batch コンソールを https://console.aws.amazon.com/batch/ で開きます。
-
既存のコンピューティング環境を選択します。
-
[アクション] を選択してから [クローン] を選択します。
-
[名前] で、新しいコンピューティング環境の一意の名前を入力します。
[次へ] を選択します。
-
[インスタンス設定] セクションで AMI の設定を更新します。
-
[追加設定] を展開します。
-
[EC2 設定] では、[イメージタイプ] に新しい AMI タイプを指定し、[イメージ ID オーバーライド] フィールドに AMI ID を指定します。
[次へ] を選択します。
[ネットワーク設定] で [次へ] を選択します。
-
既存の環境から自動的にコピーされる他の設定を確認します。
-
[コンピューティング環境の作成] を選択します。
-
新しいコンピューティング環境のステータスが VALID になるまで待ちます。
-
ジョブキューの順序を変更する
-
ナビゲーションペインで [キュー] を選択します。
-
既存のコンピューティング環境に関連付けられているジョブキューを選択します。
-
[編集] を選択します。
-
[接続されたコンピューティング環境] で、新しいコンピューティング環境を追加します。
-
[ジョブキューの更新] を選択します。
-
クリーンアップ
-
新しい環境でジョブの実行をモニタリングし、すべてが期待どおりに動作していることを確認します。
-
新しい環境に確信を持てたら、以下を行います。
-
ジョブキューを編集して古いコンピューティング環境を削除します。
-
古い環境で実行中のジョブが完了するまで待ちます。
-
古いコンピューティング環境を削除します。
- Performing blue/green updates using the AWS CLI
-
AWS CLI を使用して設定を取得するには、以下のコマンドを使用します。
aws batch describe-compute-environments \
--compute-environments your-compute-environment-name
新しい環境を作成するときに、参照用に出力を保存します。
既存の環境の設定を使用して新しいコンピューティング環境を作成しますが、新しい 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
新しい環境が使用可能になるまで待ちます。
aws batch describe-compute-environments \
--compute-environments your-new-compute-environment-name \
--query 'computeEnvironments[].status'
新しいコンピューティング環境をジョブキューに追加します。
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
検証したら、再度更新して新しい環境をプライマリにします。
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