AWS Fargate WaitCondition フック構造を使用してリソースの依存関係とタスク実行を調整する - AWS 規範ガイダンス

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

AWS Fargate WaitCondition フック構造を使用してリソースの依存関係とタスク実行を調整する

Amazon Web Services、Stan Fan

概要

このパターンでは、Amazon Elastic Container Service (Amazon ECS) クラスターの AWS Fargate タスクをオーケストレーションするために設計されたクラウドネイティブソリューションである WaitCondition フック (waitcondition-hook-for-aws-fargate-task) npm パッケージを説明します。

WaitCondition フックは、 との統合用に特別にカスタマイズされた AWS Cloud Development Kit (AWS CDK) コンストラクトです AWS CloudFormation。WaitCondition フックの主な機能は、次のとおりです。

  • 待機条件メカニズムとして機能し、指定された Fargate タスクが完了するまで CloudFormation スタックの実行を一時停止します。これにより、正しい順序でのデプロイとリソースプロビジョニングがしやすくなります。

  • TypeScript と Python をサポートしているため、 AWS CDK プロジェクトに最適です。

  • AWSでコンテナ化されたアプリケーションのタスク完了とリソース管理を調整することで、開発者やアーキテクトがデプロイをオーケストレーションできるようにします。

  • CloudFormation ライフサイクルに埋め込まれた 1 つ以上のコンテナを使用する Fargate タスクの実行を可能にします。また、タスクの失敗を処理し、タスクの失敗後に CloudFormation スタックをロールバックできます。

  • カスタムタスクを有効にしたり、他のエンドポイントを呼び出したりして、リソースと Fargate タスク実行結果の間の依存関係を柔軟に追加できるようにします。例えば、CloudFormation スタックを一時停止し、データベース移行 (Fargate タスクによって実行) の完了を待ち、データベース移行の成功に依存する可能性のある他のリソースをプロビジョニングできます。

前提条件と制限

前提条件

  • アクティブ AWS アカウント。

  • AWS Cloud Development Kit (AWS CDK) ローカルワークステーションにインストールされたコマンドラインインターフェイス (CLI)。詳細については、 AWS CDK ドキュメントの AWS CDK CLI リファレンスを参照してください。

  • ローカルワークステーションにインストールされ、TypeScript のAWS CDK 用に設定されたノードパッケージマネージャー (npm)。詳細については、npm ドキュメントの [Node.js と npm のダウンロードとインストール] を参照してください。

  • ローカルワークステーションにインストールされた Yarn。詳細については、Yarn ドキュメントの「インストール」を参照してください。

制限事項

  • このソリューションは 1 つの にデプロイされます AWS アカウント。

  • 成功の場合、コンテナの期待されるリターンコードは 0 です。その他のリターンコードは失敗を示し、CloudFormation スタックはロールバックされます。

  • 一部の AWS のサービス は、すべてで利用できるわけではありません AWS リージョン。利用可能なリージョンについては、「AWS のサービス (リージョン別)」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択してください。

アーキテクチャ

コンストラクトアーキテクチャを次の図に示します。

waitcondition-hook-for-aws-fargate-task コンストラクトの AWS Step Functions ワークフロー。

この図表は、waitcondition-hook-for-aws-fargate-task のワークフローを示しています。

  1. WaitCondition および WaitConditionHandlerは、 AWS Lambda 関数からのレスポンスをリッスンするようにプロビジョニングされます。

  2. タスクの結果に応じて、Fargate タスクの終了によって CallbackFunction または ErrorHandlerFunction がトリガーされます。

  3. Lambda 関数は、SUCCEED シグナルか FAILURE シグナルを WaitConditionHandler に送信します。

  4. Fargate タスクの実行結果が成功だった場合、WaitConditionHandler はリソースのプロビジョニングを継続します。タスクが失敗した場合はスタックをロールバックします。

次の図は、データベース移行を実行するためのワークフローの例を示しています。

WaitCondition フックコンストラクトを使用した Amazon RDS データベース移行のワークフロー。

