Amazon Web Services ブログ
Amplify カスタムリソースを用いた AWS Step Functions と AWS Amplify の連携
AWS Amplify では、amplify add custom
コマンドと AWS Cloud Development Kit (AWS CDK) または AWS CloudFormation を使用して、Amplify で作成したバックエンドにカスタム AWS リソースを追加することが可能です。これによって開発者は Amplify のビルトインユースケースを超える AWS リソースをプロジェクトに簡単に追加・管理することができます。
AWS Amplify は、AWS 上でクラウドを利用したモバイルおよび Web アプリケーションを迅速かつ容易に構築することができます。Amplify はモバイルおよび Web のフロントエンド開発者が AWS サービスを活用して革新的で機能豊富なアプリケーションを構築できるようにする一連のツールとサービスから構成されています。Amplify CLI はフロントエンド開発者がクラウド上でアプリのバックエンドを作成するのに役立つコマンドラインツールチェーンです。
本記事では、Amplify カスタムリソースを使用して AWS Step Functions ワークフローを Amplify プロジェクトに追加します。
AWS Step Functions は AWS Lambda 関数と10,000 以上の AWS API アクションを組み合わせて、ビジネスクリティカルなアプリケーションを構築できるサーバーレスオーケストレーションサービスです。Step Functions ワークフローを利用することで、失敗、再試行、並列化、サービス統合、および観測性を管理することができるため、開発者はより価値の高いビジネスロジックに集中することができます。
学べること
- AWS CDK を使用して Step Functions ワークフローを Amplify カスタムリソースとして作成する方法
- カスタムリソースを既存の Amplify で管理されている GraphQL API に接続する方法
アーキテクチャ

図 1:アーキテクチャ
ソリューションは、以下の要素で構成されています:
- サンプル Web アプリケーションは、Vite と Amplify UI を使用して構築された顧客フィードバックフォームです。
- フィードバックフォームを送信すると、Amplify が管理する AWS AppSync API を経由して Amplify カスタムリソースとして作成された Step Functions express ワークフローが起動します。
- Step Functions ワークフローは Amazon Comprehend の
DetectSentiment API
を使用して送信されたフィードバックの感情を検出します。 - 次に、ワークフローはフィードバックと検出された感情を Amplify が管理する Amazon DynamoDB テーブルに保存します。
- ネガティブな感情が検出された場合、ワークフローは Amazon Simple Notification Service (Amazon SNS) を使用してカスタマーサポートのメールアドレスに通知をします。
- 感情分析の結果に応じて Web アプリケーションは顧客に異なる確認メッセージを表示します。
Step Functions ワークフローは以下の画像のようになります。

図 2:ユーザーフィードバックを処理するための Step Functions ワークフロー
Web アプリケーションは以下の画像のようになります。

