メインコンテンツに移動
AWS グラレコ解説

アプリのワークフローを視覚的に構成。 AWS Step Functions をグラレコで解説

2022-08-02 | Author : 米倉 裕基 (監修 : 櫻谷 広人)

はじめに

builders.flash 読者のみなさん、こんにちは ! テクニカルライターの米倉裕基と申します。

本記事では、200 以上の AWS サービスから 9,000 以上の AWS API アクションを視覚的に組み合わせてアプリケーションワークフローを設計・管理できるサーバーレスワークフローサービス「AWS Step Functions (以下、Step Functions)」を紹介します。

通常アプリケーションには、データ収集や、データベースの更新、プロセスの監視、データ分析、メッセージングなど、さまざまな処理のステップがあります。また、それぞれのステップの実行順序は固定ではなく、条件分岐、並列実行、エラー処理、遅延処理など条件によってフローが複雑に変化するように設計されています。

Step Functions では、アプリケーションのこのようなステップとフロー制御を、フローチャートを描くように視覚的に設計できます。これにより、複数のマイクロサービスや分散アプリケーションのオーケストレーションが容易になり、アプリケーション全体を統合的に管理できるようになります。

※ 本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。awsgeek.com は 、Jerry Hargrove 氏が運営しているサイトです。


X ポスト » | Facebook シェア » | はてブ »

Step Functions のワークフロー (ステートマシン) の構造

Step Functions では、アプリケーションのワークフローをステートマシンと呼びます。ステートマシンは、AWS サービスの組み合わせやフローを定義した設計図のような役割を持ちます。

ステートマシンの構造について詳しくは、「ステートマシン構造」をご覧ください。

ステートの種類

LOREM IPSUM

ステートマシンは、ステートと呼ばれる単一の処理を定義した 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 は、リアルタイムで更新されるビジュアル画面で視覚的にワークフローを確認しながら設計できます。

Screenshot of an AWS Step Functions Hello World example, showing a JSON state machine definition and a visual workflow diagram. The diagram demonstrates various states including Pass, Choice, Wait, and their transitions.

Step Functions Workflow Studio

2021 年 6 月より、ローコードビジュアルツール Step Functions Workflow Studio の提供を開始 しました。

Step Functions Workflow Studio を使うと、ドラッグ & ドロップでステートマシンを設計でき、JSON を使った設計よりもさらに直感的な操作が可能になります。

本記事では、Step Functions から直接起動できる 200 以上の AWS サービスの中から、10 のサービスをピックアップしてご紹介します。

Screenshot of the AWS Step Functions workflow designer interface in Japanese, showing various workflow options and a sample state machine diagram.

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 の呼び出し」をご覧ください。

A diagram in Japanese illustrating the flow of AWS Step Functions invoking an AWS Lambda function. The flow includes the use of API Gateway or EventBridge for invocation, automatic retry on error, and main execution steps. Contains Japanese text and visual AWS Lambda and Step Functions icons.

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 の料金」をご覧ください。

A hand-drawn style diagram in Japanese illustrating the integration of AWS Step Functions with DynamoDB in a serverless architecture. The diagram shows flow control, state transitions, JSON-based Amazon States Language, and read/write operations to DynamoDB.

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 ワークフロー」をご覧ください。

A Japanese-language diagram illustrating the connection between AWS Step Functions Express Workflow and Amazon SNS, showing the publishing of events to SNS for high-volume workloads.

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 を呼び出す」をご覧ください。

A diagram in Japanese illustrating the process of executing a job on Amazon EMR using AWS Step Functions. The graphic includes Japanese text and step-by-step visual elements related to workflow orchestration.

5. Amazon ECS タスクの実行

Amazon ECS は、Docker コンテナを AWS クラウド上で簡単に実行、停止、管理できるスケーラブルで高速なコンテナ管理サービスです。

ステートマシンから直接、コンテナクラスタの作成やタスクの起動などが可能です。EMR ジョブと同様、ECS タスクの実行に成功した際のステート遷移や、失敗した際のリトライなど、同期的な処理フローを設計できます。また、ECS タスクと同様、AWS Fargate タスクも実行できます。

Step Functions でサポートしている Amazon ECS / AWS Fargate API と構文について詳しくは、「Step Functions で Amazon ECS または Fargate タスクを管理する」をご覧ください。