このワークフロー例では、waitcondition-hook-for-aws-fargate-task コンストラクトを使用して、次のようにデータベース移行を実行します。

  1. Amazon Relational Database Service (Amazon RDS) インスタンスがプロビジョニングされます。

  2. waitcondition-hook-for-aws-fargate-task コンストラクトは、データベース移行タスクを実行し、スタックを Amazon Elastic Compute Cloud (Amazon EC2) インスタンスとして一時停止します。

  3. 移行タスクが正常に終了すると、Succeed シグナルを CloudFormation に送信します。正常に終了しなかった場合は、Fail シグナルを CloudFormation に送信し、スタックをロールバックします。

ツール

AWS サービス

  • AWS Cloud Development Kit (AWS CDK) は、コードでクラウドインフラストラクチャを定義し、それをプロビジョニングするのに役立つソフトウェア開発フレームワークです CloudFormation。

  • CloudFormation は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および 全体のライフサイクルを通じてリソースを管理するのに役立ちます AWS リージョン。

  • Amazon CloudWatch は、 AWS リソースと で実行するアプリケーションのメトリクスを AWS リアルタイムでモニタリングするのに役立ちます。

  • Amazon Elastic Container Service (Amazon ECS)」 は、クラスターでのコンテナの実行、停止、管理を支援する、高速でスケーラブルなコンテナ管理サービスです。

  • AWS Fargate を使用すると、サーバーや Amazon EC2 インスタンスを管理する必要なくコンテナを実行できます。これは Amazon ECS と組み合わせて使用されます。

  • AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • AWS Step Functions は、 AWS Lambda 関数やその他の を組み合わせてビジネスクリティカルなアプリケーション AWS のサービス を構築するのに役立つサーバーレスオーケストレーションサービスです。

  • Amazon Virtual Private Cloud (Amazon VPC) は、定義した仮想ネットワークに AWS リソースを起動するのに役立ちます。この仮想ネットワークは、お客様自身のデータセンターで運用されていた従来のネットワークに似ていますが、 AWSのスケーラブルなインフラストラクチャを使用できるというメリットがあります。

その他のツール

  • npm は Node.js 環境で動作するソフトウェアレジストリで、パッケージの共有や借用、プライベートパッケージのデプロイ管理に使用されます。

  • Yarn は、JavaScript プロジェクトの依存関係を管理するために使用できるオープンソースのパッケージマネージャーです。Yarn は、パッケージの依存関係のインストール、更新、設定、削除をサポートします。

コードリポジトリ

このパターンのコードは、GitHub の waitcondition-hook-for-aws-fargate-task リポジトリで入手できます。

ベストプラクティス

エピック

タスク説明必要なスキル

をインストールします AWS CDK。

AWS CDK ローカルマシンまたは他の環境に をインストールするには、次のコマンドを実行します。

npm install -g aws-cdk@latest
クラウドアーキテクト、アプリ開発者

をブートストラップします AWS CDK。

ブートストラップは、デプロイ用の環境を準備するプロセスです。ターゲットと の AWS CDK ツールキットをブートストラップするには AWS アカウント AWS リージョン、次のコマンドを実行します。

cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1

このコマンドは、CDKToolkit という名前の CloudFormation スタックを作成します。

クラウドアーキテクト
タスク説明必要なスキル

CDK プロジェクトを作成します。

任意の言語を使用して、CDK プロジェクトを作成します。このパターンでは、TypeScript を使用します。TypeScript を使用して CDK プロジェクトを作成するには、次のコマンドを実行します。

cdk init app —language typescript

クラウドアーキテクト

パッケージをインストールします。

CDK プロジェクトのルートパスで npm install を実行します。CDK ライブラリをインストールしたら、次のコマンドを実行して waitcondition-hook-for-aws-fargate-task をインストールします。

yarn add waitcondition-hook-for-aws-fargate-task

クラウドアーキテクト

CDK アプリケーションと Amazon ECS コンポーネントをビルドします。

CDK プロジェクトをビルドします。Amazon ECS タスク定義リソースが必要です。タスク定義の作成に関する詳細については、Amazon ECS ドキュメントの「Amazon ECS タスク定義」を参照してください。

次の例ではこのコンストラクトを使用します。

