Amazon ECS リニアデプロイの作成
Amazon ECS リニアデプロイを使用すると、指定した時間間隔でトラフィックを均等に徐々に移行できます。これにより、デプロイプロセスの各ステップで実施する検証を制御できます。
前提条件
リニアデプロイを開始する前に、次の操作を行います。
-
適切なアクセス許可を設定します。
-
Elastic Load Balancing のアクセス許可の詳細については、「ロードバランサー用の Amazon ECS インフラストラクチャの IAM ロール」を参照してください。
-
Lambda のアクセス許可の詳細については、「Amazon ECS ブルー/グリーンデプロイの Lambda 関数に必要となるアクセス許可」を参照してください。
-
-
Amazon ECS リニアデプロイでは、サービスが次のいずれかの機能を使用する必要があります。適切なリソースを設定してください。
-
Application Load Balancer – 詳細については、「ブルー/グリーンデプロイ、リニアデプロイおよびカナリアデプロイ用の Application Load Balancer リソース」を参照してください。
-
-
新しいサービスリビジョンにトラフィックをルーティングするためのルールを作成します。詳細については、「Elastic Load Balancing Application Load Balancers」の「リスナールール」を参照してください。
-
グリーンサービスリビジョンのターゲットグループを作成します。タスクに
awsvpcネットワークモードを使用する場合、ターゲットタイプはipである必要があります。ターゲットグループについては、「Elastic Load Balancing Application Load Balancer」の「ターゲットグループ」を参照してください。
手順
コンソールまたは AWS CLI を使用して、Amazon ECS リニアデプロイサービスを作成できます。
- Console
-
コンソール (https://console.aws.amazon.com/ecs/v2
) を開きます。 -
サービスを起動するリソースを決定します。
サービスの起動元 Steps クラスター
-
[Clusters] ページで、サービスを作成するクラスターを選択します。
クラスター詳細のページが表示されます。
-
[Services (サービス)] タブで、[Create (作成]) を選択します。
タスク定義 -
[タスク定義] ページで、タスク定義を選択します。
-
[デプロイ] メニューで、[サービスの作成] を選択します。
[サービスの作成] ページが表示されます。
-
-
[サービスの詳細] で、次の操作を行います。
-
[タスク定義ファミリー] では、使用するタスク定義を選択します。次に [タスク定義リビジョン] には、使用するリビジョンを入力します。
-
[Service name] (サービス名) でサービスの名前を入力します。
-
-
既存のクラスターでサービスを実行するには、[既存のクラスター] にクラスターを選択します。新しいクラスターでサービスを実行するには、[クラスターの作成] を選択します。
-
クラスターのインフラストラクチャ全体にタスクを分散する方法を選択します。[コンピュート設定] で、オプションを選択します。
コンピューティングオプション Steps キャパシティプロバイダー戦略
-
[コンピューティングオプション] で、[キャパシティプロバイダー戦略] を選択します。
-
戦略を選択:
-
デフォルトのキャパシティープロバイダー戦略を使用するには、[Use cluster default] (デフォルトのクラスターを使用) を選択します。
-
クラスターにデフォルトのキャパシティプロバイダー戦略がない場合、またはカスタム戦略を使用する場合は、[カスタムを使用]、[キャパシティプロバイダー戦略を追加] を選択し、[ベース]、[キャパシティプロバイダー]、[重み] を指定して、カスタムキャパシティプロバイダー戦略を定義します。
-
注記
戦略でキャパシティープロバイダーを使用するには、キャパシティープロバイダーをクラスターに関連付ける必要があります。
起動タイプ -
[Compute options] (コンピューティングオプション) セクションで、[Launch type] (起動タイプ) を選択します。
-
[Launch type] (起動タイプ) で、起動タイプを選択します。
-
(オプション) Fargate が指定されている場合は、[プラットフォームバージョン] で、使用するプラットフォームのバージョンを指定します。プラットフォームバージョンが指定されない場合、
LATESTプラットフォームバージョンが使用されます。
-
-
[デプロイメント設定] で、次の操作を行います。
-
[サービスタイプ] では、[レプリカ] を選択します。
-
[Desired tasks] (必要なタスク) で、サービス内で起動および維持するタスクの数を入力します。
-
Amazon ECS がアベイラビリティーゾーン間のタスクの分散をモニタリングし、不均衡が発生したときにタスクを再分散するには、[アベイラビリティーゾーンのサービス再調整] で [アベイラビリティーゾーンのサービス再調整] を選択します。
-
[ヘルスチェックの猶予期間] には、タスクの初回起動後にサービススケジューラが異常な Elastic Load Balancing、VPC Lattice、コンテナヘルスチェックを無視する時間 (秒単位) を入力します。ヘルスチェックの猶予期間値を指定しない場合、デフォルト値 0 が使用されます。
-
-
[デプロイ設定] で、リニアデプロイ設定を構成します。
-
[デプロイ戦略] で、[リニア] を選択します。
-
[トラフィック増分の割合] には、各増分で移行するトラフィックの割合を入力します (例えば、10% 単位でトラフィックを移行するには 10%)。
-
[増分間隔]には、各トラフィック移行増分間の待機時間を分単位で入力します。
-
[ベイク時間] には、ブルーリビジョンが終了する前に、トラフィックの最終移行後にブルーおよびグリーンのサービスリビジョンの両方が同時に実行される時間 (分) を入力します。
-
(オプション) Lambda 関数を実行し、デプロイの特定段階で実行します。[デプロイライフサイクルフック] で、ライフサイクルフックを実行するステージを選択します。
ライフサイクルフックを追加する方法
-
[Add] (追加) を選択します。
-
[Lambda 関数] には、ARN の関数名を入力します。
-
[ロール] では、Lambda 関数を呼び出すアクセス許可を持つ IAM ロールを選択します。
-
[ライフサイクルステージ] では、Lambda 関数を実行するステージを選択します。
-
-
-
Amazon ECS がデプロイの障害を検出して処理する方法を設定するには、[Deployment failure detection] (デプロイ障害検出) を展開し、オプションを選択します。
-
タスクを開始できない場合にデプロイを停止するには、[Use the Amazon ECS deployment circuit breaker] (Amazon ECS デプロイサーキットブレーカーを使用する) を選択します。
デプロイサーキットブレーカーによってデプロイが失敗状態に設定されたときに、ソフトウェアがデプロイを最後に完了したデプロイ状態に自動的にロールバックするようにするには、[失敗時のロールバック] を選択します。
-
アプリケーションメトリクスに基づいてデプロイを停止するには、[CloudWatch アラームを使用する] を選択します。次に、[CloudWatch アラーム名] からアラームを選択します。新しいアラームを作成するには、CloudWatch コンソールに移動します。
CloudWatch アラームによってデプロイが失敗状態に設定されたときに、ソフトウェアがデプロイを最後に完了したデプロイ状態に自動的にロールバックするようにするには、[失敗時のロールバック] を選択します。
-
-
(オプション) Service Connect を使用してサービスを相互接続するには、[Service Connect] を展開して以下を指定します。
-
[Service Connect をオンにする] を選択します。
-
[Service Connect configuration] (Service Connect 設定) で、クライアントモードを指定します。
-
サービスが名前空間内の他のサービスへの接続のみを必要とするネットワーククライアントアプリケーションを実行している場合は、[クライアント側のみ] を選択します。
-
サービスがネットワークまたは Web サービスアプリケーションを実行していて、このサービスにエンドポイントを提供し、名前空間内の他のサービスに接続する必要がある場合は、[Client and server] (クライアントとサーバー) を選択します。
-
-
デフォルトのクラスター名前空間ではない名前空間を使用するには、[Namespace] (名前空間) でサービス名前空間を選択します。この場合、AWS アカウントの同じ AWS リージョンで個別に作成された名前空間、またはAWS Resource Access Manager (AWS RAM) を使用してアカウントと共有されている同じリージョンの名前空間のいずれかを選択できます。共有 AWS Cloud Map 名前空間の詳細については、「AWS Cloud Map デベロッパーガイド」の「クロスアカウント AWS Cloud Map 名前空間の共有」を参照してください。
-
(オプション) リニアデプロイのテストトラフィックヘッダーのルールを設定します。[テストトラフィックのルーティング] では、以下を指定します。
-
[テストトラフィックヘッダーのルールの有効化] を選択し、テスト中に特定のリクエストをグリーンサービスリビジョンにルーティングします。
-
[ヘッダー一致ルール] では、テストトラフィックをルーティングする条件を設定します。
-
[ヘッダー名]: 一致する HTTP ヘッダーの名前を入力します (例えば、
X-Test-VersionまたはUser-Agent)。 -
[一致タイプ]: 一致する条件を選択します。
-
[完全一致]: ヘッダー値が指定された値と完全に一致するリクエストをルーティングする
-
[ヘッダーが存在する]: 値に関係なく、指定されたヘッダーを含むリクエストをルーティングする
-
[パターン一致]: ヘッダー値が指定されたパターンと一致するリクエストをルーティングする
-
-
[ヘッダー値] (完全一致またはパターン一致を使用する場合): 照合する値またはパターンを入力します。
複数のヘッダー一致ルールを追加し、複雑なルーティングロジックを作成できます。設定されたルールに一致するリクエストは、テストのためにグリーンサービスリビジョンにルーティングされます。
-
-
[ヘッダールールの追加] を選択し、追加のヘッダー一致条件を設定します。
注記
テストトラフィックヘッダーのルールにより、完全なデプロイを完了する前に、制御されたトラフィックで新機能を検証できます。これにより、ブルーサービスリビジョンへの通常のトラフィックフローを維持しながら、特定のリクエスト (内部テストツールやベータユーザーなどによるもの) でグリーンサービスリビジョンをテストできます。
-
-
(オプション) ログ設定を指定します。[ログコレクションを使用] を選択します。デフォルトのオプションでは、コンテナログを CloudWatch Logs に送信します。その他のログドライバオプションは、AWS FireLens を使用して構成されます。詳細については、「Amazon ECS ログを AWS サービスまたは AWS Partner に送信する」を参照してください。
以下では、各コンテナログの送信先について詳しく説明します。
-
Amazon CloudWatch — コンテナログを CloudWatch Logs に送信するようにタスクを設定します。デフォルトのログドライバーオプションが提供され、ユーザーに代わり CloudWatch ロググループを作成します。別のロググループ名を指定するには、ドライバーオプションの値を変更します。
-
[Amazon Data Firehose] — Firehose にコンテナログを送信するようタスクを設定します。Firehose 配信ストリームにログを送信するデフォルトのログドライバーオプションが提供されています。別の配信ストリーム名を指定するには、ドライバーオプションの値を変更します。
-
Amazon Kinesis Data Streams — Kinesis Data Streams にコンテナログを送信するようタスクを設定します。Kinesis Data Streams のストリームにログを送信するデフォルトのログドライバーオプションが提供されています。別のストリーム名を指定するには、ドライバーオプションの値を変更します。
-
Amazon OpenSearch Service — コンテナログを OpenSearch Service ドメインに送信するようタスクを設定します。ログドライバーオプションを提供する必要があります。
-
Amazon S3 — Amazon S3 バケットにコンテナログを送信するようタスクを設定します。デフォルトのログドライバーオプションが提供されていますが、有効な Amazon S3 バケット名を指定する必要があります。
-
-
-
(オプション) リニアデプロイ用に [ロードバランシング] を設定します。
Elastic Load Balancing のタイプ Steps Application Load Balancer
-
[ロードバランサーのタイプ] では [Application Load Balancer] を選択します。
-
選択新しいロードバランサーを作成するをクリックして新しいApplication Load Balancer を作成するか、既存のロードバランサーを使用する既存のApplication Load Balancer を選択します。
-
[コンテナ] では、サービスをホストするコンテナを選択します。
-
[Load balancer name] (ロードバランサー名) では、一意な名前を入力します。
-
[Listener] (リスナー) で、Application Load Balancer が接続リクエストをリッスンするポートとプロトコルを入力します。デフォルトでは、ロードバランサーはポート 80 と HTTP を使用するように設定されます。
-
[本番ルール] には、ルールの [評価順序] および [パスパターン] を入力します。
このルールは、本番サービスリビジョンのトラフィック用です。
-
[テストルール] には、ルールの [評価順序] および [パスパターン] を入力します。
このルールは、テストサービスリビジョンのトラフィック用です。
-
-
[ターゲットグループ] では、以下を設定します。
-
[Target group name] (ターゲットグループ名) では、Application Load Balancer がリクエストをルーティングするターゲットグループの名前とプロトコルを入力します。
-
[プロトコル] では、Application Load Balancer がリクエストをルーティングするターゲットグループのプロトコルを選択します。デフォルトでは、ターゲットグループは、タスク定義で定義されている最初のコンテナにリクエストをルーティングします。
-
[登録解除の遅延] には、ロードバランサーがターゲットの状態を
UNUSEDに変更するまでの秒数を入力します。デフォルトは 300 秒です。 -
[Health check path] (ヘルスチェックパス) では、Application Load Balancer とコンテナ間の接続の正常性を検証するために、Application Load Balancer が定期的にリクエストを送信するコンテナ内に存在するパスを入力します。デフォルトはルートディレクトリ (
/)。 -
[代替グループ名] には、テストサービスリビジョンのターゲットグループのグループ名を入力します。
-
-
-
(オプション)サービスとタスクを識別しやすくするには、[Tags] (タグ) セクションを展開し、タグを設定します。
新しく起動したすべてのタスクに対して、Amazon ECS がクラスター名とタスク定義タグで自動的にタグ付けするようにするには、[Amazon ECS マネージドタグを有効にする] を選択し、[タグの伝播元] で [タスク定義] を選択します。
新しく起動したすべてのタスクに対して、Amazon ECS がクラスター名とサービスタグで自動的にタグ付けするようにするには、[Amazon ECS マネージドタグを有効にする] を選択し、[タグの伝播元] で [サービス] を選択します。
タグを追加または削除します。
-
[タグを追加] [Add tag] (タグを追加) を選択し、以下を実行します。
-
[キー] にはキー名を入力します。
-
[値] にキー値を入力します。
-
-
[タグの削除] タグの横にある [タグの削除] を選択します。
-
-
[作成] を選択します。
- AWS CLI
-
-
linear-service-definition.jsonという名前のファイルを作成し、次の内容を記述します。user-inputを独自の値に置き換えます。{ "serviceName": "myLinearService", "cluster": "arn:aws:ecs:us-west-2:123456789012:cluster/sample-fargate-cluster", "taskDefinition": "sample-fargate:1", "desiredCount": 5, "launchType": "FARGATE", "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-09ce6e74c116a2299", "subnet-00bb3bd7a73526788", "subnet-0048a611aaec65477" ], "securityGroups": [ "sg-09d45005497daa123" ], "assignPublicIp": "ENABLED" } }, "deploymentController": { "type": "ECS" }, "deploymentConfiguration": { "strategy": "LINEAR", "maximumPercent": 200, "minimumHealthyPercent": 100, "linearConfiguration": { "stepPercentage": 10.0, "stepBakeTimeInMinutes":6 }, "bakeTimeInMinutes": 10, "alarms": { "alarmNames": [ "myAlarm" ], "rollback": true, "enable": true } }, "loadBalancers": [ { "targetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/blue-target-group/54402ff563af1197", "containerName": "fargate-app", "containerPort": 80, "advancedConfiguration": { "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/green-target-group/cad10a56f5843199", "productionListenerRule": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-linear-demo/32e0e4f946c3c05b/9cfa8c482e204f7d/831dbaf72edb911", "roleArn": "arn:aws:iam::123456789012:role/LoadBalancerManagementforECS" } } ] } -
create-serviceを実行します。aws ecs create-service --cli-input-json file://linear-service-definition.json
-
次のステップ
-
サービスを更新してデプロイを開始します。詳細については、「Amazon ECS サービスを更新する」を参照してください。
-
デプロイプロセスをモニタリングし、リニアパターンに従っていることを確認します。
-
グリーンサービスリビジョンが作成され、スケールアップされる
-
トラフィックは指定された間隔で段階的に移行されます。
-
各増分は、次の移行の前に指定された間隔を待機します。
-
すべてのトラフィックが移行されると、ベイク時間が開始されます。
-
ベイク時間が過ぎたら、ブルーリビジョンが終了する
-