アプリのワークフローを視覚的に構成。 AWS Step Functions をグラレコで解説
Author : 米倉 裕基 (監修 : 櫻谷 広人)
※ 本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。awsgeek.com は 、Jerry Hargrove 氏が運営しているサイトです。
builders.flash 読者のみなさん、こんにちは ! テクニカルライターの米倉裕基と申します。
本記事では、200 以上の AWS サービスから 9,000 以上の AWS API アクションを視覚的に組み合わせてアプリケーションワークフローを設計・管理できるサーバーレスワークフローサービス「AWS Step Functions (以下、Step Functions)」を紹介します。
通常アプリケーションには、データ収集や、データベースの更新、プロセスの監視、データ分析、メッセージングなど、さまざまな処理のステップがあります。また、それぞれのステップの実行順序は固定ではなく、条件分岐、並列実行、エラー処理、遅延処理など条件によってフローが複雑に変化するように設計されています。
Step Functions では、アプリケーションのこのようなステップとフロー制御を、フローチャートを描くように視覚的に設計できます。これにより、複数のマイクロサービスや分散アプリケーションのオーケストレーションが容易になり、アプリケーション全体を統合的に管理できるようになります。
Step Functions のワークフロー (ステートマシン) の構造
Step Functions では、アプリケーションのワークフローをステートマシンと呼びます。ステートマシンは、AWS サービスの組み合わせやフローを定義した設計図のような役割を持ちます。
ステートマシンの構造について詳しくは、「ステートマシン構造」をご覧ください。
ステートの種類
ステートマシンは、ステートと呼ばれる単一の処理を定義した JSON オブジェクトを組み合わせて設計します。
現在、提供されているステートの種類と機能は次の表のとおりです。処理内容を定義する Task ステートと、フロー制御を定義する Choice ステートや Map ステートなどがあります。
ステートタイプ | 種類 | 機能 |
Task | アクション | ステートマシンによって実行される最小の作業単位を表すステートです。実行する API アクションやパラメータを指定します。 |
Choice | フロー | 条件分岐を定義するステートです。特定の条件に従って、遷移先のステートを変更できます。 |
Parallel | Branches オブジェクトに指定した複数のステートを並列実行します。並列ブランチの処理が完了してから、次のステートに遷移します。 | |
Map | 入力した配列の要素に基づいて並列に処理を実行します。 | |
Pass | 何も処理を実行せずに、次のステートに遷移します。 | |
Wait | 指定した秒数、または指定した時間まで待機してから次のステートへ遷移します。 | |
Succeed | ステートの実行が成功したとして、ステートマシンを終了します。 | |
Fail | ステートの実行が失敗したとして、ステートマシンを終了します。 |
ステートマシンの設計方法
ステートマシンの設計には、Amazon States Language を用いたテキストベースと、Step Functions Workflow Studio を用いたビジュアルベースの 2 つのオプションが提供されています。
Amazon States Language
Amazon States Language (ASL) は、JSON ベースの 構造化言語で、JSON オブジェクトに各種 API アクションやパラメータを定義します。
ASL は、リアルタイムで更新されるビジュアル画面で視覚的にワークフローを確認しながら設計できます。
クリックすると拡大します
Step Functions Workflow Studio
2021 年 6 月より、ローコードビジュアルツール Step Functions Workflow Studio の提供を開始 しました。
Step Functions Workflow Studio を使うと、ドラッグ & ドロップでステートマシンを設計でき、JSON を使った設計よりもさらに直感的な操作が可能になります。
クリックすると拡大します
本記事では、Step Functions から直接起動できる 200 以上の AWS サービスの中から、10 のサービスをピックアップしてご紹介します。
1. AWS Lambda 関数の実行
AWS Lambda は、サーバーのプロビジョニング無しで、クラウド上で任意のコードを実行できるサーバーレスコンピューティングサービスです。
ステートマシンに Lambda 関数実行のステートを加えることで、AWS サービスが提供する API アクションに依存しない自由な処理をワークフローに組み込むことができます。
Step Functions でサポートしている AWS Lambda API と構文について詳しくは、「Step Functions で Lambda を呼び出す」をご覧ください。
なお、Task ステートに、Retry フィールドや Catch フィールドを加えることで、エラー発生時に、自動リトライを試行したり、特定のステートに遷移するなどのエラー処理を組み込むことができます。詳しくは、「Step Functions のエラー処理」をご覧ください。
ステートマシンの呼び出し :
開発段階では、AWS コンソールからステートマシンを呼び出してテストできますが、本番環境で稼働する際は、他のサービスからステートマシンを呼び出す必要が出てきます。他のサービスからステートマシンを呼び出すには、Amazon API Gateway で作成したステートマシン実行用の API エンドポイントにリクエストを送ったり、Amazon EventBridge でステートマシン実行用のイベントパターンを作成するなどさまざまな方法があります。詳しくは、「他のサービスから AWS Step Functions の呼び出し」をご覧ください。
2. Amazon DynamoDB の読み書き
Amazon DynamoDB は、あらゆる規模のワークロードにも対応できるハイパフォーマンスなキーバリュー型の NoSQL データベースサービスです。
Step Functions は、Amazon DynamoDB と統合されており、データベース上のアイテムの読み込み (GET)・書き込み (PUT)・削除 (DELETE)・更新 (UPDATE) をステートマシンから直接行うことができます。
Step Functions でサポートしている Amazon DynamoDB API と構文について詳しくは、「Step Functions を使用した DynamoDB API の呼び出し」をご覧ください。
なお、ステートマシンに、Choice ステートや Map ステートなどを指定することで、条件分岐やループなどステート遷移のフローを制御することができます。ステートの種類と構文について詳しくは、「状態」をご覧ください。
Step Functions の利用料金 :
Step Functions には標準ワークフローと Express ワークフローの 2 種類のオプションがあり、それぞれ利用料金が異なります。
標準ワークフローの利用料金は、リトライやループなどのフロー制御を含む、すべてのステート遷移の合計数に基づいて請求されます。そのため、無限ループなどによりステート遷移数が増大すると、予期しない料金が発生する場合があるためフロー制御を組み込む際にはご注意ください。一方、Express ワークフローの料金は、ワークフローの実行時間や使用したメモリ量に従って課金されます。
標準ワークフロー、Express ワークフローそれぞれの利用料金について詳しくは、「AWS Step Functions の料金」をご覧ください。
3. Amazon SNS へのメッセージ発行
Amazon SNS は、pub/sub メッセージング、SMS、電子メール、モバイルプッシュ通知などのメッセージをサーバーレスで送信できるメッセージングサービスです。
Step Functions は、Amazon SNS をサポートしており、ステートマシンから直接SNSトピックにイベントを送信できます。Amazon SNS へのメッセージ発行用のステートを組み込むことで、たとえば特定のステートでエラーが発生した場合に、エラー通知をメール送信するなどの処理をワークフローに組み込めます。
Step Functions でサポートしている Amazon SNS API と構文について詳しくは、「Step Functions で Amazon SNS を呼び出す」をご覧ください。
Express ワークフローとは :
ステートマシンを作成する際は、デフォルトのワークフロータイプである標準ワークフローに加え、Express ワークフローをオプションで選択できます。Express ワークフローは、大量のイベントを実行するワークロードに適したワークフロータイプです。
標準ワークフローと Express ワークフローの違いについて詳しくは、「標準ワークフロー対 Express ワークフロー」をご覧ください。
4. Amazon EMR ジョブの実行
Amazon EMR は、ビッグデータフレームワーク (Apache Hadoop や Apache Spark など) の実行を簡素化して、ビッグデータを処理および分析するマネージドクラスタープラットフォームです。
ステートマシンから、EMR クラスタの作成、終了、削除や、EMR ジョブの実行などが可能です。Step Functions に Amazon EMR ジョブを組み込むことで、EMR ジョブが成功した場合に限り次のステートに遷移したり、失敗した場合にリトライするなど同期的な処理フローを実装できます。
Step Functions でサポートしている Amazon EMR API と構文について詳しくは、「Step Functions を使用して Amazon EMR を呼び出す」をご覧ください。
5. Amazon ECS タスクの実行
Amazon ECS は、Docker コンテナを AWS クラウド上で簡単に実行、停止、管理できるスケーラブルで高速なコンテナ管理サービスです。
ステートマシンから直接、コンテナクラスタの作成やタスクの起動などが可能です。EMR ジョブと同様、ECS タスクの実行に成功した際のステート遷移や、失敗した際のリトライなど、同期的な処理フローを設計できます。また、ECS タスクと同様、AWS Fargate タスクも実行できます。
Step Functions でサポートしている Amazon ECS / AWS Fargate API と構文について詳しくは、「Step Functions で Amazon ECS または Fargate タスクを管理する」をご覧ください。
6. AWS Glue ジョブの起動
AWS Glue は、データ分析のために、データソースからデータを抽出 (Extract) し、分析しやすい形式に変換 (Transform) し、任意のデータウェアハウスに格納 (Load) できる、サーバーレス ETL サービスです。
ステートマシンから直接 AWS Glue ジョブを実行し、例えば S3 からデータをクロールして、Redshift などに変換し格納するといった Task ステートを設定できます。
Step Functions でサポートしている AWS Glue API と構文について詳しくは、「Step Functions を使った AWS Glue ジョブの管理」をご覧ください。
シリアルタスクとパラレルタスク :
Task ステートは、処理が完了してから次のステートに遷移する同期的なフローです。一方、Parallel ステートを利用することで複数のステートを並列で実行する非同期なフローをステートマシンに組み込めます。Parallel ステートでは、指定したすべてのブランチの並列処理が完了してから、次のステートに遷移します。
7. AWS Batch ジョブの送信
AWS Batch は、任意のバッチ処理を含むコンテナイメージを、AWS Fargate または Amazon EC2 上で実行するフルマネージド型のバッチサービスです。
ステートマシンから直接 AWS Batch ジョブを送信し、任意のバッチ処理を実行できます。サーバーレスで、任意の処理を実行するという点では、AWS Lambda と類似してますが、AWS Batch はキューイングの機構を備えており、優先順位の高い処理から確実に実行するため、Lambda 関数で処理するよりも大量で複雑なデータの処理に向いています。
Step Functions でサポートしている AWS Batch API と構文について詳しくは、「Step Functions で AWS Batch を管理する」をご覧ください。
8. 別のワークフローの実行
Task ステートから StartExecution API アクションを呼び出し、必要なパラメータを渡すだけで、実行中のステートマシンから別のステートマシンを開始することができます。
これにより複雑なステートマシンをよりシンプルな個別のステートマシンに分割したり、再利用可能なステートマシンをライブラリとしてワークフローに組み込むなどが可能です。
別のステートマシンを実行する構文について詳しくは、「タスク状態からワークフロー実行を開始する」をご覧ください。
9. Amazon SQS キューへの書き込み
Amazon SQS は、複数のサービスを連携するメッセージとキューを管理するフルマネージド型のメッセージキューイングサービスです。
Step Functions では、ステートマシンから直接 Amazon SQS キューへメッセージを書き込めます。最大限のスループットでメッセージを送信する標準キュー、およびメッセージの配信順序を保証する SQS FIFO キューのいずれも Step Functions から操作できます。
Step Functions でサポートしている Amazon SQS API と構文について詳しくは、「Step Functions で Amazon SQS を呼び出す」をご覧ください。
10. Amazon SageMaker で機械学習モデルのトレーニング
Amazon SageMaker は機械学習モデルを簡単かつ迅速に、構築・トレーニング・デプロイできる、フルマネージド型のサービスです。
Step Functions では、Amazon SageMaker を使った機械学習モデルの前処理、トレーニング、評価、デプロイにいたる機械学習パイプラインをワークフローに組み込めます。
Step Functions でサポートしている Amazon SageMaker API と構文について詳しくは、「Step Functions で SageMaker を管理する」をご覧ください。
なお、Amazon SageMaker を用いた機械学習パイプラインを、Python や Jupyter Notebook から簡単にステートマシンに組み込むことができるオープンソースライブラリ「AWS Step Functions Data Science SDK」も全リージョンで利用できます。
まとめ
それでは最後に、本記事で紹介した機能の全体図を見てみましょう。
本グラレコ記事では、Step Functions がサポートする 10 の主要な機能をピックアップしてご紹介しました。
2021 年 9 月 より、Step Functions がサポートする AWS サービスの数は 14 から 200 以上に、また API アクションの数は 46 から 9,000 以上に拡張されています。これらの AWS サービスおよび API アクションや、条件分岐、リトライ、待機などのフローをステートマシンに組み込むことで、本記事でご紹介したものよりもさらに高度なワークフローを持つ分散型アプリケーションを実装できます。
AWSの各種サービスを組み込んだワークフローを視覚的に構成し、ビジネスロジックを素早くアプリケーションに実装できる「Step Functions」をぜひご活用ください。
本記事を読んで Step Functions に興味を持たれた方、実際に使ってみたいと思われた方は、ぜひ製品ページの「AWS Step Functions」も合わせてご覧ください。
AWS グラレコ解説のその他の記事はこちら
- 選択
- 今話題のブロックチェーンをAWSで実現する仕組みをグラレコで解説 »
- サーバーレスって何が便利なの ? AWS でサーバーレスを構築するためのサービスをグラレコで解説 »
- 機械学習のワークフローってどうなっているの ? AWS の機械学習サービスをグラレコで解説 »
- 外部から AWS のバックエンドサービス利用を実現する仕組みをグラレコで解説 »
- AWS でデプロイの自動化を実現するベストプラクティスをグラレコで解説 »
- コンテナを使ってモノリスを分割する方法をグラレコで解説 »
- クラウドへ移行する理由とそのステップをグラレコで解説 »
- Windows ワークロードをクラウドへ移行するためのベストプラクティスをグラレコで解説 »
- サーバーレスのイベントバスって何 ? Amazon EventBridge をグラレコで解説 »
- サーバーレスで SaaS を構築する方法をグラレコで解説 »
- 「あなたへのおすすめ」はどう生成するの ? Amazon Personalize で簡単に実現する方法をグラレコで解説 »
- クラウド設計・運用のベストプラクティス集「AWS Well-Architectedフレームワーク」をグラレコで解説 »
- 特定の顧客セグメントにメッセージ送信。「Amazon Pinpoint」の仕組みをグラレコで解説 »
- アプリにユーザー認証機能を簡単に追加できる「Amazon Cognito」をグラレコで解説 »
- わずか数分で WordPress サイトを構築できる「Amazon Lightsail」をグラレコで解説 »
- 異なるアプリケーション同士の疎結合を実現。「Amazon SQS」をグラレコで解説 »
- Web アプリを高速に開発できる「AWS Amplify」をグラレコで解説 »
- 機械学習の知識ゼロでもテキストデータを分析。Amazon Comprehend をグラレコで解説 »
- ビジネスデータをまとめて可視化 & 分析。Amazon QuickSight をグラレコで解説
- 人工衛星の地上局を 1 分単位で利用。AWS Ground Station をグラレコで解説
- カオスエンジニアリングで本当にカオスにならないための進め方をグラレコで解説
- GraphQL API を簡単に作成 & 運用。AWS AppSync をグラレコで解説
- IoT 環境を必要な機能を選択するだけで構築。AWS IoT をグラレコで解説
- 高い可用性と耐久性のオブジェクトストレージ。Amazon S3 をグラレコで解説
- サーバーレスでイベント駆動型アプリケーションを実現。AWS Lambda をグラレコで解説
- データサイエンス教育の強い味方。Amazon SageMaker Studio Lab をグラレコで解説
- 高速で柔軟な NoSQL データベースサービス。Amazon DynamoDB をグラレコで解説
- リレーショナルデータベースを簡単・迅速に実現。Amazon RDS をグラレコで解説
- アプリのワークフローを視覚的に構成。 AWS Step Functions をグラレコで解説
- データ保護に使う暗号化キーを一元管理。AWS KMS をグラレコで解説
- アプリケーションへのトラフィックを効率的に負荷分散。Application Load Balancer をグラレコで解説
- AWS で簡単にコンテナアプリケーションを構築 ! Amazon ECS をグラレコで解説
- 大規模データセットも簡単クエリ! Amazon Athena をグラレコで解説
- キャッシュ機能でアプリの高速化を実現 ! Amazon ElastiCache をグラレコで解説
- 使い慣れたプログラミング言語でクラウド環境を構築 ! AWS CDK をグラレコで解説
- ストリーミングデータを簡単にキャプチャ、処理、保存 ! Amazon Kinesis Data Streams をグラレコで解説
- AWS で始める機械学習はじめの一歩 ! AWS の主要な AI/ML サービスをグラレコで解説
- リレーショナルデータベースをサーバーレス化 ! Amazon Aurora Serverless をグラレコで解説
- ML 駆動の検索エンジンで企業の情報管理を革新! Amazon Kendra をグラレコで解説
- オンプレミス、エッジ、どこでも楽々コンテナ管理 ! Amazon EKS Anywhere をグラレコで解説
- 生成 AI アプリケーション開発をもっと身近に、簡単に ! Amazon Bedrock をグラレコで解説
- わずか数クリックで多様な脅威を監視しクラウドを保護 ! 脅威検出サービス Amazon GuardDuty をグラレコで解説
- データの改ざん耐性と変更履歴の検証可能性を実現 ! 台帳データベース Amazon QLDB をグラレコで解説
- 生成 AI x クラウドがもたらす次世代のイノベーション ! AWS Summit Japan Day 1 基調講演をグラレコで解説
- ビジネス向け生成 AI アシスタント Amazon Q Business をグラレコで解説
- 生成 AI コーディングアシスタント Amazon Q Developer をグラレコで解説
- フロントエンドとバックエンドを統合開発 ! フルスタック TypeScript 開発環境 AWS Amplify Gen 2 をグラレコで解説
筆者プロフィール
米倉 裕基
アマゾン ウェブ サービス ジャパン合同会社
テクニカルライター・イラストレーター
日英テクニカルライター・イラストレーター・ドキュメントエンジニアとして、各種エンジニア向け技術文書の制作を行ってきました。
趣味は娘に隠れてホラーゲームをプレイすることと、暗号通貨自動取引ボットの開発です。
現在、AWS や機械学習、ブロックチェーン関連の資格取得に向け勉強中です。
監修者プロフィール
櫻谷 広人
アマゾン ウェブ サービス ジャパン合同会社
パートナーソリューションアーキテクト
大学 4 年から独学でプログラミングを習得。新卒で SIer に入社して Web アプリケーションの受託開発案件を中心にバックエンドエンジニアとして働いた後、フリーランスとして複数のスタートアップで開発を支援。その後、toC 向けのアプリを提供するスタートアップで執行役員 CTO を務める。現在は SaaS 担当のパートナーソリューションアーキテクトとして、主に ISV のお客様の SaaS 移行を支援。
AWS を無料でお試しいただけます