import * as cdk from 'aws-cdk-lib'; import { Vpc } from 'aws-cdk-lib/aws-ec2'; import * as ecr from 'aws-cdk-lib/aws-ecr'; import * as ecs from 'aws-cdk-lib/aws-ecs'; import { Construct } from 'constructs'; import { FargateRunner } from 'waitcondition-hook-for-aws-fargate-task'; import { Queue } from 'aws-cdk-lib/aws-sqs'; export class FargateRunnerStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Define the VPC const vpc = new Vpc(this, 'MyVpc') // Define the Fargate Task const taskDefinition = new ecs.FargateTaskDefinition(this, 'MyTask', {}); // Import exiting ecr repo const repo = ecr.Repository.fromRepositoryName(this, 'MyRepo', 'RepoName'); // Add a container to the task taskDefinition.addContainer('MyContainer', { image: ecs.ContainerImage.fromEcrRepository(repo), }); // Create the Fargate runner const myFargateRunner = new FargateRunner(this, 'MyRunner', { fargateTaskDef: taskDefinition, timeout: `${60 * 5}`, vpc: vpc, }); // Create the SQS queue const myQueue = new Queue(this, 'MyQueue', {}); // Add dependency myQueue.node.addDependency(myFargateRunner); } }
クラウドアーキテクト

CDK アプリケーションを合成し、起動します。

  1. アセットと CloudFormation テンプレートを生成するには、CDK ルートパスで次のコマンドを実行します。

    cdk synth

  2. synth コマンドが成功したら、次のコマンドを実行してリソースをデプロイします。

    cdk deploy

waitcondition-hook-for-aws-fargate-task コンストラクトは Fargate タスクを実行します。

クラウドアーキテクト
タスク説明必要なスキル

リソースをクリーンアップします。

前のステップでプロビジョニングされたリソースをクリーンアップするには、次のコマンドを実行します。

cdk destroy
クラウドアーキテクト

トラブルシューティング

問題ソリューション

一般的な CloudFormation スタックの障害

一般的な CloudFormation スタックの障害のトラブルシューティングに役立つように、次の例に示すように --no-rollback フラグを追加します。

cdk deploy --no-rollback

このコマンドは CloudFormation スタックのロールバックを一時停止し、トラブルシューティングのためのリソースを提供します。詳細については、 CloudFormation ドキュメントの「リソースをプロビジョニングするときに障害を処理する方法を選択する」を参照してください。

AWS Step Functions 失敗

AWS Step Functions ステートマシンは、さまざまな理由で実行に失敗することがあります。—disable-rollback が設定されている場合は、次のステップを使用してトラブルシューティングを行います。

  1. にサインインし AWS マネジメントコンソール、検索フィールドに Step Functions と入力して、Step Functions サービスを選択します。

  2. 左側のナビゲーションペインで、[ステートマシン] を選択し、CloudFormation スタックによってプロビジョニングされるステートマシンを選択します。

  3. [実行] で、予期せず失敗した実行の名前を選択します。

  4. [イベント] ビューで、失敗したステップを選択します。

詳細については、 AWS Step Functions ドキュメントの「Step Functions の問題のトラブルシューティング」および「Step Functions コンソールの実行の詳細の表示」を参照してください。

AWS Lambda 関数の失敗

このコンストラクトは、CallbackFunctionErrorhandlerFunction の 2 つの Lambda 関数をプロビジョニングします。処理されない例外など、さまざまな理由で失敗する可能性があります。次の手順を使用して、トラブルシューティングを行います。

  1. にサインインし AWS マネジメントコンソール、検索フィールドに CloudWatch を入力し、CloudWatch サービスを選択します。

  2. 左側のナビゲーションペインで、[ロググループ] をクリックします。

  3. [検索] フィールドに、Lambda 関数の名前を入力します。

  4. Lambda 関数に関連付けられているロググループ名を選択します。

  5. Lambda 関数の実行結果に移動するには、最新のログストリームを選択します。

詳細については、 AWS Lambda ドキュメントの「Lambda の問題のトラブルシューティング」を参照してください。

関連リソース

AWS ドキュメント

その他のリソース