A Japanese-language diagram illustrating the execution of tasks with AWS Step Functions and Amazon ECS Fargate. The diagram includes labeled blocks and flow arrows, with text describing possible task execution using AWS Fargate and Amazon ECS.

6. AWS Glue ジョブの起動

AWS Glue は、データ分析のために、データソースからデータを抽出 (Extract) し、分析しやすい形式に変換 (Transform) し、任意のデータウェアハウスに格納 (Load) できる、サーバーレス ETL サービスです。

ステートマシンから直接 AWS Glue ジョブを実行し、例えば S3 からデータをクロールして、Redshift などに変換し格納するといった Task ステートを設定できます。

Step Functions でサポートしている AWS Glue API と構文について詳しくは、「Step Functions を使った AWS Glue ジョブの管理」をご覧ください。

A diagram illustrating AWS Step Functions integrated with AWS Glue job execution, featuring Japanese text and labeled graphics.

シリアルタスクとパラレルタスク :

Task ステートは、処理が完了してから次のステートに遷移する同期的なフローです。一方、Parallel ステートを利用することで複数のステートを並列で実行する非同期なフローをステートマシンに組み込めます。Parallel ステートでは、指定したすべてのブランチの並列処理が完了してから、次のステートに遷移します。

A Japanese-language diagram illustrating the workflow of AWS Step Functions, showing the execution of Amazon ECS tasks and AWS Glue jobs, with visual elements including AWS Fargate and Glue icons.

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 を管理する」をご覧ください。

AWS Batchのジョブ送信プロセスを日本語で説明する図。中央に『AWS Batch ジョブ送信』と書かれ、ジョブが複数のリソースに送信される様子が描かれています。

8. 別のワークフローの実行

Task ステートから StartExecution API アクションを呼び出し、必要なパラメータを渡すだけで、実行中のステートマシンから別のステートマシンを開始することができます。

これにより複雑なステートマシンをよりシンプルな個別のステートマシンに分割したり、再利用可能なステートマシンをライブラリとしてワークフローに組み込むなどが可能です。

別のステートマシンを実行する構文について詳しくは、「タスク状態からワークフロー実行を開始する」をご覧ください。

Illustration of an AWS Step Functions workflow diagram labeled as step 8, with Japanese text indicating the initiation of another workflow. The image includes flowchart icons and handwritten-style annotations.

9. Amazon SQS キューへの書き込み

Amazon SQS は、複数のサービスを連携するメッセージとキューを管理するフルマネージド型のメッセージキューイングサービスです。

Step Functions では、ステートマシンから直接 Amazon SQS キューへメッセージを書き込めます。最大限のスループットでメッセージを送信する標準キュー、およびメッセージの配信順序を保証する SQS FIFO キューのいずれも Step Functions から操作できます。

Step Functions でサポートしている Amazon SQS API と構文について詳しくは、「Step Functions で Amazon SQS を呼び出す」をご覧ください。

A Japanese-language diagram illustrating the integration between AWS Step Functions and Amazon Simple Queue Service (SQS), with visual elements and the text '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」も全リージョンで利用できます。

A diagram in Japanese showing AWS Step Functions integrating with Amazon SageMaker for machine learning model training. The flow includes numbered steps, a block labeled '機械学習モデルのトレーニング' (machine learning model training), the SageMaker logo, and an 'END' button.

まとめ

それでは最後に、本記事で紹介した機能の全体図を見てみましょう。

本グラレコ記事では、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 や機械学習、ブロックチェーン関連の資格取得に向け勉強中です。

Portrait photograph of a person with short dark hair, wearing glasses and a gray sweater, against a light blue background.

監修者プロフィール

櫻谷 広人
アマゾン ウェブ サービス ジャパン合同会社
パートナーソリューションアーキテクト

大学 4 年から独学でプログラミングを習得。新卒で SIer に入社して Web アプリケーションの受託開発案件を中心にバックエンドエンジニアとして働いた後、フリーランスとして複数のスタートアップで開発を支援。その後、toC 向けのアプリを提供するスタートアップで執行役員 CTO を務める。現在は SaaS 担当のパートナーソリューションアーキテクトとして、主に ISV のお客様の SaaS 移行を支援。

A person in a blue jacket is working on a laptop at a white desk, with a bookshelf filled with books in the background.