図 3:ソリューションのデモ
チュートリアル
前提条件
Amplify CLI のセットアップ
Amplify CLI をインストールするには、以下のコマンドを使用します。
Amplify プロジェクトのセットアップ
aws-samples
GitHub リポジトリからサンプルプロジェクトをクローンします。
次に、Amplify CLI を使用して、以下のコマンドでサンプルプロジェクトに含まれるリソースを AWS アカウントに作成します。
以下の画像のように、プロジェクトを設定します。
これで Amplify が AWS にプロジェクト環境を構築し、完了したら通知してくれます。
これで Amplify CLI を使用してAWS リソースを Amplify スタックに追加する準備ができました。
GraphQL API のセットアップ
まず、Amplify スタックに GraphQL API を追加します。チュートリアルの後半では Step Functions ワークフローをこの API に接続する予定です。以下のコマンドを実行し、API を以下の画像のように設定します:
amplify/backend/api/<project_name>/
にある schema.graphql
ファイルを開いてください。以下のように GraphQL スキーマを定義します:
以下のコマンドを実行して、Amplify にこのスキーマを AWS リソースに適用させます。
新しく作成された GraphQL API のコードを生成するかどうか尋ねられたら Yes と答え、ターゲット言語として JavaScript を指定し、その他はデフォルトのままにします。
Amplify カスタムリソースの追加
Amplify プロジェクトに Step Functions ワークフローを追加するために、Amplify カスタムリソースを使用します。
Amplify カスタムリソースの名前を指定すると、Amplify は空の AWS CDK スタックを amplify/backend/custom/<our custom resource name>/
に作成します。
必要な依存関係を AWS CDK スタックにインポート
これで、スタックのコードをカスタマイズしてStep Functionsリソースを追加し、GraphQL APIに接続することができます。カスタムリソーススタックのサンプルコードは、クローンした git リポジトリの template/ ディレクトリ、または GitHub のここにあります。このウォークスルーでは、コードを順を追って説明します。
まず amplify/backend/custom/<our custom resource name>/
を開いて、AWS CDK スタックにAWS リソースを追加します。
Step Functions ワークフローを構築するために必要な依存関係を追加し、コメントアウトされた AWS CDK リソースを削除して、ファイルが次のように一致するようにしましょう。
cdk-stack.ts
の内容を以下のように置き換えます。
カスタムリソーススタックで 既存の GraphQL API の参照
最初のステップとして、AWS CDK スタックの依存関係として既存の GraphQL API リソースを参照します。API リソース名は、Amplify CLI によって生成されたディレクトリを見ることで見つけることができます。プロジェクトの名前を変えている場合、このフォルダの名前は異なる可能性があることに注意してください。
API リソースの名前が例のように amplifysfn
でない場合は、2 か所更新します。
カスタムリソーススタックに Step Functions ワークフローを作成
これで、@aws-cdk/aws-stepfunctions
と @aws-cdk/aws-stepfunctions-tasks
モジュールを使って AWS CDK スタックの中で直接 Step Function ワークフローを作成できるようになりました。まず、すべてのタスクとロジックステートを含むステートマシン定義を作成します。
これで DetectSentiment API
から結果を受け取り、元の入力と一緒に DynamoDB に格納しました。次に、ステップ関数では、ポジティブな結果とそうでない結果を異なる方法で処理する必要があります。
Step Functions リソースの定義
最後に、ステートマシンの定義に基づいて Step Functions ワークフローリソースを定義します。まず、ワークフローに含まれるタスクを実行するための正しい IAM アクセス権を定義する必要があります。
ワークフローと GraphQL API の連携
Step Functionsワークフローが AWS CDK スタックを設計しているので、ワークフローの Amazon Resource Name(ARN)を参照する GraphQL API データソースの新しいリゾルバを作成することができます:
リゾルバーはリクエストマッピングテンプレートとレスポンスマッピングテンプレートの両方を参照しています。これらのマッピングテンプレートは、GraphQL リゾルバーがデータソース(この場合は Step Functions ワークフロー)と通信する方法を定義します。cdk-stack.ts
でリクエストとレスポンスの両方のマッピングテンプレートを定義してみましょう。
繰り返しになりますが、Amplify カスタムスタックのコードの全容を知るには、GitHub のファイルを見るようにしてください。
Amplify カスタムリソースをデプロイ
プロジェクトルートに戻り、カスタムリソースを AWS にデプロイします。
カスタマーサポート の SNS トピックへの登録を確認するためのメールが届きます。サブスクリプションの確認はワークフローを正常に実行するために忘れずに行う必要があります。
ワークフローのテスト
Amplify のリソースをセットアップしたところで、サンプル Web アプリケーションも用意しましょう。GitHub から Clone したサンプルコードには、Vite を使った Web アプリケーションが含まれています。プロジェクトのルートディレクトリに戻り、npm を使用してプロジェクトの必要な依存関係をインストールします。
ワークフローをテストするために、Web アプリケーションを経由して起動します。
フォームにポジティブなフィードバックとネガティブなフィードバックを入力してみましょう。図3 に示すように、Submit ボタンを押した後、フィードバックの感情によって異なる成功メッセージが表示されます。また、ポジティブな感情を持たないフィードバックは、カスタマーサポートの SNS トピックでメールが送信されるトリガーとなります。
クリーンアップ
このチュートリアルで作成されたリソースを削除するには、プロジェクトのルートディレクトリから amplify delete
を実行し、CLI の指示に従います。
まとめ
本記事では Step Functions ワークフローを Amplify カスタムリソースとしてセットアップする方法と、Amplify が管理する GraphQL API に接続する方法について説明しました。AWS サービスを Amplify プロジェクトに統合する詳細については、Amplify カスタムリソースのドキュメントを参照してください。AWS Step Functions Workshop で AWS Step Functions の詳細を学び、AWS Step Functions 用の AWS CDK ドキュメントを使用してサンプルワークフローを拡張できます。
GitHub issue を開くか、以下のコメントでフィードバックを共有してください。
本記事は、Integrate AWS Step Functions with AWS Amplify using Amplify Custom Resources を翻訳したものです。翻訳はソリューションアーキテクトの稲田大陸が担当しました。