

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

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

*Amazon Web Services、Stan Fan*

## 概要


このパターンでは、Amazon Elastic Container Service (Amazon ECS) クラスターの [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) タスクをオーケストレーションするために設計されたクラウドネイティブソリューションである 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 リファレンス](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)を参照してください。
+ ローカルワークステーションにインストールされ、[TypeScript のAWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) 用に設定されたノードパッケージマネージャー (npm)。詳細については、npm ドキュメントの [[Node.js と npm のダウンロードとインストール]](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) を参照してください。
+ ローカルワークステーションにインストールされた Yarn。詳細については、Yarn ドキュメントの「[インストール](https://yarnpkg.com/getting-started/install)」を参照してください。

**制限事項**
+ このソリューションは 1 つの にデプロイされます AWS アカウント。
+ 成功の場合、コンテナの期待されるリターンコードは `0` です。その他のリターンコードは失敗を示し、CloudFormation スタックはロールバックされます。
+ 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「[AWS のサービス (リージョン別)](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについては「[Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」から、サービスのリンクを選択してご確認ください。

## アーキテクチャ


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

![\[waitcondition-hook-for-aws-fargate-task コンストラクトの AWS Step Functions ワークフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/e58680e3-f89f-422f-b0e1-e85605ae8bf9/images/598020df-908c-4486-9844-c05af759c18a.png)


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

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

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

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

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

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

![\[WaitCondition フックコンストラクトを使用した Amazon RDS データベース移行のワークフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/e58680e3-f89f-422f-b0e1-e85605ae8bf9/images/3b83fc2a-80bb-4ba9-9637-782060493cf0.png)


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

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

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

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

## ツール


**AWS サービス**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) は、コードでクラウドインフラストラクチャを定義し、それをプロビジョニングするのに役立つソフトウェア開発フレームワークです CloudFormation。
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および 全体のライフサイクルを通じてリソースを管理するのに役立ちます AWS リージョン。
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) は、 AWS リソースと で実行しているアプリケーションのメトリクスを AWS リアルタイムでモニタリングするのに役立ちます。
+ 「[Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)」 は、クラスターでのコンテナの実行、停止、管理を支援する、高速でスケーラブルなコンテナ管理サービスです。
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) を使用すると、サーバーや Amazon EC2 インスタンスを管理する必要なくコンテナを実行できます。これは Amazon ECS と組み合わせて使用されます。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、誰を認証し、誰に使用を認可するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) は、 AWS Lambda 関数やその他の を組み合わせてビジネスクリティカルなアプリケーション AWS のサービス を構築するのに役立つサーバーレスオーケストレーションサービスです。
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) は、定義した仮想ネットワークに AWS リソースを起動するのに役立ちます。この仮想ネットワークは、お客様自身のデータセンターで運用されていた従来のネットワークに似ていますが、 AWSのスケーラブルなインフラストラクチャを使用できるというメリットがあります。

**その他のツール**
+ [npm](https://docs.npmjs.com/about-npm) は Node.js 環境で動作するソフトウェアレジストリで、パッケージの共有や借用、プライベートパッケージのデプロイ管理に使用されます。
+ [Yarn](https://yarnpkg.com/) は、JavaScript プロジェクトの依存関係を管理するために使用できるオープンソースのパッケージマネージャーです。Yarn は、パッケージの依存関係のインストール、更新、設定、削除をサポートします。

**コードリポジトリ**

このパターンのコードは、GitHub の [waitcondition-hook-for-aws-fargate-task](https://github.com/aws-samples/waitcondition-hook-for-aws-fargate-task) リポジトリで入手できます。

## ベストプラクティス

+  AWS CDK アプリを構築するときは、v2 AWS CDK ドキュメントの「 [を使用したクラウドインフラストラクチャの開発とデプロイのベストプラクティス AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html)」に従ってください。
+  AWS Fargate タスクについては、[Amazon ECS ドキュメントの「Amazon ECS コンテナイメージのベストプラクティス](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/application.html)」に従ってください。

## エピック


### のセットアップ AWS CDK



| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| をインストールします AWS CDK。 |  AWS CDK ローカルマシンまたは他の環境に をインストールするには、次のコマンドを実行します。<pre>npm install -g aws-cdk@latest</pre> | クラウドアーキテクト、アプリ開発者 | 
| をブートストラップします AWS CDK。 | [ブートストラップ](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)は、デプロイ用の[環境](https://docs.aws.amazon.com/cdk/v2/guide/environments.html)を準備するプロセスです。ターゲット AWS アカウント と の AWS CDK ツールキットをブートストラップするには AWS リージョン、次のコマンドを実行します。<pre>cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1 </pre>このコマンドは、`CDKToolkit` という名前の CloudFormation スタックを作成します。 | クラウドアーキテクト | 

### AWS Fargate タスクコンストラクトの WaitCondition フックを実行する



| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 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 タスク定義](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)」を参照してください。次の例ではこのコンストラクトを使用します。<pre>import * as cdk from 'aws-cdk-lib';<br />import { Vpc } from 'aws-cdk-lib/aws-ec2';<br />import * as ecr from 'aws-cdk-lib/aws-ecr';<br />import * as ecs from 'aws-cdk-lib/aws-ecs';<br />import { Construct } from 'constructs';<br />import { FargateRunner } from 'waitcondition-hook-for-aws-fargate-task';<br />import { Queue } from 'aws-cdk-lib/aws-sqs';<br /><br />export class FargateRunnerStack extends cdk.Stack {<br />    constructor(scope: Construct, id: string, props?: cdk.StackProps) {<br />        super(scope, id, props);<br />        // Define the VPC<br />        const vpc = new Vpc(this, 'MyVpc')<br />        // Define the Fargate Task<br />        const taskDefinition = new ecs.FargateTaskDefinition(this, 'MyTask', {});<br />        // Import exiting ecr repo<br />        const repo = ecr.Repository.fromRepositoryName(this, 'MyRepo', 'RepoName');<br />        // Add a container to the task<br />        taskDefinition.addContainer('MyContainer', {<br />            image: ecs.ContainerImage.fromEcrRepository(repo),<br />        });<br />        // Create the Fargate runner<br />        const myFargateRunner = new FargateRunner(this, 'MyRunner', {<br />            fargateTaskDef: taskDefinition,<br />            timeout: `${60 * 5}`,<br />            vpc: vpc,<br />        });<br />        // Create the SQS queue<br />        const myQueue = new Queue(this, 'MyQueue', {});<br />        // Add dependency<br />        myQueue.node.addDependency(myFargateRunner);<br />    }<br />}</pre> | クラウドアーキテクト | 
| CDK アプリケーションを合成し、起動します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)`waitcondition-hook-for-aws-fargate-task` コンストラクトは Fargate タスクを実行します。 | クラウドアーキテクト | 

### クリーンアップ



| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リソースをクリーンアップします。 | 前のステップでプロビジョニングされたリソースをクリーンアップするには、次のコマンドを実行します。<pre>cdk destroy </pre> | クラウドアーキテクト | 

## トラブルシューティング



| 問題 | ソリューション | 
| --- | --- | 
| 一般的な CloudFormation スタックの障害 | 一般的な CloudFormation スタックの障害のトラブルシューティングに役立つように、次の例に示すように `--no-rollback` フラグを追加します。<pre>cdk deploy --no-rollback</pre>このコマンドは CloudFormation スタックのロールバックを一時停止し、トラブルシューティングのためのリソースを提供します。詳細については、 CloudFormation ドキュメントの[「リソースをプロビジョニングするときに障害を処理する方法を選択する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-failure-options.html)」を参照してください。 | 
| AWS Step Functions 失敗 |  AWS Step Functions ステートマシンは、さまざまな理由で実行に失敗することがあります。`—disable-rollback` が設定されている場合は、次のステップを使用してトラブルシューティングを行います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)詳細については、 AWS Step Functions ドキュメントの[「Step Functions の問題のトラブルシューティング](https://docs.aws.amazon.com/step-functions/latest/dg/troubleshooting.html)」および[「Step Functions コンソールの実行の詳細の表示](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-view-execution-details.html#exec-details-intf-step-details)」を参照してください。 | 
| AWS Lambda 関数の失敗 | このコンストラクトは、`CallbackFunction` と `ErrorhandlerFunction` の 2 つの Lambda 関数をプロビジョニングします。処理されない例外など、さまざまな理由で失敗する可能性があります。次の手順を使用して、トラブルシューティングを行います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)詳細については、 AWS Lambda ドキュメントの[「Lambda の問題のトラブルシューティング](https://docs.aws.amazon.com/lambda/latest/dg/lambda-troubleshooting.html)」を参照してください。 | 

## 関連リソース


**AWS ドキュメント**
+ [AWS CDK コンストラクト API リファレンス](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html)
+ [の開始方法 AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Amazon ECS リソースを作成して使用する方法について説明します。](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/getting-started.html)
+ [Step Functions の使用を開始する方法について説明します。](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html)
+ [とは AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html)

**その他のリソース**
+ [AWS Fargate タスクの待機条件フック](https://pypi.org/project/waitcondition-hook-for-aws-fargate-task/) (npm)
+ [waitcondition-hook-for-aws-fargate-task 1.0.6](https://pypi.org/project/waitcondition-hook-for-aws-fargate-task/) (pypi.org)