aws step functions - 開発者ガイド...aws step functions 開発者ガイド step functions...

330
AWS Step Functions 開発者ガイド

Upload: others

Post on 11-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions開発者ガイド

Page 2: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

AWS Step Functions: 開発者ガイドCopyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Page 3: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

Table of ContentsAWS Step Functions とは .................................................................................................................... 1

Step Functions の概要 ................................................................................................................. 1Express ワークフロー ................................................................................................................. 1サービス統合 ............................................................................................................................. 1サポートされているリージョン ..................................................................................................... 2Amazon Web Services について ................................................................................................... 2

セットアップ ..................................................................................................................................... 3前提条件 .................................................................................................................................... 3

AWS アカウントを作成する ................................................................................................. 3IAM ユーザーを作成する ...................................................................................................... 3アクセスキー ID とシークレットアクセスキーを取得する ......................................................... 4

Step Functions Local (ダウンロード可能バージョン) のセットアップ .................................................. 5コンピュータ上の Step Functions (ダウンロード可能バージョン) ............................................... 7Step Functions (ダウンロード可能バージョン) と Docker ......................................................... 8Step Functions Local 設定のオプション ................................................................................. 8Step Functions および AWS SAM CLI Local ........................................................................... 9

開始方法 .......................................................................................................................................... 14ステートマシンを作成する ......................................................................................................... 14新しい実行の開始 ...................................................................................................................... 15ステートマシンを更新するには ................................................................................................... 16次のステップ ............................................................................................................................ 17

チュートリアル ................................................................................................................................. 18開発オプション ......................................................................................................................... 18

Step Functions コンソール ................................................................................................. 18AWS SDK ........................................................................................................................ 19標準ワークフローと Express ワークフロー ........................................................................... 19HTTPS サービス API ........................................................................................................ 19開発環境 .......................................................................................................................... 19エンドポイント ................................................................................................................. 19AWS CLI ......................................................................................................................... 20Step Functions ローカル .................................................................................................... 20

Lambda を使用する Step Functions ステートマシンを作成する ....................................................... 20ステップ 1: Lambda 用の IAM ロールを作成する ................................................................... 21ステップ 2: Lambda 関数を作成する ................................................................................... 21ステップ 3: Lambda 関数をテストする ................................................................................ 22ステップ 4: ステートマシンを作成する ................................................................................ 22ステップ 5: 新しい実行を開始する ...................................................................................... 24

AWS CloudFormation を使用して Lambda ステートマシンを作成する .............................................. 24ステップ 1: AWS CloudFormation テンプレートのセットアップ ............................................... 25ステップ 2: AWS CloudFormation テンプレートを使用して Lambda ステートマシンを作成する .... 28ステップ 3: ステートマシンの実行を開始する ....................................................................... 32

アクティビティステートマシンを作成する .................................................................................... 32ステップ 1: アクティビティを作成する ................................................................................ 33ステップ 2: ステートマシンを作成する ................................................................................ 33ステップ 3: ワーカーを実装する ......................................................................................... 35ステップ 4: 実行を開始する ............................................................................................... 36ステップ 5: ワーカーを実行して停止する ............................................................................. 37

ステートマシンを使用してエラー条件を処理する ........................................................................... 37ステップ 1: Lambda 用の IAM ロールを作成する ................................................................... 38ステップ 2: 失敗する Lambda 関数を作成する ...................................................................... 38ステップ 3: Lambda 関数をテストする ................................................................................ 39ステップ 4: Catch フィールドを使用するステートマシンを作成する ......................................... 39ステップ 5: 新しい実行を開始する ...................................................................................... 41

CloudWatch イベント を使用して定期的にステートマシンの実行を開始する ...................................... 43

iii

Page 4: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

ステップ 1: ステートマシンを作成する ................................................................................ 43ステップ 2: CloudWatch イベント ルールを作成する .............................................................. 43

Amazon S3 イベント発生時にステートマシンの実行を開始する ....................................................... 44前提条件: ステートマシンを作成する ................................................................................... 44ステップ 1: Amazon S3 にバケットを作成する ..................................................................... 44ステップ 2: AWS CloudTrail で証跡を作成する ..................................................................... 44ステップ 3: CloudWatch イベント ルールを作成する .............................................................. 45ステップ 4 : CloudWatch ルールをテストする ....................................................................... 47実行入力の例 .................................................................................................................... 47

API Gateway を使用して Step Functions API を作成する ................................................................ 49ステップ 1: API Gateway 用の IAM ロールを作成する ............................................................ 49ステップ 2: API Gateway API を作成する ............................................................................ 50ステップ 3: API Gateway API のテストとデプロイ ................................................................ 52

Lambda を使用してループを反復する .......................................................................................... 53ステップ 1: Lambda 関数を作成してカウントを反復する ........................................................ 54ステップ 2: Lambda 関数をテストする ................................................................................ 55ステップ 3: ステートマシンを作成する ................................................................................ 55ステップ 4: 新しい実行を開始する ...................................................................................... 59

新しい実行としての続行 ............................................................................................................ 60前提条件 .......................................................................................................................... 61ステップ 1: 反復処理 Lambda 関数を作成してカウントを反復する ........................................... 62ステップ 2: 新しい Step Functions 実行を開始する Lambda 関数を作成する .............................. 64ステップ 3: ステートマシンを作成する ................................................................................ 65ステップ 4: IAM ポリシーを変更する ................................................................................... 67ステップ 5: 実行を実行する ............................................................................................... 67

コードスニペットの使用 ............................................................................................................ 69ステップ 1: コードスニペットの生成 ................................................................................... 69ステップ 2: ステートマシン定義を更新する .......................................................................... 71ステップ 3: 実行を開始する ............................................................................................... 72

人間による承諾プロジェクト例をデプロイする .............................................................................. 73ステップ 1: テンプレートの作成 ......................................................................................... 73ステップ 2: スタックを作成する ......................................................................................... 74ステップ 3: SNS サブスクリプションの承認 ......................................................................... 74ステップ 4: 実行を稼働する ............................................................................................... 75テンプレートソースコード ................................................................................................. 76

Map 状態を使用して Lambda を複数回呼び出す ............................................................................ 83ステップ 1: Lambda 用の IAM ロールを作成する ................................................................... 83ステップ 2: Lambda 関数を作成する ................................................................................... 83ステップ 3: Lambda 関数をテストする ................................................................................ 84ステップ 4: ステートマシンを作成する ................................................................................ 85ステップ 5: 新しい実行を開始する ...................................................................................... 86

Step Functions の詳細 ....................................................................................................................... 88標準ワークフローとExpress ワークフロー .................................................................................... 88

最低 1 回のワークフロー実行 ............................................................................................. 89状態 ........................................................................................................................................ 89

Amazon ステートメント言語 .............................................................................................. 91Pass ............................................................................................................................... 93タスク ............................................................................................................................. 94Choice ........................................................................................................................... 106Wait .............................................................................................................................. 109Succeed ........................................................................................................................ 110失敗 .............................................................................................................................. 110Parallel .......................................................................................................................... 111マップ ........................................................................................................................... 113

Transitions ............................................................................................................................. 117ステートマシンデータ .............................................................................................................. 117

データ形式 ..................................................................................................................... 118

iv

Page 5: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

ステートマシンの入出力 ................................................................................................... 118状態の入出力 .................................................................................................................. 118

入力および出力処理 ................................................................................................................. 119パス .............................................................................................................................. 120InputPath およびパラメータ .............................................................................................. 121ItemsPath ....................................................................................................................... 123ResultPath ..................................................................................................................... 124OutputPath ..................................................................................................................... 130InputPath、ResultPath、および OutputPath 例 ................................................................. 130Context オブジェクト ...................................................................................................... 132

実行 ...................................................................................................................................... 135タスクからの実行の開始 ................................................................................................... 135

エラー処理 ............................................................................................................................. 136エラー名 ........................................................................................................................ 137エラー後の再試行 ............................................................................................................ 137Fallback 状態 .................................................................................................................. 139Retry の使用例と Catch の使用例 ...................................................................................... 140

サービス統合 .......................................................................................................................... 143サービス統合パターン ...................................................................................................... 145サービス API にパラメータを渡す ..................................................................................... 150コードスニペット ............................................................................................................ 151サポートされる AWS サービス ......................................................................................... 152

読み込み整合性 ....................................................................................................................... 180Step Functions のテンプレート ................................................................................................. 180Step Functions のタグ付け ....................................................................................................... 180

コスト割り当てのタグ付け ................................................................................................ 181セキュリティのためのタグ付け ......................................................................................... 181表示と管理 ..................................................................................................................... 182API のタグ付け ............................................................................................................... 182

データサイエンス SDK ............................................................................................................ 182Step Functions のサンプルプロジェクト ............................................................................................. 184

バッチジョブの管理 (AWS Batch、Amazon SNS) ........................................................................ 184ステートマシンを作成してリソースをプロビジョニングする .................................................. 184新しい実行の開始 ............................................................................................................ 185ステートマシンのコード例 ................................................................................................ 185IAM 例 ........................................................................................................................... 186

コンテナタスクの管理 (Amazon ECS、Amazon SNS) .................................................................. 187ステートマシンを作成してリソースをプロビジョニングする .................................................. 187新しい実行の開始 ............................................................................................................ 188ステートマシンのコード例 ................................................................................................ 189IAM 例 ........................................................................................................................... 190

データレコードの転送 (Lambda、DynamoDB、Amazon SQS) ....................................................... 191ステートマシンを作成してリソースをプロビジョニングする .................................................. 191新しい実行の開始 ............................................................................................................ 192ステートマシンのコード例 ................................................................................................ 192IAM 例 ........................................................................................................................... 193

ジョブステータスのポーリング (Lambda、AWS Batch) ................................................................ 194ステートマシンを作成してリソースをプロビジョニングする .................................................. 194実行の開始 ..................................................................................................................... 195

タスクタイマー (Lambda、Amazon SNS) ................................................................................... 197コールバックパターンの例 (Amazon SQS、Amazon SNS、Lambda) .............................................. 199

ステートマシンを作成してリソースをプロビジョニングする .................................................. 199Lambda コールバックの例 ................................................................................................ 201

Amazon EMR ジョブの管理 ...................................................................................................... 202ステートマシンを作成してリソースをプロビジョニングする .................................................. 202新しい実行の開始 ............................................................................................................ 188ステートマシンのコード例 ................................................................................................ 189

v

Page 6: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

IAM 例 ........................................................................................................................... 190ワークフロー内でワークフローを開始する (Step Functions、Lambda) ............................................ 207

ステートマシンを作成してリソースをプロビジョニングする .................................................. 207新しい実行の開始 ............................................................................................................ 207ステートマシンのコード例 ................................................................................................ 208

Map 状態を使用してデータを動的に処理する .............................................................................. 209ステートマシンを作成してリソースをプロビジョニングする .................................................. 210Amazon SNS トピックへの登録 ........................................................................................ 211Amazon SQS キューにメッセージを追加する ...................................................................... 211新しい実行の開始 ............................................................................................................ 211ステートマシンのコード例 ................................................................................................ 212IAM 例 ........................................................................................................................... 214

機械学習モデルのトレーニング ................................................................................................. 214ステートマシンを作成してリソースをプロビジョニングする .................................................. 215新しい実行の開始 ............................................................................................................ 216ステートマシンのコード例 ................................................................................................ 216IAM 例 ........................................................................................................................... 218

機械学習モデルのチューニング ................................................................................................. 219ステートマシンを作成してリソースをプロビジョニングする .................................................. 219新しい実行の開始 ............................................................................................................ 220ステートマシンのコード例 ................................................................................................ 221IAM 例 ........................................................................................................................... 223

Amazon SQS からの大容量メッセージの処理 (Express ワークフロー) ............................................ 225ステートマシンを作成してリソースをプロビジョニングする .................................................. 226トリガーの実行 ............................................................................................................... 227Lambda 関数コードの例 ................................................................................................... 227ステートマシンのコード例 ................................................................................................ 228IAM 例 ........................................................................................................................... 229

選択的チェックポイントの例 (Express ワークフロー) ................................................................... 230ステートマシンを作成してリソースをプロビジョニングする .................................................. 230新しい実行の開始 ............................................................................................................ 231親のステートマシンのコード例 (標準ワークフロー) .............................................................. 231親ステートマシンの IAM ロールの例 .................................................................................. 233ネストされたステートマシン (Express ワークフロー) のステートマシンコードの例 .................. 231子ステートマシンの IAM ロールの例 .................................................................................. 236

AWS CodeBuild プロジェクトのビルド (CodeBuild、Amazon SNS) ................................................ 237ステートマシンを作成してリソースをプロビジョニングする .................................................. 237新しい実行の開始 ............................................................................................................ 238ステートマシンのコード例 ................................................................................................ 238

ベストプラクティス ......................................................................................................................... 240タイムアウトを使用して実行のスタックを回避する ...................................................................... 240大きいペイロードを渡す代わりに ARN を使用する ...................................................................... 240履歴のクォータに到達しないようにする ..................................................................................... 241Lambda サービス例外の処理 ..................................................................................................... 241アクティビティタスクポーリング時のレイテンシーを回避する ....................................................... 242標準ワークフローまたは Express ワークフローの選択 .................................................................. 243

クォータ ........................................................................................................................................ 244標準ワークフローのクォータ ..................................................................................................... 244

ステートマシンの実行に関連するクォータ .......................................................................... 244タスクの実行に関連するクォータ ...................................................................................... 245API アクションのスロットリングに関連するクォータ ........................................................... 245状態のスロットリングに関連するクォータ .......................................................................... 246クォータ引き上げのリクエスト ......................................................................................... 246

Express ワークフローのクォータ .............................................................................................. 246ステートマシンの実行に関連するクォータ .......................................................................... 247タスクの実行に関連するクォータ ...................................................................................... 247API アクションのスロットリングに関連するクォータ ........................................................... 247

vi

Page 7: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

状態のスロットリングに関連するクォータ .......................................................................... 248クォータ引き上げのリクエスト ......................................................................................... 246

一般的なクォータ .................................................................................................................... 248アカウントに関連するクォータ ................................................................................................. 249API アクションのスロットリングに関連するクォータ ................................................................... 249

米国東部(バージニア北部)、米国西部 (オレゴン)、および 欧州 (アイルランド)のクォータ ...... 249他のすべてのリージョンのクォータ ................................................................................... 250

タグ付けに関連する制限 ........................................................................................................... 251クォータ引き上げのリクエスト ................................................................................................. 252

セキュリティ .................................................................................................................................. 253データ保護 ............................................................................................................................. 253

暗号化 ........................................................................................................................... 254Identity and Access Management .............................................................................................. 254

認証 .............................................................................................................................. 254アクセスコントロール ...................................................................................................... 255アクセス管理の概要 ......................................................................................................... 256AWS Step Functions と IAM の連携 ................................................................................... 259管理者以外のユーザー用の詳細な IAM アクセス許可の作成 ................................................... 260VPC エンドポイント ....................................................................................................... 262統合サービスの IAM ポリシー ........................................................................................... 264タグベースのポリシー ...................................................................................................... 289

ロギングとモニタリング ........................................................................................................... 289Amazon CloudWatch のメトリクス .................................................................................... 289Amazon CloudWatch イベント .......................................................................................... 297AWS CloudTrail を使用した Step Functions のログ記録 ........................................................ 301CloudWatch Logs を使用したロギング ............................................................................... 305

コンプライアンス検証 .............................................................................................................. 308耐障害性 ................................................................................................................................ 308インフラストラクチャセキュリティ ........................................................................................... 309設定と脆弱性の分析 ................................................................................................................. 309

関連情報 ........................................................................................................................................ 310ドキュメント履歴 ............................................................................................................................ 311AWS の用語集 ................................................................................................................................ 323

vii

Page 8: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドStep Functions の概要

AWS Step Functions とはAWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービスのコンポーネントを調整できるウェブサービスです。それぞれ別個の関数 (タスク) を実行する個々のコンポーネントからアプリケーションを構築することで、簡単にアプリケーションをスケールおよび変更できます。

Step Functions は、コンポーネントを調整し、アプリケーションの機能をステップスルーするための信頼できる方法を提供します。Step Functions は、一連の手順としてアプリケーションのコンポーネントを視覚化するためのグラフィカルコンソールを提供します。AWS Step Functions では、各ステップが自動的にトリガーおよび追跡され、エラーが発生した場合は再試行されるため、アプリケーションが毎回意図したとおりに整然と実行されます。また、Step Functions は各ステップの状態を記録するため、問題が発生した場合は、問題を簡単に診断およびデバッグできます。

Step Functions ではオペレーションや基盤となるインフラストラクチャが自動的に管理されるため、どのような規模でもアプリケーションを確実に提供できます。

AWS クラウド、お使いサーバー、または AWS にアクセスできるシステムでタスクを実行できます。StepFunctions コンソール、AWS SDK、または HTTP API を使用して、Step Functions にアクセスして使用します。

このガイドでは、これらのメソッドを使用して独自のステートマシンを開発、テスト、トラブルシューティングする方法について説明します。

Step Functions の概要以下は AWS Step Functions の主な特徴です。

• Step Functions はタスク (p. 94)とステートマシン (p. 89)の概念に基づいています。• JSON ベースの Amazon ステートメント言語 (p. 91) を使用してステートマシンを定義します。• Step Functions コンソール には、ステートマシンの構造のグラフィック表示が示されます。これによっ

て、視覚的にステートマシンのロジックを確認し、実行を監視できます。

Express ワークフロー標準ワークフローと比較すると、Express ワークフローには次のような特徴があります。

• 大容量のイベント処理ワークロードに適しています。• 短期間でイベントレートの高いワークロードに対して、費用対効果の高い処理を可能にします。• Express ワークフローでログ記録が有効になっている場合は Amazon CloudWatch Logs で検査できま

す。

詳細については、「the section called “標準ワークフローとExpress ワークフロー” (p. 88)」を参照してください。

サービス統合Step Functions は他の AWS のサービスを統合します。API アクションを呼び出して、Amazon ステートメント言語 から実行を直接調整できます。詳細については、以下のトピックを参照してください。

1

Page 9: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされているリージョン

• サービス統合パターン (p. 145)• Step Functions でサポートされる AWS サービス統合 (p. 152)• コールバックパターンの例 (Amazon SQS、Amazon SNS、Lambda) (p. 199)

サポートされているリージョンStep Functions が使用可能な AWS リージョンのリストについては、AWS General Referenceの「AWS のリージョンとエンドポイント」を参照してください。

Amazon Web Services についてAmazon Web Services (AWS) は、開発者がアプリケーションの開発時に利用できるデジタルインフラストラクチャサービスの集合体です。サービスには、演算能力、ストレージ、データベース、アプリケーション同期 (メッセージングとキューイング) があります。AWS では従量制のサービスモデルが採用され、ユーザーまたはアプリケーションが使用するサービスに対してのみ課金されます。AWS の新規ユーザーには、無料利用枠があります。この枠では、サービスを利用しても一定のレベル以下であれば無料です。AWS のコストと無料利用枠の詳細については、「AWS 無料利用枠の使用」を参照してください。AWS アカウントを取得するには、AWS のホームページにアクセスし、[Create a Free Account (無料アカウントの作成)] を選択します。

2

Page 10: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド前提条件

Step Functions をセットアップするトピック

• Step Functions のセットアップの前提条件 (p. 3)• Step Functions Local (ダウンロード可能バージョン) のセットアップ (p. 5)

Step Functions のセットアップの前提条件AWS Step Functions の使用を開始する前に、以下の AWS リソースを作成する必要があります。

AWS アカウントを作成するAWS サービスにアクセスするには、まず、AWS 製品を使用することができる Amazon.com アカウントである AWS アカウントを作成する必要があります。AWS アカウントは、アクティビティおよび使用状況レポートの表示や、認証およびアクセスの管理に使用できます。

Step Functions アクションに AWS アカウントルートユーザーを使用しないようにするには、StepFunctions への管理アクセスが必要なユーザーごとに AWS Identity and Access Management (IAM) ユーザーを作成することをお勧めします。

新しいアカウントをセットアップするには

1. https://portal.aws.amazon.com/billing/signup を開きます。2. オンラインの手順に従います。

サインアップ手順の一環として、通話呼び出しを受け取り、電話のキーパッドを用いて確認コードを入力することが求められます。

IAM ユーザーを作成する自分用の管理者ユーザーを作成し、そのユーザーを管理者グループに追加するには (コンソール)

1. ルートユーザー を選択し AWS アカウントの E メールアドレスを入力して、アカウントの所有者としてIAM コンソールにサインインします。次のページでパスワードを入力します。

Note

以下のAdministratorIAMユーザーの使用に関するベストプラクティスに従い、ルートユーザー認証情報を安全な場所に保管しておくことを強くお勧めします。ルートユーザーとしてサインインして、少数のアカウントおよびサービス管理タスクのみを実行します。

2. ナビゲーションペインで [Users]、[Add user] の順に選択します。3. [ユーザー名] に「Administrator」と入力します。4. [AWS マネジメントコンソール access (アクセス)] の横にあるチェックボックスをオンにします。

[Custom password (カスタムパスワード)] を選択し、その後テキストボックスに新しいパスワードを入力します。

5. (オプション) AWS では、デフォルトで、新しいユーザーに対して初回のサインイン時に新しいパスワードを作成することが必要です。必要に応じて [User must create a new password at next sign-in

3

Page 11: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドアクセスキー ID とシークレットアクセスキーを取得する

(ユーザーは次回のサインイン時に新しいパスワードを作成する必要がある)] のチェックボックスをオフにして、新しいユーザーがサインインしてからパスワードをリセットできるようにできます。

6. [Next: Permissions (次へ: アクセス許可)] を選択します。7. [Set permissions (アクセス許可の設定)] で、[Add user to group (ユーザーをグループに追加)] を選択し

ます。8. [Create group] を選択します。9. [グループの作成] ダイアログボックスで、[グループ名] に「Administrators」と入力します。10. [Filter policies (フィルタポリシー)] を選択し、その後 [AWS managed -job function (AWS 管理ジョブ

の機能] を選択してテーブルのコンテンツをフィルタリングします。11. ポリシーリストで、[AdministratorAccess] のチェックボックスをオンにします。次に、[Create group]

を選択します。

Note

AdministratorAccess アクセス許可を使用して、AWS Billing and Cost Management コンソールを使用する前に、IAM ユーザーおよびロールの請求へのアクセスをアクティブ化する必要があります。これを行うには、請求コンソールへのアクセスの委任に関するチュートリアルのステップ 1 の手順に従ってください。

12. グループのリストに戻り、新しいグループのチェックボックスをオンにします。必要に応じて[Refresh] を選択し、リスト内のグループを表示します。

13. [次へ: タグ] を選択します。14. (オプション) タグをキー - 値のペアとしてアタッチして、メタデータをユーザーに追加します。IAM

でのタグの使用の詳細については、『IAM ユーザーガイド』の「IAM エンティティのタグ付け」を参照してください。

15. [Next: Review] を選択して、新しいユーザーに追加するグループメンバーシップのリストを表示します。続行する準備ができたら、[Create user] を選択します。

この同じプロセスを繰り返して新しいグループとユーザーを作成し、AWS アカウントのリソースへのアクセス権をユーザーに付与できます。ポリシーを使用して特定の AWS リソースに対するユーザーのアクセス許可を制限する方法については、「アクセス管理」と「ポリシーの例」を参照してください。

アクセスキー ID とシークレットアクセスキーを取得するStep Functions アクション (Java または AWS Command Line Interface などを使用するアクション) を使用するには、アクセスキー ID とシークレットアクセスキーが必要です。

Note

アクセスキー ID とシークレットアクセスキーは、IAM に固有です。Amazon EC2 キーペアなど、他の AWS サービスの認証情報と混同しないようにしてください。

アクセスキーはアクセスキー ID とシークレットアクセスキーから成り、AWS に対するプログラムによるリクエストに署名するときに使用されます。アクセスキーがない場合は、AWS マネジメントコンソールから作成することができます。ベストプラクティスとして、必要でなければタスクには AWS アカウントのルートユーザー アクセスキーを使用しないでください。代わりに、ご自身のアクセスキーを持つ新しい管理者 IAM ユーザーを作成します。

シークレットアクセスキーを表示またはダウンロードできるのは、このキーを作成するときのみです。アクセスキーを後で復元することはできません。ただし、新しいアクセスキーはいつでも作成できます。必要な IAM アクションを実行するためのアクセス許可も必要です。詳細については、『IAM ユーザーガイド』の「他の IAM リソースにアクセスするのに必要なアクセス権限」を参照してください。

4

Page 12: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドStep Functions Local (ダウンロード可能バージョン) のセットアップ

IAM ユーザーのアクセスキーを作成するには

1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

2. ナビゲーションペインで [Users] を選択します。3. アクセスキーを作成するユーザー名を選択し、[Security credentials] タブを選択します。4. [Access keys (アクセスキー)] セクションで、[Create access key (アクセスキーの作成)] を選択しま

す。5. 新しいアクセスキーペアを表示するには、[Show] を選択します。このダイアログボックスを閉じた

後、シークレットアクセスキーに再度アクセスすることはできません。認証情報は以下のようになります。

• アクセスキー ID: AKIAIOSFODNN7EXAMPLE• シークレットアクセスキー: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

6. キーペアをダウンロードするには、[.csv ファイルのダウンロード] を選択します。このキーは安全な場所に保存してください。このダイアログボックスを閉じた後、シークレットアクセスキーに再度アクセスすることはできません。

AWS アカウントを保護するためにキーは機密にしておき、メールでも送信しないでください。また、所属している組織外にこの情報を公開してはいけません。AWS または Amazon.com を名乗る人物から問い合わせがあった場合でも、この情報は開示しないでください。Amazon のスタッフまたは関係者がこの情報を尋ねることは決してありません。

7. .csv ファイルをダウンロードしたら、[閉じる] を選択します。アクセスキーを作成すると、キーペアはデフォルトで有効になり、すぐに使用できるようになります。

関連トピック

• 『IAM ユーザーガイド』の「IAM とは」• 『AWS General Reference』の「AWS セキュリティ認証情報」

Step Functions Local (ダウンロード可能バージョン) のセットアップ

ダウンロード可能なバージョンの AWS Step Functions が、実行可能な .jar ファイルおよび Docker イメージとして提供されています。Java アプリケーションは、Windows、Linux、macOS、および Java をサポートする他のプラットフォームで動作します。Java に加えて、AWS Command Line Interface (AWSCLI) のインストールも必要です。AWS CLI のインストールと設定についての詳細は、「AWS CommandLine Interface ユーザーガイド」を参照してください。

Warning

ダウンロード可能なバージョンの AWS Step Functions は、テストにのみ使用することを意図したものであり、機密情報を処理するためには使用しないでください。

コンピュータで Step Functions をセットアップして実行するには

1. 次のリンクを使用して Step Functions をダウンロードします。

ダウンロードリンク チェックサム

.tar.gz 8672b951e4dad1e354598898b56f3bf0

5

Page 13: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドStep Functions Local (ダウンロード可能バージョン) のセットアップ

ダウンロードリンク チェックサム

.zip c3c0956a1f9b1bfcab539665602523ba

2. .zip ファイルを抽出します。3. ダウンロードをテストし、バージョン情報を表示します。

$ java -jar StepFunctionsLocal.jar -vStep Function LocalVersion: 1.0.0Build: 2019-01-21

4. (オプション) 使用可能なコマンドのリストを表示します。

$ java -jar StepFunctionsLocal.jar -h

5. コンピュータで Step Functions を開始するには、コマンドプロンプトウィンドウを開き、StepFunctionsLocal.jar を展開したディレクトリに移動し、次のコマンドを入力します。

java -jar StepFunctionsLocal.jar

6. ローカルで実行中の Step Functions にアクセスするには、--endpoint-url パラメータを使用します。たとえば、AWS CLI を使用して Step Functions コマンドを次のように指定します。

aws stepfunctions --endpoint-url http://localhost:8083 command

Note

デフォルトでは、Step Functions Local はフェイクアカウントと認証情報を使用し、AWS リージョンは 米国東部(バージニア北部) に設定されます。Step Functions Local を AWS Lambdaまたはその他のサポートされているサービスで使用するには、認証情報とリージョンを設定する必要があります。Express ワークフローを Step Functions Local で使用すると、実行履歴は CloudWatch Logsには記録されず、ログファイルに保存されます。ログファイルのパスは、ローカルステートマシンの作成時に指定された CloudWatch Logs ロググループ ARN に基づきます。ログファイルは、Step Functions Local を実行している場所に相対的な /aws/states/log-group-name/${execution_arn}.log に保存されます。たとえば、実行 ARN が以下であるとします。

arn:aws:states:us-east-1:123456789012:express:test:example-ExpressLogGroup-wJalrXUtnFEMI

ログファイルは以下のようになります。

aws/states/log-group-name/arn:aws:states:us-east-1:123456789012:express:test:example-ExpressLogGroup-wJalrXUtnFEMI.log

AWS Lambda、AWS サーバーレスアプリケーションモデル (AWS SAM) CLI Local、または他のサポートされているサービスと連携するよう Step Functions Local を設定および実行するには、以下のトピックを参照してください。

トピック• コンピュータ上の Step Functions (ダウンロード可能バージョン) (p. 7)• Step Functions (ダウンロード可能バージョン) と Docker (p. 8)

6

Page 14: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドコンピュータ上の Step Functions

(ダウンロード可能バージョン)

• Step Functions Local 設定のオプション (p. 8)• Step Functions および AWS SAM CLI Local (p. 9)

コンピュータ上の Step Functions (ダウンロード可能バージョン)ローカルバージョンの SFN を使用して、コンピュータでステートマシンを設定、開発、およびテストします。

HelloWorld ステートマシンをローカルで実行するStep Functions を AWS Command Line Interface (AWS CLI) でローカルに実行したら、ステートマシンの実行を開始できます。

1. ステートマシン定義をエスケープして、AWS CLI からステートマシンを作成します。

aws stepfunctions --endpoint-url http://localhost:8083 create-state-machine --definition "{\ \"Comment\": \"A Hello World example of the Amazon States Language using a Pass state\",\ \"StartAt\": \"HelloWorld\",\ \"States\": {\ \"HelloWorld\": {\ \"Type\": \"Pass\",\ \"End\": true\ }\ }}" --name "HelloWorld" --role-arn "arn:aws:iam::012345678901:role/DummyRole"

Note

role-arn は Step Functions Local には使用されませんが、適切な構文に含める必要があります。前の例の Amazon リソースネーム (ARN) を使用できます。

ステートマシンを正常に作成すると、Step Functions は作成日とステートマシンの ARN で応答します。

{ "creationDate": 1548454198.202, "stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld"}

2. 作成したステートマシンの ARN を使用して実行を開始します。

aws stepfunctions --endpoint-url http://localhost:8083 start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld

Step Functions Local と AWS SAM CLI Localローカルバージョンの Step Functions を、ローカルバージョンの AWS Lambda で使用できます。これを設定するには、AWS SAM をインストールして設定する必要があります。

AWS SAM の設定と実行の詳細については、以下を参照してください。

7

Page 15: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドStep Functions (ダウンロード可能バージョン) と Docker

• AWS SAM のセットアップ• AWS SAM CLI Local の起動

ローカルシステムで Lambda が実行されたら、Step Functions Local を起動できます。Step Functionsローカル JAR ファイルを展開したディレクトリから Step Functions Local を起動し、ローカル Lambda エンドポイントを設定します。

java -jar StepFunctionsLocal.jar --lambda-endpoint http://127.0.0.1:3001 command

AWS Lambda での Step Functions Local の実行の詳細については、「Step Functions および AWS SAMCLI Local (p. 9)」を参照してください。

Step Functions (ダウンロード可能バージョン) とDockerStep Functions Local Docker イメージでは、Docker イメージを必要なすべての依存関係とともに使用して、Step Functions Local の使用をすぐに開始できます。この Docker イメージでは、Step FunctionsLocal を継続的インテグレーションテストの一部としてコンテナ化されたビルドに組み込むことができます。

Step Functions Local の Docker イメージを取得するには、https://hub.docker.com/r/amazon/aws-stepfunctions-local を参照するか、Docker pull コマンドを入力します。

docker pull amazon/aws-stepfunctions-local

ダウンロード可能なバージョンの Step Functions を Docker で起動するには、以下を実行します。

docker run -p 8083:8083 amazon/aws-stepfunctions-local

AWS Lambda またはサポートされている他のサービスとやり取りするには、最初に認証情報と他の設定オプションを指定する必要があります。詳細については、以下を参照してください。

• Step Functions Local 設定のオプション (p. 8)• Docker の認証情報と設定 (p. 9)

Step Functions Local 設定のオプションJAR ファイルを起動して AWS Step Functions Local を使用するには、AWS Command Line Interface(AWS CLI) を使用するか、システム環境に含めて、設定オプションを指定できます。Docker の場合、StepFunctions Local を起動するときに、ファイルでこれらのオプションを指定する必要があります。

設定オプション

オプション コマンドライン 環境

アカウント -account,--aws-account AWS_ACCOUNT_ID

リージョン -region,--aws-region AWS_DEFAULT_REGION

8

Page 16: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドStep Functions および AWS SAM CLI Local

オプション コマンドライン 環境

待機タイムスケール -waitTimeScale,--wait-time-scale WAIT_TIME_SCALE

Lambda エンドポイント -lambdaEndpoint,--lambda-endpoint

LAMBDA_ENDPOINT

バッチエンドポイント -batchEndpoint,--batch-endpoint BATCH_ENDPOINT

DynamoDB エンドポイント -dynamoDBEndpoint,--dynamodb-endpoint

DYNAMODB_ENDPOINT

ECS エンドポイント -ecsEndpoint,--ecs-endpoint ECS_ENDPOINT

Glue エンドポイント -glueEndpoint,--glue-endpoint GLUE_ENDPOINT

SageMaker エンドポイント -sageMakerEndpoint,--sagemaker-endpoint

SAGE_MAKER_ENDPOINT

SQS エンドポイント -sqsEndpoint,--sqs-endpoint SQS_ENDPOINT

SNS エンドポイント -snsEndpoint,--sns-endpoint SNS_ENDPOINT

Docker の認証情報と設定Step Functions Local for Docker を設定するには、aws-stepfunctions-local-credentials.txtファイルを作成します。

このファイルには、認証情報および次のような他の設定オプションが含まれています。

AWS_DEFAULT_REGION=AWS_REGION_OF_YOUR_AWS_RESOURCESAWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEYAWS_SECRET_ACCESS_KEY=YOUR_AWS_SECRET_KEYWAIT_TIME_SCALE=VALUELAMBDA_ENDPOINT=VALUEBATCH_ENDPOINT=VALUEDYNAMODB_ENDPOINT=VALUEECS_ENDPOINT=VALUEGLUE_ENDPOINT=VALUESAGE_MAKER_ENDPOINT=VALUESQS_ENDPOINT=VALUESNS_ENDPOINT=VALUE

認証情報と設定オプションを aws-stepfunctions-local-credentials.txt で設定したら、次のコマンドを使用して Step Functions を起動します。

docker run -p 8083:8083 --env-file aws-stepfunctions-local-credentials.txt amazon/aws-stepfunctions-local

Step Functions および AWS SAM CLI Localローカルマシンで AWS Step Functions および AWS Lambda の両方が実行されている状態で、AWS にコードをデプロイすることなく、ステートマシンと Lambda 関数をテストできます。

詳細については、以下を参照してください。

• Step Functions Local (ダウンロード可能バージョン) のセットアップ (p. 5)

9

Page 17: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドStep Functions および AWS SAM CLI Local

• AWS SAM のセットアップ

トピック• ステップ 1: AWS SAM をセットアップする (p. 10)• ステップ 2: AWS SAM CLI Local をテストする (p. 10)• ステップ 3: AWS SAM CLI Local を起動する (p. 11)• ステップ 4: Step Functions Local を起動する (p. 11)• ステップ 5: AWS SAM CLI Local 関数を参照するステートマシンを作成する (p. 12)• ステップ 6: ローカルステートマシンの実行を開始する (p. 12)

ステップ 1: AWS SAM をセットアップするAWS サーバーレスアプリケーションモデル (AWS SAM) CLI Local では、AWS Command LineInterface、AWS SAM、および Docker をインストールする必要があります。

1. AWS SAM CLI をインストールします。Note

AWS SAM CLI をインストールする前に、AWS CLI および Docker をインストールする必要があります。AWS SAM CLI をインストールするための前提条件を参照してください。

2. AWS SAM クイックスタートドキュメントをひととおり確認してください。必ず、以下のステップに従います。

1. アプリケーションの初期化2. アプリケーションのローカルテスト

これにより、sam-app ディレクトリが作成され、Python ベースの Hello World Lambda 関数を含む環境が構築されます。

ステップ 2: AWS SAM CLI Local をテストするこれで AWS SAM のインストールが完了し、Hello World Lambda 関数を作成したので、それをテストします。sam-app ディレクトリで、次のように入力します。

sam local start-api

これにより、Lambda 関数のローカルインスタンスが起動されます。

2019-01-31 16:40:27 Found credentials in shared credentials file: ~/.aws/credentials2019-01-31 16:40:27 Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]2019-01-31 16:40:27 You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template2019-01-31 16:40:27 * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)

ブラウザを開き、次のように入力します。

http://127.0.0.1:3000/hello

関数からの出力が表示されます。

10

Page 18: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドStep Functions および AWS SAM CLI Local

{"message": "hello world", "location": "72.21.198.66"}

Ctrl+C キーを押して、Lambda API を終了します。

ステップ 3: AWS SAM CLI Local を起動する関数が機能することをテストしたので、AWS SAM CLI Local を起動します。sam-app ディレクトリで、次のように入力します。

sam local start-lambda

これにより、AWS SAM CLI Local が起動され、使用するエンドポイントが提供されます。

2019-01-29 15:33:32 Found credentials in shared credentials file: ~/.aws/credentials2019-01-29 15:33:32 Starting the Local Lambda Service. You can now invoke your Lambda Functions defined in your template through the endpoint.2019-01-29 15:33:32 * Running on http://127.0.0.1:3001/ (Press CTRL+C to quit)

ステップ 4: Step Functions Local を起動するJAR ファイル

Step Functions Local の .jar ファイルバージョンを使用している場合は、Lambda エンドポイントを指定して Step Functions を起動します。.jar ファイルを展開したディレクトリで、次のように入力します。

java -jar StepFunctionsLocal.jar --lambda-endpoint http://localhost:3001

Step Functions Local が起動すると、環境に続いて、~/.aws/credentials ファイルで設定した認証情報が確認されます。デフォルトでは、フェイクユーザー ID を使用して起動し、region us-east-1 としてリスト表示されます。

2019-01-29 15:38:06.324: Failed to load credentials from environment because Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY))2019-01-29 15:38:06.326: Loaded credentials from profile: default2019-01-29 15:38:06.326: Starting server on port 8083 with account 123456789012, region us-east-1

Docker

Docker バージョンの Step Functions Local を使用している場合、次のコマンドを使用して Step Functionsを起動します。

docker run -p 8083:8083 amazon/aws-stepfunctions-local

Docker バージョンの Step Functions のインストールについては、「Step Functions (ダウンロード可能バージョン) と Docker (p. 8)」を参照してください。

Note

コマンドラインを通じて、または .jar ファイルから Step Functions を起動する場合は環境変数を設定することで、エンドポイントを指定できます。Docker バージョンの場合は、エンドポイントと認証情報をテキストファイルに指定する必要があります。「Step Functions Local 設定のオプション (p. 8)」を参照してください。

11

Page 19: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドStep Functions および AWS SAM CLI Local

ステップ 5: AWS SAM CLI Local 関数を参照するステートマシンを作成するStep Functions Local が実行されたら、ステップ 1: AWS SAM をセットアップする (p. 10) で初期化した HelloWorldFunction を参照するステートマシンを作成します。

aws stepfunctions --endpoint http://localhost:8083 create-state-machine --definition "{\ \"Comment\": \"A Hello World example of the Amazon States Language using an AWS Lambda Local function\",\ \"StartAt\": \"HelloWorld\",\ \"States\": {\ \"HelloWorld\": {\ \"Type\": \"Task\",\ \"Resource\": \"arn:aws:lambda:us-east-1:123456789012:function:HelloWorldFunction\",\ \"End\": true\ }\ }\}\}}" --name "HelloWorld" --role-arn "arn:aws:iam::012345678901:role/DummyRole"

これによりステートマシンが作成され、実行を開始するために使用できる Amazon リソースネーム (ARN)が提供されます。

{ "creationDate": 1548805711.403, "stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld"}

ステップ 6: ローカルステートマシンの実行を開始するステートマシンを作成した後、エンドポイントとステートマシン ARN を参照して実行を開始します。

aws stepfunctions --endpoint http://localhost:8083 start-execution --state-machine arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld --name test

これにより、HelloWorld ステートマシンの実行が開始され、test という名前を付けられます。

{ "startDate": 1548810641.52, "executionArn": "arn:aws:states:us-east-1:123456789012:execution:HelloWorld:test"}

これで Step Functions がローカルに実行されたので、AWS CLI を使用して操作することができます。たとえば、この実行に関する情報を取得するには、以下を使用します。

aws stepfunctions --endpoint http://localhost:8083 describe-execution --execution-arn arn:aws:states:us-east-1:123456789012:execution:HelloWorld:test

実行のために describe-execution を呼び出すと、次のようにより完全な詳細が提供されます。

{ "status": "SUCCEEDED", "startDate": 1549056334.073, "name": "test", "executionArn": "arn:aws:states:us-east-1:123456789012:execution:HelloWorld:test", "stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld",

12

Page 20: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドStep Functions および AWS SAM CLI Local

"stopDate": 1549056351.276, "output": "{\"statusCode\": 200, \"body\": \"{\\\"message\\\": \\\"hello world\\\", \\\"location\\\": \\\"72.21.198.64\\\"}\"}", "input": "{}"}

13

Page 21: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンを作成する

Step Functions の開始方法このチュートリアルでは、AWS Step Functions の基本操作について説明します。

開始するには、独立して動作し、2 つの Pass 状態を使用する、シンプルなステートマシンを作成します。Pass 状態は no-op (オペレーションのない命令) を表します。

トピック• ステートマシンを作成する (p. 14)• 新しい実行の開始 (p. 15)• ステートマシンを更新するには (p. 16)• 次のステップ (p. 17)

Step Functions には、さまざまな定義済みステートマシンがテンプレートとして用意されています。HelloWorld テンプレートを使用して、最初のステートマシンを作成します。

ステートマシンを作成する1. AWS マネジメントコンソール にサインインし、https://console.aws.amazon.com/states/home?#/

statemachines/create で Step Functions コンソールを開きます。2. [ステートマシンを定義する] ページで、[テンプレートで開始する] を選択し、[Hello world] を選択しま

す。

3. [タイプ] で [標準] を選択し、ステートマシンの [定義] とビジュアルワークフローを確認します。Note

ステートマシンのタイプ (標準または Express) は、一度作成すると変更できません。標準ワークフローと Express ワークフローの違いの詳細については、「標準ワークフローとExpress ワークフロー (p. 88)」を参照してください。

Step Functions によって、ステートマシンの名前が自動的に入力されます。また、[Code] ペインに、ステートマシンの Amazon ステートメント言語 記述が挿入されます。

次の JSON テキストは、2 つの Pass 状態を定義します。1 つ目は Hello、2 つ目は World という名前です。詳細については、「State Machine Structure (p. 92)」を参照してください。

{ "Comment": "A Hello World example of the Amazon States Language using Pass states", "StartAt": "Hello", "States": { "Hello": { "Type": "Pass", "Result": "Hello", "Next": "World" }, "World": { "Type": "Pass", "Result": "World",

14

Page 22: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド新しい実行の開始

"End": true } }}

4. [Visual Workflow] のグラフを使用して、Amazon ステートメント言語 コードでステートマシンが正しく記述されていることを確認します。

グラフが表示されない場合は、[Visual Workflow] ペインの を選択します。

5. [次へ] を選択します。6. IAM ロールを作成または入力します。

• Step Functions の IAM ロールを作成するには、[自分用の IAM ロールを作成する] を選択し、[名前]にロール名を入力します。

• ステートマシンの正しいアクセス許可を使用して IAM ロールをすでに作成済みである (p. 259)場合は、[Choose an existing IAM role (既存の IAM ロールを選択する)] を選択します。リストからロールを選択するか、ロールの ARN を指定します。

Note

Step Functions によって作成された IAM ロールを削除すると、Step Functions は後で再作成することはできません。同様に、ロールを変更すると (たとえば、IAM ポリシーのプリンシパルから Step Functions を削除するなど)、後で Step Functions でそれを元の設定に復元することはできません。

7. [Create state machine (ステートマシンの作成)] をクリックします。

新しい実行の開始ステートマシンを作成した後、実行を開始できます。

1. [Helloworld] ページで、[新しい実行] を選択します。2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

15

Page 23: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンを更新するには

3. [New execution (新しい実行)] ページで、[Start Execution (実行の開始)] を選択します。

ステートマシンの新しい実行が開始され、実行中の実行が表示されている新しいページが表示されます。

4. (省略可能) [Execution Details] セクションで、[Info] タブを選択して [Execution Status] および[Started] と [Closed] のタイムスタンプを確認します。

5. 実行結果を表示するには、[Output] タブを選択します。

ステートマシンを更新するには今後の実行用にステートマシンを更新できます。

Note

Step Functions でのステートマシンの更新は、結果的に整合します。数秒後、新しく開始されたすべての実行は、更新された定義と roleArn を使用します。ステートマシンを更新したすぐ後に開始された実行では、前のステートマシン定義と roleArn が使用されることがあります。すでに実行されている実行は、完了するまで開始時の定義と roleArn を使用します。

1. [Helloworld] ページで、[ステートマシンの編集] を選択します。2. [編集] ページの [コード] ペインで、ステートマシンの Amazon ステートメント言語 記述を編集しま

す。2 つ目の Result を更新して World has been updated! を読み込む

{ "Comment": "A Hello World example of the Amazon States Language using Pass states", "StartAt": "Hello", "States": { "Hello": { "Type": "Pass", "Result": "Hello", "Next": "World" }, "World": { "Type": "Pass", "Result": "World has been updated!", "End": true } }}

3. (オプション) [IAM role for executions (実行の IAM ロール)] リストで、新しい AWS Identity andAccess Management (IAM) ロールを選択します。

Note

[Create new role (新しいロールの作成)] を選択して、新しい IAM ロールを作成することもできます。詳細については、「AWS Step Functions と IAM の連携 (p. 259)」を参照してください。

4. [保存]、[実行の開始] の順に選択します。

16

Page 24: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド次のステップ

5. [New execution (新しい実行)] ページで、[Start Execution (実行の開始)] を選択します。6. 実行の結果を表示するには、[Visual workflow (ビジュアルワークフロー)] で、[HelloWorld] 状態を選択

して、[Step details (ステップの詳細)] で、[Output (出力)] を選択します。

Note

出力テキストは、新しく更新されたステートマシンと一致します。

次のステップPass 状態を使用するシンプルなステートマシンを作成したところで、以下を試します。

• Lambda ステートマシンを作成する (p. 20)• AWS CloudFormation を使用して Lambda ステートマシンを作成する (p. 24)• アクティビティステートマシンを作成する (p. 32)• ステートマシンを使用してエラー条件を処理する (p. 37)• Amazon CloudWatch Events を使用してステートマシンを開始する (p. 43)• Amazon API Gateway を使用して Step Functions API 作成する。 (p. 49)

17

Page 25: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド開発オプション

Step Functions のチュートリアルこのセクションのチュートリアルは、AWS Step Functions を使用した作業のさまざまな側面を理解するのに役立ちます。

これらのチュートリアルを完了するには、AWS アカウントが必要です。AWS アカウントをお持ちでない場合は、http://aws.amazon.com/ に移動し、[コンソールへサインイン] を選択します。

トピック• 開発オプション (p. 18)• Lambda を使用する Step Functions ステートマシンを作成する (p. 20)• AWS CloudFormation を使用してStep Functions 用 Lambda ステートマシンを作成する (p. 24)• Step Functions を使用してアクティビティステートマシンを作成する (p. 32)• Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)• CloudWatch イベント を使用して定期的にステートマシンの実行を開始する (p. 43)• Amazon S3 イベント発生時にステートマシンの実行を開始する (p. 44)• API Gateway を使用して Step Functions API を作成する (p. 49)• Lambda を使用してループを反復する (p. 53)• 新しい実行としての続行 (p. 60)• コードスニペットを使用して Amazon SNS メッセージを送信する状態を作成する (p. 69)• 人間による承諾プロジェクト例をデプロイする (p. 73)• Map 状態を使用して Lambda を複数回呼び出す (p. 83)

開発オプションAWS Step Functions ステートマシンは、コンソール、SDK、またはテストと開発のためのローカルバージョンを使用するなど、いくつかの方法で実装できます。

トピック• Step Functions コンソール (p. 18)• AWS SDK (p. 19)• 標準ワークフローと Express ワークフロー (p. 19)• HTTPS サービス API (p. 19)• 開発環境 (p. 19)• エンドポイント (p. 19)• AWS CLI (p. 20)• Step Functions ローカル (p. 20)

Step Functions コンソールステートマシンは Step Functions コンソールを使用して定義できます。AWS Lambda を使用してタスクのコードを入力し、Step Functions コンソールで Amazon ステートメント言語 を使用してステートマシンを定義することで、ローカルの開発環境を使用せずにクラウド内に複雑なステートマシンを作成できます。

18

Page 26: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAWS SDK

Lambda ステートマシンの作成 (p. 20)チュートリアルでは、この方法を使用してシンプルなステートマシンを作成し、それを実行して結果を確認します。

AWS SDKStep Functions は、AWS SDKs for Java、.NET、Ruby、PHP、Python (Boto 3)、JavaScript、Go、および C++ でサポートされています。これらの SDK は、さまざまなプログラミング言語で Step FunctionsHTTPS API アクションを使用するための便利な方法を提供します。

これらの SDK ライブラリで公開されている API アクションを使用して、ステートマシン、アクティビティ、ステートマシンスターターを開発できます。また、これらのライブラリを使用して可視性オペレーションにアクセスし、独自の Step Functions のモニタリングおよびレポートツールを開発できます。

Step Functions を他の AWS のサービスで使用するには、現行の AWS SDK のリファレンスドキュメントおよびアマゾン ウェブ サービスのツールを参照してください。

Note

Step Functions は HTTPS エンドポイントのみをサポートしています。

標準ワークフローと Express ワークフロー新しいステートマシンを作成するときは、Type に標準または Express のいずれかを選択する必要があります。どちらの場合も、Amazon ステートメント言語 を使用してステートマシンを定義します。ステートマシンの実行の動作は、選択したタイプによって異なります。ステートマシンが作成された後は、選択したタイプを変更することはできません。

詳細については、「CloudWatch Logs を使用したロギング (p. 305)」を参照してください。

HTTPS サービス APIStep Functions は HTTPS リクエスト経由でアクセス可能なサービスオペレーションを提供します。これらのオペレーションを使用して Step Functions と直接通信したり、HTTPS を介して Step Functions と通信できる任意の言語で独自のライブラリを開発したりできます。

サービス API アクションを使用するステートマシン、ワーカー、ステートマシンスターターを開発できます。また、API アクションを介して可視性オペレーションにアクセスし、独自のモニタリングおよびレポートツールを開発できます。

API アクションの詳細については、AWS Step Functions API リファレンス を参照してください。

開発環境使用するプログラミング言語に適した開発環境を設定する必要があります。

たとえば、Java を使用して Step Functions で開発する場合、Java 開発環境 (AWS SDK for Java など) を各開発ワークステーションにインストールする必要があります。Java 開発者が Eclipse IDE を使用する場合は、AWS Toolkit for Eclipse もインストールする必要があります。この Eclipse プラグインによってAWS の開発に役立つ機能が追加されます。

プログラミング言語にランタイム環境が必要な場合は、これらのプロセスを実行する各コンピュータに環境を設定する必要があります。

エンドポイントレイテンシーを軽減し要件を満たす場所にデータを保存するために、Step Functions では異なる AWSリージョンのエンドポイントが用意されています。

19

Page 27: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAWS CLI

Step Functions の各エンドポイントは完全に独立しています。ステートマシンまたはアクティビティは、それが作成されたリージョン内にのみ存在します。あるリージョンで作成されたステートマシンおよびアクティビティは、別のリージョンで作成されたものとデータや属性を共有しません。たとえば、2 つの異なるリージョンに STATES-Flows-1 にという名前のステートマシンを登録できますが、2 つのステートマシンは相互にデータや属性を共有せず、相互に完全に独立しています。

Step Functions エンドポイントのリストについては、AWS General Referenceの「リージョンとエンドポイント: AWS Step Functions」を参照してください。

AWS CLIAWS Command Line Interface (AWS CLI) から Step Functions の多くの機能にアクセスできます。AWSCLI は、Step Functions コンソールの使用、または場合によっては Step Functions API アクションを使用したプログラミングの代替手段を提供します。たとえば、AWS CLI を使用してステートマシンを作成し、その後ステートマシンを一覧表示できます。

AWS CLI の Step Functions コマンドを使用して、実行、アクティビティのポーリング、タスクハートビートの記録などを開始および実行できます。Step Functions コマンドの完全なリストと使用可能な引数、および使用方法を示す例については、『AWS CLI Command Reference』を参照してください。

AWS CLI コマンドは Amazon ステートメント言語 に密接に従うため、AWS CLI を使用して StepFunctions API アクションについて習得できます。また、既存の API の知識を使用して、コマンドラインからコードのプロトタイプを作成したり Step Functions アクションを実行したりできます。

Step Functions ローカルテストと開発のため、ローカルマシンで Step Functions をインストールおよび実行できます。StepFunctions ローカルでは、任意のマシンで実行を開始できます。

ローカルバージョンの Step Functions は、AWS およびローカルの実行で AWS Lambda 関数を呼び出すことができます。また、他のサポートされている AWS のサービス (p. 143)を調整することもできます。詳細については、「Step Functions Local (ダウンロード可能バージョン) のセットアップ (p. 5)」を参照してください。

Lambda を使用する Step Functions ステートマシンを作成する

このチュートリアルでは、AWS Lambda 関数を使用して Task 状態を実装する AWS Step Functions ステートマシンを作成します。Task ステートは 1 単位の作業を実行します。

Lambda は Task 状態の実装に最適です。Lambda 関数はステートレス (入力と出力の関係が決まっている) であり、作成が簡単でサーバーインスタンスにコードをデプロイする必要がないためです。AWS マネジメントコンソール や使い慣れたエディタでコードを作成できます。関数用のコンピューティング環境を提供して実行する細かい部分は AWS が処理します。

トピック• ステップ 1: Lambda 用の IAM ロールを作成する (p. 21)• ステップ 2: Lambda 関数を作成する (p. 21)• ステップ 3: Lambda 関数をテストする (p. 22)• ステップ 4: ステートマシンを作成する (p. 22)• ステップ 5: 新しい実行を開始する (p. 24)

20

Page 28: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 1: Lambda 用の IAM ロールを作成する

ステップ 1: Lambda 用の IAM ロールを作成するAWS Lambda と AWS Step Functions のいずれも、コードを実行して AWS リソース (Amazon S3 バケットに保存されているデータなど) にアクセスできます。セキュリティを維持するために、これらのリソースへのアクセスを Lambda および Step Functions に付与する必要があります。

Lambda では、Lambda 関数を作成する際に AWS Identity and Access Management (IAM) ロールを割り当てる必要があります。これは、ステートマシンを作成する際に Step Functions に IAM ロールを割り当てる必要があるのと同じ方法です。

IAM コンソールを使用して、サービスにリンクされたロールを作成できます。

ロールを作成するには (コンソール)

1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

2. IAM コンソールの [Navigation] ペインで [Roles] を選択します。続いて、[Create role] を選択します。3. [AWS サービス] ロールタイプを選択し、続いて [Lambda] を選択します。4. [Lambda] ユースケースを選択します。ユースケースは、サービスに必要な信頼ポリシーを含めるよう

に定義されています。続いて、[Next: Permissions] を選択します。5. ロールにアタッチするアクセス許可ポリシーを 1 つ以上選択します (例:

AWSLambdaBasicExecutionRole)。「AWS Lambda アクセス許可モデル」を参照してください。

ロールに許可するアクセス許可を割り当てるポリシーの横にあるボックスを選択し、[Next: Review]をクリックします。

6. [Role name] に入力します。7. (オプション) [Role description] で、サービスにリンクされた新しいロールの説明を編集します。8. ロールを確認し、[ロールの作成] を選択します。

ステップ 2: Lambda 関数を作成する使用する Lambda 関数は入力 (名前) を受信し、入力値を含めた挨拶を返します。

Important

Lambda 関数が、ステートマシンと同じ AWS アカウントと AWS リージョンにあることを確認します。

1. Lambda コンソールを開き、[Create a function (Lambda 関数の作成)] を選択します。2. [Create function (関数の作成)] セクションで、[一から作成] を選択します。3. [Basic information] セクションで、Lambda 関数を構成します。

a. [Function name (関数名)] に「HelloFunction」と入力します。b. [ランタイム] で [Node.js 12.x] を選択します。c. [Role (ロール)] で、[既存のロールを選択] を選択します。d. [Existing role] で、前に作成した Lambda ロール (p. 21)を選択します。

Note

作成した IAM ロールがリストに表示されない場合は、そのロールが Lambda に伝達されるまで、あと数分かかる場合があります。

e. [Create function] を選択します。

Lambda 関数が作成されたら、例に示すように、ページの右上隅に表示されているその Amazonリソースネーム (ARN) を記録します。

21

Page 29: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: Lambda 関数をテストする

arn:aws:lambda:us-east-1:123456789012:function:HelloFunction

4. Lambda 関数の以下のコードを [HelloFunction] ページの [関数コード] セクションにコピーします。

exports.handler = (event, context, callback) => { callback(null, "Hello, " + event.who + "!");};

このコードは、関数に渡された event オブジェクトから提供された入力データの who フィールドを使用して、挨拶をアセンブルします。後で新しい実行を開始 (p. 24)するときに、この関数の入力データを追加します。callback メソッドによって、関数からアセンブルされた挨拶が返されます。

5. [Save] を選択します。

ステップ 3: Lambda 関数をテストするLambda 関数をテストしてオペレーションを確認します。

1. [Select a test events (テストイベントの選択)] で [Configure test event (テストイベントの設定)] を選択します。[イベント名] で、「HelloFunction」と入力します。

2. データ例を以下に置き換えます。

{ "who": "AWS Step Functions"}

"who" エントリは Lambda 関数の event.who フィールドに対応し、挨拶を完了させます。関数をStep Functions タスクとして実行するときも同じ入力データを使用します。

3. [作成] を選択します。4. [HelloFunction] ページで、新しいデータを使用して Lambda 関数の [Test] を実行します。

テストの結果がページの上部に表示されます。[詳細] を展開して出力を表示します。

ステップ 4: ステートマシンを作成するStep Functions コンソールを使用して、ステートが Task であるステートマシンを作成します。Taskステートに Lambda 関数への参照を追加します。ステートマシンの実行が Task ステートに達すると、Lambda 関数が呼び出されます。

1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。2. [Define state machine (ステートマシンの定義)] ページで、[Author with code snippets (コードスニペッ

トで作成)] を選択します。[タイプ] で、[標準] を選択します。[Name for your state machine (ステートマシンの名前)] に、たとえば「LambdaStateMachine」と入力します。

Note

ステートマシン、実行、およびアクティビティ名の長さは 1~80 文字で、アカウントとAWS リージョンに対して一意である必要があります。また、次の文字を含めることはできません。

• 空白• ワイルドカード文字 (? *)

22

Page 30: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 4: ステートマシンを作成する

• 括弧 (< > { } [ ])• 特殊文字 (: ; , \ | ^ ~ $ # % & ` ")• 制御文字 (\\u0000 - \\u001f or \\u007f - \\u009f)

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. 次の例に示すように、[State machine definition (ステートマシンの定義)] ペインで、前に作成したLambda 関数 (p. 21)の ARN を使用して以下のステートマシンの定義を追加します。

{ "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "End": true } }}

これは、Amazon ステートメント言語 を使用したステートマシンの説明です。HelloWorld という名前の単一の Task 状態を定義します。詳細については、「State Machine Structure (p. 92)」を参照してください。

Note

Task 状態の Retry を設定することもできます。ベストプラクティスとして、本番稼働用コードが Lambda サービス例外 (Lambda.ServiceException およびLambda.SdkClientException) を処理できることを確認します。詳細については、以下を参照してください。

• Lambda サービス例外の処理 (p. 241)• エラー後の再試行 (p. 137)

[次へ] を選択します。4. IAM ロールを作成または入力します。

• Step Functions の IAM ロールを作成するには、[自分用の IAM ロールを作成する] を選択し、[名前]にロール名を入力します。

• ステートマシンの正しいアクセス許可を使用して IAM ロールをすでに作成済みである (p. 259)場合は、[Choose an existing IAM role (既存の IAM ロールを選択する)] を選択します。リストからロールを選択するか、ロールの ARN を指定します。

Note

Step Functions によって作成された IAM ロールを削除すると、Step Functions は後で再作成することはできません。同様に、ロールを変更すると (たとえば、IAM ポリシーのプリンシパルから Step Functions を削除するなど)、後で Step Functions でそれを元の設定に復元することはできません。

5. [次へ] を選択します。

23

Page 31: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 5: 新しい実行を開始する

ステップ 5: 新しい実行を開始するステートマシンを作成した後、実行を開始します。

1. [LambdaStateMachine] ページで、[Start execution] (実行の開始) を選択します。

[New execution (新しい実行)] ページが表示されます。2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. 実行入力領域で、サンプルデータを以下で置き換えます。

{ "who" : "AWS Step Functions"}

"who" は Lambda 関数が挨拶する相手の名前を取得するために使用するキー名です。4. [Start Execution] を選択します。

ステートマシンの新しい実行が開始され、実行中の実行が表示されている新しいページが表示されます。

5. 実行結果を表示するには、[実行の詳細] の [出力] セクションを展開します。

AWS CloudFormation を使用してStep Functions 用Lambda ステートマシンを作成する

このチュートリアルでは、AWS CloudFormation を使用して基本的な AWS Lambda 関数を作成する方法を示します。スタック (IAM ロール、Lambda 関数、およびステートマシン) の作成には AWSCloudFormation コンソールおよび YAML テンプレートを使用します。その後、AWS Step Functions コンソールを使用してステートマシンの実行を開始します。

詳細については、AWS CloudFormation ユーザーガイドの「CloudFormation テンプレートの使用」と「AWS::StepFunctions::StateMachine リソース」を参照してください。

トピック• ステップ 1: AWS CloudFormation テンプレートのセットアップ (p. 25)• ステップ 2: AWS CloudFormation テンプレートを使用して Lambda ステートマシンを作成す

る (p. 28)• ステップ 3: ステートマシンの実行を開始する (p. 32)

24

Page 32: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 1: AWS CloudFormation

テンプレートのセットアップ

ステップ 1: AWS CloudFormation テンプレートのセットアップサンプルテンプレート (p. 28)を使用する前に、AWS CloudFormation テンプレートのさまざまな部分を宣言する方法を理解しておく必要があります。

トピック• Lambda 用に IAM ロールを作成するには (p. 25)• Lambda 関数を作成するには (p. 25)• ステートマシンの実行用の IAM ロールを作成するには (p. 26)• Lambda ステートマシンを作成するには (p. 27)

Lambda 用に IAM ロールを作成するにはLambda 関数の IAM ロールに関連付けられた信頼ポリシーを定義します。

YAML

LambdaExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: "sts:AssumeRole"

JSON

"LambdaExecutionRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } }

Lambda 関数を作成するにはHello World というメッセージを出力する Lambda 関数の以下のプロパティを定義します。

Important

Lambda 関数が、ステートマシンと同じ AWS アカウントと AWS リージョンにあることを確認します。

25

Page 33: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 1: AWS CloudFormation

テンプレートのセットアップ

YAML

MyLambdaFunction: Type: "AWS::Lambda::Function" Properties: Handler: "index.handler" Role: !GetAtt [ LambdaExecutionRole, Arn ] Code: ZipFile: | exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }; Runtime: "nodejs12.x" Timeout: "25"

JSON

"MyLambdaFunction": { "Type": "AWS::Lambda::Function", "Properties": { "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "LambdaExecutionRole", "Arn" ] }, "Code": { "ZipFile": "exports.handler = (event, context, callback) => {\n callback(null, \"Hello World!\");\n};\n" }, "Runtime": "nodejs12.x", "Timeout": "25" } },

ステートマシンの実行用の IAM ロールを作成するにはステートマシンの実行の IAM ロールに関連付けられた信頼ポリシーを定義します。

YAML

StatesExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - !Sub states.${AWS::Region}.amazonaws.com Action: "sts:AssumeRole" Path: "/" Policies: - PolicyName: StatesExecutionPolicy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action:

26

Page 34: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 1: AWS CloudFormation

テンプレートのセットアップ

- "lambda:InvokeFunction" Resource: "*"

JSON

"StatesExecutionRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ { "Fn::Sub": "states.${AWS::Region}.amazonaws.com" } ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "StatesExecutionPolicy", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "*" } ] } } ] } },

Lambda ステートマシンを作成するにはLambda ステートマシンを定義します。

YAML

MyStateMachine: Type: "AWS::StepFunctions::StateMachine" Properties: DefinitionString: !Sub - |- { "Comment": "A Hello World example using an AWS Lambda function", "StartAt": "HelloWorld", "States": {

27

Page 35: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 2: AWS CloudFormation テンプレートを使用して Lambda ステートマシンを作成する

"HelloWorld": { "Type": "Task", "Resource": "${lambdaArn}", "End": true } } } - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]} RoleArn: !GetAtt [ StatesExecutionRole, Arn ]

JSON

"MyStateMachine": { "Type": "AWS::StepFunctions::StateMachine", "Properties": { "DefinitionString": { "Fn::Sub": [ "{\n \"Comment\": \"A Hello World example using an AWS Lambda function\",\n \"StartAt\": \"HelloWorld\",\n \"States\": {\n \"HelloWorld\": {\n \"Type\": \"Task\",\n \"Resource\": \"${lambdaArn}\",\n \"End\": true\n }\n }\n}", { "lambdaArn": { "Fn::GetAtt": [ "MyLambdaFunction", "Arn" ] } } ] }, "RoleArn": { "Fn::GetAtt": [ "StatesExecutionRole", "Arn" ] } } }

ステップ 2: AWS CloudFormation テンプレートを使用して Lambda ステートマシンを作成するAWS CloudFormation テンプレートのさまざまなパートを理解した後、それらをひとつにまとめてテンプレートを使用し AWS CloudFormation スタックを作成できます。

Lambda ステートマシンを作成するには1. 以下のサンプルデータを YAML 例の MyStateMachine.yaml、あるいは JSON の

MyStateMachine.json という名前のファイルにコピーします。

YAML

AWSTemplateFormatVersion: "2010-09-09"Description: "An example template with an IAM role for a Lambda state machine."Resources: LambdaExecutionRole: Type: "AWS::IAM::Role" Properties:

28

Page 36: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 2: AWS CloudFormation テンプレートを使用して Lambda ステートマシンを作成する

AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: "sts:AssumeRole"

MyLambdaFunction: Type: "AWS::Lambda::Function" Properties: Handler: "index.handler" Role: !GetAtt [ LambdaExecutionRole, Arn ] Code: ZipFile: | exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }; Runtime: "nodejs12.x" Timeout: "25"

StatesExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - !Sub states.${AWS::Region}.amazonaws.com Action: "sts:AssumeRole" Path: "/" Policies: - PolicyName: StatesExecutionPolicy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - "lambda:InvokeFunction" Resource: "*"

MyStateMachine: Type: "AWS::StepFunctions::StateMachine" Properties: DefinitionString: !Sub - |- { "Comment": "A Hello World example using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "${lambdaArn}", "End": true } } } - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]} RoleArn: !GetAtt [ StatesExecutionRole, Arn ]

29

Page 37: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 2: AWS CloudFormation テンプレートを使用して Lambda ステートマシンを作成する

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "An example template with an IAM role for a Lambda state machine.", "Resources": { "LambdaExecutionRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }, "MyLambdaFunction": { "Type": "AWS::Lambda::Function", "Properties": { "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "LambdaExecutionRole", "Arn" ] }, "Code": { "ZipFile": "exports.handler = (event, context, callback) => {\n callback(null, \"Hello World!\");\n};\n" }, "Runtime": "nodejs12.x", "Timeout": "25" } }, "StatesExecutionRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ { "Fn::Sub": "states.${AWS::Region}.amazonaws.com" } ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [

30

Page 38: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 2: AWS CloudFormation テンプレートを使用して Lambda ステートマシンを作成する

{ "PolicyName": "StatesExecutionPolicy", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "*" } ] } } ] } }, "MyStateMachine": { "Type": "AWS::StepFunctions::StateMachine", "Properties": { "DefinitionString": { "Fn::Sub": [ "{\n \"Comment\": \"A Hello World example using an AWS Lambda function\",\n \"StartAt\": \"HelloWorld\",\n \"States\": {\n \"HelloWorld\": {\n \"Type\": \"Task\",\n \"Resource\": \"${lambdaArn}\",\n \"End\": true\n }\n }\n}", { "lambdaArn": { "Fn::GetAtt": [ "MyLambdaFunction", "Arn" ] } } ] }, "RoleArn": { "Fn::GetAtt": [ "StatesExecutionRole", "Arn" ] } } } }}

2. AWS CloudFormation コンソールを開き、[スタックの作成] を選択します。3. [Select Template (テンプレートを選択)] ページで、[Upload a template to Amazon S3 (Amazon S3 に

テンプレートをアップロード)] を選択します。MyStateMachine ファイルを選択し、[Next] を選択します。

4. [Specify Details (詳細の指定)] ページで、[Stack name (スタック名)] に MyStateMachine を入力してから、[Next (次へ)] を選択します。

5. [オプション] ページで、[次へ] を選択します。6. [Review] ページで、[I acknowledge that AWS CloudFormation might create IAM resources] を選択

し、[Create] を選択します。

AWS CloudFormation は MyStateMachine スタックの作成を開始し、[CREATE_IN_PROGRESS]のステータスが表示されます。プロセスが完了すると、AWS CloudFormation に[CREATE_COMPLETE] ステータスが表示されます。

31

Page 39: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: ステートマシンの実行を開始する

7. (省略可能) スタックのリソースを表示するには、スタックを選択して [Resources] タブを選択します。

ステップ 3: ステートマシンの実行を開始するLambda ステートマシンを作成した後、実行を開始します。

ステートマシンの実行を開始するには1. Step Functions コンソールを開いて、AWS CloudFormation を使用して作成したステートマシンの名

前を選択します。2. [MyStateMachine-ABCDEFGHIJ1K] ページで、[New execution (新しい実行)] を選択します。

[New execution (新しい実行)] ページが表示されます。3. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

4. [Start Execution] を選択します。

ステートマシンの新しい実行が開始され、実行中の実行が表示されている新しいページが表示されます。

5. (省略可能) [Execution Details (実行の詳細)] で、[実行ステータス] および [Started (開始)] と [Closed(終了)] のタイムスタンプを確認します。

6. 実行結果を表示するには、[出力] タブを選択します。

Step Functions を使用してアクティビティステートマシンを作成する

このチュートリアルでは、Java と AWS Step Functions を使用してアクティビティベースのステートマシンを作成する方法について説明します。アクティビティにより、ステートマシンの別の場所で実行されるワーカーコードを制御できます。アクティビティ (p. 98) の概要については、「Step Functions の詳細 (p. 88)」を参照してください。

このチュートリアルを完了するには、以下が必要です。

• SDK for Javaこのチュートリアルのサンプルアクティビティは、AWS SDK for Java を使用して AWS と通信する Java アプリケーションです。

32

Page 40: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 1: アクティビティを作成する

• 環境または標準 AWS 設定ファイルの AWS 認証情報。詳細については、AWS SDK for Java DeveloperGuide の「AWS 認証情報のセットアップ」を参照してください。

トピック• ステップ 1: アクティビティを作成する (p. 33)• ステップ 2: ステートマシンを作成する (p. 33)• ステップ 3: ワーカーを実装する (p. 35)• ステップ 4: 実行を開始する (p. 36)• ステップ 5: ワーカーを実行して停止する (p. 37)

ステップ 1: アクティビティを作成するStep Functions に、ワーカー (プログラム) を作成するアクティビティを認識させる必要があります。StepFunctions は、アクティビティのアイデンティティを確立する Amazon リソースネーム (ARN) で応答します。このアイデンティティを使用して、ステートマシンとワーカー間で渡される情報を調整します。

Important

アクティビティタスクが、ステートマシンと同じ AWS アカウント下であることを確認します。

1. Step Functions コンソールの左のナビゲーションペインで、[Activities (アクティビティ)] を選択します。

2. [Create activity] (アクティビティの作成) を選択します。3. [Activity Name (アクティビティ名)] に入力し (get-greeting など)、[Create Activity (アクティビ

ティの作成)] を選択します。4. 次の例に示すように、アクティビティタスクが作成されたら、その ARN を記録します。

arn:aws:states:us-east-1:123456789012:activity:get-greeting

ステップ 2: ステートマシンを作成するアクティビティがいつ呼び出されるかと、ワーカーがいつプライマリ作業を実行して、その結果を収集し、結果を戻すべきかを判断するステートマシンを作成します。

1. Step Functions コンソールの左のナビゲーションペインで、[State machines (ステートマシン)] を選択します。

2. [State machines (ステートマシン)] ページで、[Create state machine (ステートマシンの作成)] を選択し、[Author with code snippets (コードスニペットで作成)] を選択します。[Type (タイプ)] で[Standard (標準)] を選択し、ステートマシンの名前 (ActivityStateMachine) など) を入力します。

Note

ステートマシン、実行、およびアクティビティ名の長さは 1~80 文字で、アカウントとAWS リージョンに対して一意である必要があります。また、次の文字を含めることはできません。

• 空白• ワイルドカード文字 (? *)• 括弧 (< > { } [ ])• 特殊文字 (: ; , \ | ^ ~ $ # % & ` ")• 制御文字 (\\u0000 - \\u001f or \\u007f - \\u009f)

33

Page 41: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 2: ステートマシンを作成する

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

次の例に示すように、[State machine definition (ステートマシンの定義)] で、次のコードを入力し、Resource フィールドに前に作成したアクティビティタスク (p. 33)の ARN を追加します。

{ "Comment": "An example using a Task state.", "StartAt": "getGreeting", "Version": "1.0", "TimeoutSeconds": 300, "States": { "getGreeting": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:get-greeting", "End": true } }}

これは、Amazon ステートメント言語 を使用したステートマシンの説明です。getGreeting という名前の単一の Task 状態を定義します。詳細については、「State Machine Structure (p. 92)」を参照してください。

3. [Visual Workflow] のグラフを使用して、Amazon ステートメント言語 コードでステートマシンが正しく記述されていることを確認します。

グラフが表示されない場合は、[Visual Workflow] ペインの を選択します。4. [次へ] を選択します。5. IAM ロールを作成または入力します。

• Step Functions の IAM ロールを作成するには、[自分用の IAM ロールを作成する] を選択し、[名前]にロール名を入力します。

• ステートマシンの正しいアクセス許可を使用して IAM ロールをすでに作成済みである (p. 259)場合は、[Choose an existing IAM role (既存の IAM ロールを選択する)] を選択します。リストからロールを選択するか、ロールの ARN を指定します。

Note

Step Functions によって作成された IAM ロールを削除すると、Step Functions は後で再作成することはできません。同様に、ロールを変更すると (たとえば、IAM ポリシーのプリンシパルから Step Functions を削除するなど)、後で Step Functions でそれを元の設定に復元することはできません。

34

Page 42: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: ワーカーを実装する

6. [Create state machine (ステートマシンの作成)] をクリックします。

ステップ 3: ワーカーを実装するワーカーを作成します。ワーカーは、次の処理を行うプログラムです。

• GetActivityTask API アクションを使用したアクティビティの Step Functions のポーリング。• コードを使用したアクティビティの作業の実行 (次のコードの getGreeting() メソッドなど)。• SendTaskSuccess、SendTaskFailure、SendTaskHeartbeat API アクションを使用して結果を返

す。

Note

アクティビティワーカーの詳細な例については、「Ruby のサンプルアクティビティワーカー (p. 100)」を参照してください。この例により、アクティビティワーカーのリファレンスとして使用できるベストプラクティスに基づく実装が提供されます。このコードには、ポーラーおよびアクティビティワーカー用に構成可能な数のスレッドを含む、コンシューマー/プロデューサーパターンが実装されています。

ワーカーを実装するには1. GreeterActivities.java という名前のファイルを作成します。2. 次のコードを追加します。

import com.amazonaws.ClientConfiguration;import com.amazonaws.auth.EnvironmentVariableCredentialsProvider;import com.amazonaws.regions.Regions;import com.amazonaws.services.stepfunctions.AWSStepFunctions;import com.amazonaws.services.stepfunctions.AWSStepFunctionsClientBuilder;import com.amazonaws.services.stepfunctions.model.GetActivityTaskRequest;import com.amazonaws.services.stepfunctions.model.GetActivityTaskResult;import com.amazonaws.services.stepfunctions.model.SendTaskFailureRequest;import com.amazonaws.services.stepfunctions.model.SendTaskSuccessRequest;import com.amazonaws.util.json.Jackson;import com.fasterxml.jackson.databind.JsonNode;import java.util.concurrent.TimeUnit;

public class GreeterActivities {

public String getGreeting(String who) throws Exception { return "{\"Hello\": \"" + who + "\"}"; }

public static void main(final String[] args) throws Exception { GreeterActivities greeterActivities = new GreeterActivities(); ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSocketTimeout((int)TimeUnit.SECONDS.toMillis(70));

AWSStepFunctions client = AWSStepFunctionsClientBuilder.standard() .withRegion(Regions.US_EAST_1) .withCredentials(new EnvironmentVariableCredentialsProvider()) .withClientConfiguration(clientConfiguration) .build();

while (true) { GetActivityTaskResult getActivityTaskResult = client.getActivityTask(

35

Page 43: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 4: 実行を開始する

new GetActivityTaskRequest().withActivityArn(ACTIVITY_ARN));

if (getActivityTaskResult.getTaskToken() != null) { try { JsonNode json = Jackson.jsonNodeOf(getActivityTaskResult.getInput()); String greetingResult = greeterActivities.getGreeting(json.get("who").textValue()); client.sendTaskSuccess( new SendTaskSuccessRequest().withOutput( greetingResult).withTaskToken(getActivityTaskResult.getTaskToken())); } catch (Exception e) { client.sendTaskFailure(new SendTaskFailureRequest().withTaskToken( getActivityTaskResult.getTaskToken())); } } else { Thread.sleep(1000); } } }}

Note

この例の EnvironmentVariableCredentialsProvider クラスでは、AWS_ACCESS_KEY_ID(または AWS_ACCESS_KEY)および AWS_SECRET_KEY(または AWS_SECRET_ACCESS_KEY)環境変数が設定されていることを前提としています。ファクトリに必要な認証情報の提供方法の詳細については、AWS SDK for Java API Reference の「AWSCredentialsProvider」と AWS SDK for Java Developer Guide の「開発用の AWS 認証情報とリージョンのセットアップ」を参照してください。デフォルトでは、AWS SDK は任意のオペレーションでサーバーからデータを受信するまで最大 50 秒待機します。GetActivityTask オペレーションは、次に使用可能なタスクまで最大 60 秒待機するロングポーリングオペレーションです。SocketTimeoutException エラーを受け取らないようにするには、SocketTimeout を 70 秒に設定します。

3. GetActivityTaskRequest().withActivityArn() コンストラクタのパラメータリストで、ACTIVITY_ARN 値を、以前に作成したアクティビティタスク (p. 33)の ARN に置き換えます。

ステップ 4: 実行を開始するステートマシンの実行を開始すると、ワーカーがアクティビティの Step Functions をポーリングして、その作業を実行し (指定した入力を使用)、その結果を返します。

1. [ActivityStateMachine] ページで、[Start execution (実行の開始)] を選択します。

[New execution (新しい実行)] ページが表示されます。2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. 実行入力領域で、サンプルデータを以下で置き換えます。

36

Page 44: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 5: ワーカーを実行して停止する

{ "who" : "AWS Step Functions"}

4. [Start Execution] を選択します。

ステートマシンの新しい実行が開始され、実行中の実行が表示されている新しいページが表示されます。

5. [Execution Details] セクションで、[Info] タブを選択して [Execution Status] および [Started] と[Closed] のタイムスタンプを確認します。

6. [Execution Details] (実行の詳細) セクションで、[Output] (出力) セクションを展開して、ワークフローの出力を表示します。

ステップ 5: ワーカーを実行して停止するワーカーにアクティビティのステートマシンをポーリングさせるには、ワーカーを実行する必要があります。

1. コマンドラインで、GreeterActivities.java を作成したディレクトリに移動します。2. AWS SDK を使用するには、lib と third-party ディレクトリの完全パスをビルドファイルの依存

関係と、Java CLASSPATH に追加します。詳細については、AWS SDK for Java Developer Guideの「SDK をダウンロードして展開する」を参照してください。

3. ファイルをコンパイルします。

$ javac GreeterActivities.java

4. ファイルを実行します。

$ java GreeterActivities

5. Step Functions コンソールで、[実行の詳細] ページに移動します。6. 実行が完了したら、[Output] を選択して実行の結果を確認します。7. ワーカーを停止します。

Step Functions ステートマシンを使用してエラー条件を処理する

このチュートリアルでは、Catch フィールドを使用する AWS Step Functions ステートマシンを作成します。Catch は、AWS Lambda 関数を使用して、エラーメッセージのタイプに基づいた条件付きロジックに従って応答します。これは、関数エラー処理と呼ばれるテクニックです。

詳細については、AWS Lambda Developer Guideの「関数エラーの処理」を参照してください。Note

タイムアウトで Retry を使用して再試行するステートマシンや、Catch を使用してエラーやタイムアウトが発生したときに特定の状態に移行するステートマシンを作成することもできます。これらのエラー処理方法の例については、「Retry の使用例と Catch の使用例 (p. 140)」を参照してください。

トピック• ステップ 1: Lambda 用の IAM ロールを作成する (p. 38)

37

Page 45: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 1: Lambda 用の IAM ロールを作成する

• ステップ 2: 失敗する Lambda 関数を作成する (p. 38)• ステップ 3: Lambda 関数をテストする (p. 39)• ステップ 4: Catch フィールドを使用するステートマシンを作成する (p. 39)• ステップ 5: 新しい実行を開始する (p. 41)

ステップ 1: Lambda 用の IAM ロールを作成するAWS Lambda と AWS Step Functions のいずれも、コードを実行して AWS リソース (Amazon S3 バケットに保存されているデータなど) にアクセスできます。セキュリティを維持するために、これらのリソースへのアクセスを Lambda および Step Functions に付与する必要があります。

Lambda では、Lambda 関数を作成する際に AWS Identity and Access Management (IAM) ロールを割り当てる必要があります。これは、ステートマシンを作成する際に Step Functions に IAM ロールを割り当てる必要があるのと同じ方法です。

1. IAM コンソールにサインインして、[ロール]、[ロールの作成] の順に選択します。2. [信頼されたエンティティの種類を選択] ページの [AWS のサービス] で、リストから [Lambda] を選択

し、[Next: Permissions (次へ: アクセス許可)] を選択します。

Note

ロールは、Lambda にロールの使用を許可する信頼関係によって自動的に提供されます。3. [Attach permissions policy (アクセス許可ポリシーをアタッチする)] ページで、[Next: Review (次へ: レ

ビュー)] を選択します。4. [Review (レビュー)] ページで、[ロール名] に MyLambdaRole と入力し、[ロールの作成] を選択しま

す。

ロールのリストで、IAM ロールが表示されます。

ステップ 2: 失敗する Lambda 関数を作成するLambda 関数を使用してエラー条件をシミュレートします。

Important

Lambda 関数が、ステートマシンと同じ AWS アカウントと AWS リージョンにあることを確認します。

1. AWS Lambda コンソール (https://console.aws.amazon.com/lambda/) を開きます。

[Create a function] を選択します。2. [Blueprints] セクションで、フィルターに「step-functions」と入力し、[step-functions-error] 設計

図を選択します。3. [Basic information] セクションで、Lambda 関数を構成します。

a. [Name (名前)] に「FailFunction」と入力します。b. [Role] で、[Choose an existing role] を選択します。c. [Existing role (既存のロール)] で、前に作成した Lambda ロール (p. 38)を選択します。

Note

作成した IAM ロールがリストに表示されない場合は、そのロールが Lambda に伝達されるまで、あと数分かかる場合があります。

4. 次のコードが [Lambda 関数コード] ペインに表示されます。

38

Page 46: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: Lambda 関数をテストする

'use strict';

exports.handler = (event, context, callback) => { function CustomError(message) { this.name = 'CustomError'; this.message = message; } CustomError.prototype = new Error();

const error = new CustomError('This is a custom error!'); callback(error);};

context オブジェクトはエラーメッセージ This is a custom error! を返します。5. [Create function] を選択します。

次の例に示すように、Lambda 関数が作成されたら、ページの右上隅に表示されているその Amazonリソースネーム (ARN) を記録します。

arn:aws:lambda:us-east-1:123456789012:function:FailFunction

ステップ 3: Lambda 関数をテストするLambda 関数をテストしてオペレーションを確認します。

1. [FailFunction] ページで、[Test] を選択します。2. [Configure test event (テストイベントの設定)] ダイアログボックスで、[Event name (イベント名)] に

「FailFunction」と入力し、[Create (作成)] を選択します。3. [FailFunction] ページで、Lambda 関数の [Test] を実行します。

テストの結果 (シミュレートしたエラー) がページの下部に表示されます。

ステップ 4: Catch フィールドを使用するステートマシンを作成するStep Functions コンソールにより、Task 状態で Catch フィールドを使用するステートマシンを作成します。Task ステートに Lambda 関数への参照を追加します。Lambda 関数が呼び出され、実行中に失敗します。Step Functions は、再試行間のエクスポネンシャルパックオフを使用して、関数を 2 回再試行します。

1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。2. [Create a state machine (ステートマシンの作成)] ページで、[テンプレート]、[Catch failure (Catch の

失敗)] の順に選択します。

3. [タイプ] で、[標準] を選択します。[ステートマシン名] に、たとえば「Catchfailure」と入力します。

39

Page 47: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 4: Catch フィールドを使用するステートマシンを作成する

Note

ステートマシン、実行、およびアクティビティ名の長さは 1~80 文字で、アカウントとAWS リージョンに対して一意である必要があります。また、次の文字を含めることはできません。

• 空白• ワイルドカード文字 (? *)• 括弧 (< > { } [ ])• 特殊文字 (: ; , \ | ^ ~ $ # % & ` ")• 制御文字 (\\u0000 - \\u001f or \\u007f - \\u009f)

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

4. 次の例に示すように、[Code (コード)] ペインで、Resource フィールドに前に作成した Lambda 関数 (p. 38)の ARN を追加します。

{ "Comment": "A Catch example of the Amazon States Language using an AWS Lambda function", "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction", "Catch": [ { "ErrorEquals": ["CustomError"], "Next": "CustomErrorFallback" }, { "ErrorEquals": ["States.TaskFailed"], "Next": "ReservedTypeFallback" }, { "ErrorEquals": ["States.ALL"], "Next": "CatchAllFallback" } ], "End": true }, "CustomErrorFallback": { "Type": "Pass", "Result": "This is a fallback from a custom Lambda function exception", "End": true }, "ReservedTypeFallback": { "Type": "Pass", "Result": "This is a fallback from a reserved error code", "End": true }, "CatchAllFallback": { "Type": "Pass", "Result": "This is a fallback from any error code", "End": true } }}

40

Page 48: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 5: 新しい実行を開始する

これは、Amazon ステートメント言語 を使用したステートマシンの説明です。CreateAccount という名前の単一の Task 状態を定義します。詳細については、「State Machine Structure (p. 92)」を参照してください。

Retry フィールドの構文の詳細については、「Retry の使用例と Catch の使用例 (p. 140)」を参照してください。

Note

Lambda で処理されないエラーは、エラー出力で Lambda.Unknown と表示されます。このようなエラーには、メモリ不足や関数タイムアウトが含まれます。これらのエラーを処理するには、Lambda.Unknown、States.ALL、または States.TaskFailed で一致できます。Lambda での呼び出しが最大数に達すると、Lambda.TooManyRequestsExceptionというエラーになります。Lambda の Handled および Unhandled エラーの詳細については、AWS Lambda Developer Guideの「FunctionError」を参照してください。

5. [Visual Workflow] のグラフを使用して、Amazon ステートメント言語 コードでステートマシンが正しく記述されていることを確認します。

グラフが表示されない場合は、[Visual Workflow] ペインの を選択します。6. [Next] を選択します。7. IAM ロールを作成または入力します。

• Step Functions の IAM ロールを作成するには、[自分用の IAM ロールを作成する] を選択し、[名前]にロール名を入力します。

• ステートマシンの正しいアクセス許可を使用して IAM ロールをすでに作成済みである (p. 259)場合は、[Choose an existing IAM role (既存の IAM ロールを選択する)] を選択します。リストからロールを選択するか、ロールの ARN を指定します。

Note

Step Functions によって作成された IAM ロールを削除すると、Step Functions は後で再作成することはできません。同様に、ロールを変更すると (たとえば、IAM ポリシーのプリンシパルから Step Functions を削除するなど)、後で Step Functions でそれを元の設定に復元することはできません。

8. [Create state machine (ステートマシンの作成)] をクリックします。

ステップ 5: 新しい実行を開始するステートマシンを作成した後、実行を開始できます。

41

Page 49: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 5: 新しい実行を開始する

1. [CatchStateMachine] ページで、[New execution (新しい実行)] を選択します。

[New execution (新しい実行)] ページが表示されます。2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. [Start Execution] を選択します。

ステートマシンの新しい実行が開始され、実行中の実行が表示されている新しいページが表示されます。

4. [Execution Details] (実行の詳細) セクションで、[Output] (出力) セクションを展開して、ワークフローの出力を表示します。

5. カスタムエラーメッセージを表示するには、[Visual workflow] (ビジュアルワークフロー) で[CreateAccount] を選択して、[Output] (出力) セクションを展開します。

Note

状態入力とエラーを保持するには、ResultPath を使用します。「ResultPath を使用して、エラーと入力の両方を Catch に含める (p. 129)」を参照してください。

42

Page 50: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドCloudWatch イベント を使用して定期的にステートマシンの実行を開始する

CloudWatch イベント を使用して定期的にステートマシンの実行を開始する

AWS Step Functions ステートマシンは、イベントパターンに応じて、または Amazon CloudWatch Eventsを使用してスケジュールに従って実行できます。このチュートリアルでは、5 分ごとにステートマシンの実行を開始する CloudWatch イベント ルールのターゲットとしてステートマシンを設定する方法について説明します。

PutTarget Amazon CloudWatch Events API アクションを使用して Step Functions ステートマシンをターゲットとして設定する方法の詳細については、「Add a Step Functions state machine as a target」を参照してください。

トピック• ステップ 1: ステートマシンを作成する (p. 43)• ステップ 2: CloudWatch イベント ルールを作成する (p. 43)

ステップ 1: ステートマシンを作成するCloudWatch イベント ターゲットを設定する前に、ステートマシンを作成する必要があります。

• 基本的なステートマシンを作成するには、入門 (p. 14)チュートリアルを使用します。• 既にステートマシンをお持ちの場合は、次のステップに進みます。

ステップ 2: CloudWatch イベント ルールを作成するステートマシンを作成した後、CloudWatch イベント ルールを作成できます。

1. CloudWatch イベントコンソールに移動し、[イベント] を選択して [ルールの作成] を選択します。

[Step 1: Create rule] ページが表示されます。2. [Event source (イベントソース)] セクションで、[Schedule (スケジュール)] を選択し、[Fixed rate of

(一定の速度)] に「5」と入力します。3. [ターゲット] セクションで、[ターゲットの追加] を選択し、リストから [Step Functions ステートマシ

ン] を選択します。4. CloudWatch イベント は、以下のイベントの実行に必要な IAM ロールを作成できます。

• 自動的に IAM ロールを作成するには、[この特定のリソースに対して新しいロールを作成する] を選択します。

• 以前に作成した IAM ロールを使用するには、[Use existing role (既存のロールを使用)] を選択します。

5. [Configure details] を選択します。

[Step 2: Configure rule details] ページが表示されます。6. [Name] にルールの名前 (statemachine-event など) を入力し、[State] で [Enabled] を選択してか

ら、[Create rule] を選択します。

ステートマシンの新しい実行が 5 分ごとに開始されます。

43

Page 51: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon S3 イベント発生時にステートマシンの実行を開始する

Amazon S3 イベント発生時にステートマシンの実行を開始する

Amazon CloudWatch Events を使用して、イベント発生時またはスケジュールに従って AWS StepFunctions ステートマシンを実行できます。

このチュートリアルでは、CloudWatch イベント ルールのターゲットとしてステートマシンを設定する方法を説明します。ファイルが Amazon S3 バケットに追加されると実行が開始されます。

実際のアプリケーションでは、バケットに追加したファイルに対してオペレーションを時刻するステートマシンを起動できます。イメージやビデオファイルに対するサムネイルの作成や Amazon Rekognition 分析の実行などです。

このチュートリアルでは、Amazon Simple Storage Service (Amazon S3) バケットにファイルを追加することで、シンプルな Helloworld ステートマシンの実行を開始します。次に、その実行のサンプル入力を確認して、AWS CloudTrail からの入力にどのような情報が含まれているかを確認します。

トピック• 前提条件: ステートマシンを作成する (p. 44)• ステップ 1: Amazon S3 にバケットを作成する (p. 44)• ステップ 2: AWS CloudTrail で証跡を作成する (p. 44)• ステップ 3: CloudWatch イベント ルールを作成する (p. 45)• ステップ 4 : CloudWatch ルールをテストする (p. 47)• 実行入力の例 (p. 47)

前提条件: ステートマシンを作成するCloudWatch イベント ターゲットを設定する前に、ステートマシンを作成する必要があります。

• 基本的なステートマシンを作成するには、入門 (p. 14)チュートリアルを使用します。• 既に Helloworld ステートマシンがある場合は、次のステップに進みます。

ステップ 1: Amazon S3 にバケットを作成するHelloworld ステートマシンを用意した後は、Amazon S3 バケットが必要です。このチュートリアルのステップ 3 で、バケットにファイルが追加されると CloudWatch イベント によってステートマシンの実行がトリガーされるようにルールを設定します。

1. Amazon S3 コンソールに移動し、[バケットの作成] を選択します。2. [バケット名] を入力します (例: username-sfn-tutorial)。

Note

バケット名は必ず、Amazon S3 のすべての AWS リージョン内の既存バケット名の中で一意になるようにします。この名前を一意にするには、自分のユユユユユを使用します。すべてのリソースは同じ AWS リージョン内に作成する必要があります。

3. [作成] を選択します。

ステップ 2: AWS CloudTrail で証跡を作成するAmazon S3 バケットを作成したら、CloudTrail に証跡を作成します。

44

Page 52: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: CloudWatch イベント ルールを作成する

Amazon S3 の API イベントが CloudWatch イベント のルールを満たすには、これらのイベントを受信するように CloudTrail の証跡を設定する必要があります。

1. AWS CloudTrail コンソールに移動して、[証跡の表示]、[証跡の作成] の順に選択します。2. [証跡名] に、「S3Event」と入力します。3. [S3] タブで、[S3 バケットの追加] を選択します。4. [バケット名] に、作成しておいた Amazon S3 バケットの名前 (username-sfn-tutorial) を入力し

ます (「ステップ 1: Amazon S3 にバケットを作成する (p. 44)」)。5. [保存場所] で、[新しい S3 バケットを作成しますか] の横の [はい] を選択します。6. [S3 バケット] に、先に作成した Amazon S3 バケットのアクションに関する情報を保存する新しいバ

ケットの名前を入力します。

Note

このバケット名は、すべての Amazon S3 で一意である必要があります。名前を一意にするには、ユユユユユをバケット名に含めます (username-sfn-tutorial-storage)。

7. [作成] を選択します。

ステップ 3: CloudWatch イベント ルールを作成するステートマシンが用意され、AWS CloudTrail に Amazon S3 バケットと証跡を作成したら、AmazonCloudWatch Events ルールを作成します。

Note

Amazon S3 バケットと同じ AWS リージョンに CloudWatch イベント を設定する必要があります。

ルールを作成するには1. CloudWatch イベントコンソールに移動し、[イベント] を選択して [ルールの作成] を選択します。

[Step 1: Create rule] ページが表示されます。2. [イベントソース] で、[イベントパターン] を選択します。3. [サービス名] で、[Simple Storage Service (S3)] を選択します。4. [イベントタイプ] で、[オブジェクトレベルのオペレーション] を選択します。5. [特定のオペレーション] を選択したら、[PutObject] を選択します。

Note

オブジェクトのサイズが PutObject オペレーションで使用されているマルチパートしきい値より大きい場合、ログに記録される AWS CloudTrail API は PutObject ではなくCompleteMultipartUpload になります。AWS CloudTrail User Guideの「マルチパートアップロードの概要」を参照してください。

6. [特定のバケット (名前別)] を選択し、ステップ 1 で作成したバケット名 (username-sfn-tutorial)を入力します。

[イベントソース] ページに次のように表示されます。

45

Page 53: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: CloudWatch イベント ルールを作成する

ターゲットを作成するには1. [ターゲット] セクションで、[ターゲットの追加] を選択します。2. リストから [Step Functions ステートマシン] を選択し、[ステートマシン] のリストでステップ 1 のス

テートマシン (Helloworld) を選択します。3. CloudWatch イベント は、イベントの実行に必要な IAM ロールを作成できます。

• 自動的に IAM ロールを作成するには、[この特定のリソースに対して新しいロールを作成する] を選択します。

• 以前に作成した IAM ロールを使用するには、[既存のルールの使用] を選択します。4. [Configure details] を選択します。

[Step 2: Configure rule details] ページが表示されます。5. [Name] にルールの名前 (S3StepFunctions など) を入力し、[State] で [Enabled] を選択してから、

[Create rule] を選択します。

[ルールの詳細を設定する] セクションは次のようになります。

46

Page 54: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 4 : CloudWatch ルールをテストする

ルールが作成され、[Rules] ページが表示されてすべての CloudWatch イベント ルールがリストされます。

ステップ 4 : CloudWatch ルールをテストするすべて準備ができたので、Amazon S3 バケットへのファイルの追加をテストして、ステートマシンが実行された結果の入力を確認します。

1. ファイルを Amazon S3 バケットに追加します。

Amazon S3 コンソールに移動して作成したバケット (username-sfn-tutorial) を選択し、[アップロード] を選択します。

2. ファイル (次の例の test.png) を追加し、[アップロード] を選択します。

これによりステートマシンの実行が起動され、AWS CloudTrail からの情報が入力として渡されます。3. ステートマシンの実行を確認します。

Step Functions コンソールに移動して、CloudWatch イベント ルールで使用されているステートマシン (Helloworld) を選択します。

4. そのステートマシンの細心の実行を選択して、[入力] セクションを展開します。

この入力には、バケット名やオブジェクト名などの情報が含まれています。実際のユースケースでは、この入力を使用してステートマシンがそのオブジェクトに対してアクションを実行できます。

実行入力の例以下の例に示しているのは、ステートマシン実行への一般的な入力です。

{ "version": "0", "id": "8d6f9246-b781-44f8-a026-f1c1ab2c61f0", "detail-type": "AWS API Call via CloudTrail", "source": "aws.s3", "account": "123456789012", "time": "2018-09-12T00:25:10Z",

47

Page 55: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド実行入力の例

"region": "us-east-2", "resources": [], "detail": { "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::123456789012:user/username", "accountId": "123456789012", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "username", "sessionContext": { "attributes": { "creationDate": "2018-09-11T20:10:38Z", "mfaAuthenticated": "true" } }, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2018-09-12T00:25:10Z", "eventSource": "s3.amazonaws.com", "eventName": "PutObject", "awsRegion": "us-east-2", "sourceIPAddress": "203.0.113.34", "userAgent": "signin.amazonaws.com", "requestParameters": { "X-Amz-Date": "20180912T002509Z", "bucketName": "username-sfn-tutorial", "X-Amz-Algorithm": "AWS4-HMAC-SHA256", "x-amz-acl": "private", "X-Amz-SignedHeaders": "content-type;host;x-amz-acl;x-amz-storage-class", "X-Amz-Expires": "300", "key": "test.png", "x-amz-storage-class": "STANDARD" }, "responseElements": null, "additionalEventData": { "x-amz-id-2": "IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km" }, "requestID": "79104EXAMPLEB723", "eventID": "cdc4b7ed-e171-4cef-975a-ad829d4123e8", "readOnly": false, "resources": [ { "type": "AWS::S3::Object", "ARN": "arn:aws:s3:::username-sfn-tutorial-2/test.png" }, { "accountId": "123456789012", "type": "AWS::S3::Bucket", "ARN": "arn:aws:s3:::username-sfn-tutorial" } ], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }}

48

Page 56: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAPI Gateway を使用して Step Functions API を作成する

API Gateway を使用して Step Functions API を作成する

Amazon API Gateway を使用して、お客様の AWS Step Functions API を API Gateway API のメソッドに関連付けることができます。HTTPS リクエストが API メソッドに送信されると、API Gateway はお客様の Step Functions API アクションを呼び出します。

このチュートリアルでは、1 つのリソースと POST メソッドを使用して StartExecution API アクションとやり取りする API を作成する方法を示します。AWS Identity and Access Management (IAM) コンソールを使用して API Gateway 用のロールを作成します。次に、API Gateway コンソールを使用して APIGateway API を作成し、リソースとメソッドを作成して、メソッドを StartExecution API アクションにマッピングします。最後に、API をデプロイしてテストします。この API アクションの詳細については、AWS Step Functions API リファレンスの「StartExecution」を参照してください。

Note

Amazon API Gateway は StartExecution を呼び出して Step Functions の実行を開始できますが、結果を取得するには DescribeExecution を呼び出す必要があります。

トピック• ステップ 1: API Gateway 用の IAM ロールを作成する (p. 49)• ステップ 2: API Gateway API を作成する (p. 50)• ステップ 3: API Gateway API のテストとデプロイ (p. 52)

ステップ 1: API Gateway 用の IAM ロールを作成するAPI Gateway API を作成する前に、API Gateway に Step Functions API アクションを呼び出すアクセス許可を付与する必要があります。

1. IAM コンソールにサインインして、[ロール]、[ロールの作成] の順に選択します。2. [信頼されたエンティティの種類を選択] ページの [AWS のサービス] で、リストから [API Gateway] を

選択し、[Next: Permissions (次へ: アクセス許可)] を選択します。3. [Attached permissions policy] ページで、[Next: Review] を選択します。4. [Review (レビュー)] ページで、[ロール名] に APIGatewayToStepFunctions と入力し、[ロールの

作成] を選択します。

ロールのリストで、IAM ロールが表示されます。5. 次の例に示すように、お客様のロールの名前を選択し、[ロール ARN] をメモします。

arn:aws:iam::123456789012:role/APIGatewayToStepFunctions

IAM ロールにポリシーをアタッチするには1. [ロール] ページで、ロール (APIGatewayToStepFunctions) を検索して選択します。2. [Permissions] タブで [Attach Policy] を選択します。3. [Attach Policy] ページで AWSStepFunctionsFullAccess を検索し、ポリシーを選択して、[Attach

Policy] を選択します。

49

Page 57: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 2: API Gateway API を作成する

ステップ 2: API Gateway API を作成するIAM ロールを作成した後、カスタムの API Gateway API を作成できます。

API の作成1. Amazon API Gateway コンソールに移動し、[Get Started (使用を開始)] を選択します。2. [Create new API] ページで、[New API] を選択します。3. [Settings] セクションで、[API name (API 名)] に「StartExecutionAPI」と入力し、[Create API

(API の作成)] を選択します。

リソースを作成する1. [StartExecutionAPI] の [Resources] ページで、[Actions]、[Create Resource] の順に選択します。2. [New Child Resource] ページで、[Resource Name] に execution と入力し、[Create Resource] を選

択します。

POST メソッドの作成1. [/execution Methods] ページで、[Actions]、[Create Method] の順に選択します。2. リストから POST を選択し、チェックマークをオンにします。

メソッドの設定[/execution - POST - Setup] ページで、メソッドの統合ポイントを設定します。

1. [Integration Type] で、[AWS Service] を選択します。2. [AWS リージョン] でリストからリージョンを選択します。

Note

現在 Step Functions をサポートしているリージョンについては、「サポートされているリージョン (p. 2)」を参照してください。

3. [AWS Service] でリストから [Step Functions] を選択します。4. [HTTP Method] でリストから [POST] を選択します。

50

Page 58: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 2: API Gateway API を作成する

Note

すべての Step Functions API アクションは HTTP POST メソッドを使用します。5. [Action Type] で、[Use action name] を選択します。6. [Action (アクション)] に「StartExecution」と入力します。7. 次の例に示すように、[Execution Role (実行ロール)] に、前に作成した IAM ロールのロール

ARN (p. 49) を入力します。

arn:aws:iam::123456789012:role/APIGatewayToStepFunctions

8. [Save] を選択します。

API Gateway および Step Functions 間の視覚的なマッピングは [/execution - POST - MethodExecution] ページに表示されます。

51

Page 59: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: API Gateway API のテストとデプロイ

ステップ 3: API Gateway API のテストとデプロイAPI を作成したら、テストしてデプロイします。

API Gateway と Step Functions 間の通信をテストする1. [/execution - POST - Method Execution] ページで、[Test] を選択します。2. [/execution - POST - Method Test] ページで、次のリクエストパラメータを、既存のステートマシン

(または新しいステートマシンを作成 (p. 14)) の ARN を使用して [Request Body] セクションにコピーし、[Test] を選択します。

{ "input": "{}", "name": "MyExecution", "stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld"}

Note

詳細については、AWS Step Functions API リファレンスの「StartExecution」の「リクエストの構文」を参照してください。ステートマシンの ARN を API Gateway 呼び出しの本文に含めない場合は、次の例に示すように、本文マッピングテンプレートを設定できます。

{ "input": "$util.escapeJavaScript($input.json('$'))", "stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld"}

このアプローチを使用することで、開発ステージ (たとえば、dev、test、prod) に基づいて異なるステートマシンを使用できます。更新をリリースするには、次の例に示すように、ステージ変数を変更するだけです。

{ "input": "$util.escapeJavaScript($input.json('$'))", "stateMachineArn": "$util.escapeJavaScript($stageVariables.get(arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld))"}

3. 実行が開始され、実行 ARN とそのエポック日が [Response Body] の下に表示されます。

{ "executionArn": "arn:aws:states:us-east-1:123456789012:execution:HelloWorld:MyExecution", "startDate": 1486768956.878}

Note

AWS Step Functions コンソールでステートマシンを選択することで、実行を確認できます。

52

Page 60: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドLambda を使用してループを反復する

API をデプロイする1. [StartExecutionAPI] の [Resources] ページで、[Actions]、[Deploy API] の順に選択します。2. [Deploy API (API のデプロイ)] ダイアログボックスで、[Deployment stage (デプロイメントステージ)]

リストから [New Stage (新しいステージ)] を選択し、[Stage name (ステージ名)] に alpha と入力して、[デプロイ] を選択します。

デプロイをテストする1. [StartExecutionAPI] の [Stages] ページで、[alpha]、[/]、[/execution]、[POST] を展開します。2. [alpha - POST - /execution] ページで、次の例に示すように、[Invoke URL (呼び出し URL)] をメモしま

す。

https://a1b2c3d4e5.execute-api.us-east-1.amazonaws.com/alpha/execution

3. コマンドラインから、ステートマシンの ARN を使用して curl コマンドを実行し、次の例に示すようにデプロイの URL を呼び出します。

curl -X POST -d '{"input": "{}","name": "MyExecution","stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld"}' https://a1b2c3d4e5.execute-api.us-east-1.amazonaws.com/alpha/execution

次の例に示すように、実行 ARN とそのエポック日付が返されます。

{"executionArn":"arn:aws:states:us-east-1:123456789012:execution:HelloWorld:MyExecution","startDate":1.486772644911E9}

Lambda を使用してループを反復するこのチュートリアルでは、ステートマシンと AWS Lambda 関数を使用してループを一定回数反復する設計パターンを実装します。

必要に応じて、この設計パターンを随時使用し、ステートマシンのループ数を追跡できます。この実装を使用すると、大規模なタスクや時間がかかる実行を小さいチャンクに分割したり、特定のイベント数の後で実行を終了させたりできます。同様の実装を使用して、時間がかかる実行を定期的に終了して再起動することで、AWS Step Functions や AWS Lambda などの AWS のサービスでサービスクォータ超過を防止できます。

開始する前に、Lambda を使用する Step Functions ステートマシンを作成する (p. 20) チュートリアルに目を通し、必要な IAM ロールが作成済みであること、Lambda と Step Functions の併用方法を理解したことを確認します。

トピック• ステップ 1: Lambda 関数を作成してカウントを反復する (p. 54)• ステップ 2: Lambda 関数をテストする (p. 55)• ステップ 3: ステートマシンを作成する (p. 55)• ステップ 4: 新しい実行を開始する (p. 59)

53

Page 61: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 1: Lambda 関数を作成してカウントを反復する

ステップ 1: Lambda 関数を作成してカウントを反復するLambda 関数を使用することで、ステートマシンでのループの反復回数を追跡できます。次の Lambda 関数は、count、index、step の入力値を受け取ります。次に、更新された index と、continue というブール値を持つこれらの値を返します。index が count 未満の場合、Lambda 関数は continue をtrue に設定します。

その後、ステートマシンは、continue が true の場合に Choice 状態を実装し、false の場合に終了します。

Lambda 関数を作成する1. Lambda コンソールにサインインし、[関数の作成] を選択します。2. [Create function (関数の作成)] セクションで、[一から作成] を選択します。3. [基本的な情報] セクションで、以下のように Lambda 関数を設定します。

a. [Function name (関数名)] に「Iterator」と入力します。b. [ランタイム] で [Node.js 12.x] を選択します。c. [Role (ロール)] で、[Use an existing role (既存のロールを使用)] を選択します。d. [既存のロール] で、「Lambda を使用する Step Functions ステートマシンを作成する (p. 20)」

チュートリアルで作成した Lambda ロールを選択します。Note

作成した IAM ロールがリストに表示されない場合は、そのロールが Lambda に伝達されるまで、あと数分かかる場合があります。

e. [Create function] を選択します。

Lambda 関数が作成されたら、以下に示すように、ページの右上隅に表示されているそのAmazon リソースネーム (ARN) を記録します。

arn:aws:lambda:us-east-1:123456789012:function:Iterator

4. Lambda 関数の以下のコードを、Lambda コンソールの [Iterator] ページの [Configuration] セクションにコピーします。

exports.iterator = function iterator (event, context, callback) { let index = event.iterator.index let step = event.iterator.step let count = event.iterator.count index += step callback(null, { index, step, count, continue: index < count })}

このコードは、count、index、step の入力値を受け入れています。index を step の値増分し、それらの値とブール値 continue を返します。index が count 未満の場合、continue の値はtrue です。

5. [Save] を選択します。

54

Page 62: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 2: Lambda 関数をテストする

ステップ 2: Lambda 関数をテストする数値を使用して Lambda 関数を実行し、関数の動作を確認します。Lambda 関数の反復を表す入力値を指定し、入力値別の出力を確認できます。

Lambda 関数をテストするには1. [Configure test event] ダイアログボックスで、[Create new test event] を選択し、[Event name] に

「TestIterator」と入力します。2. データ例を以下に置き換えます。

{ "Comment": "Test my Iterator function", "iterator": { "count": 10, "index": 5, "step": 1 }}

これらの値は、反復でステートマシンから返される値を表します。Lambda 関数はインデックスを増分し、continue を true として返します。インデックスが count 以上になると、continueを false として返します。このテストでは、インデックスは既に 5 に増分されています。結果では、index が 6 に増分され、continue が true に設定されます。

3. [作成] を選択します。4. Lambda コンソールの [Iterator] ページで、[TestIterator] が表示されていることを確認し、[Test] を

選択します。

テストの結果がページの上部に表示されます。[Details] (詳細) を選択し、結果を確認します。

{ "index": 6, "step": 1, "count": 10, "continue": true}

Note

このテストで index を 9 に設定した場合、index が 10 に増分され、continue が falseになります。

ステップ 3: ステートマシンを作成する1. Step Functions コンソールにサインインし、[ステートマシンの作成] を選択します。

Important

ステートマシンが、前に作成した Lambda 関数と同じ AWS アカウントおよびリージョンにあることを確認します。

2. [Define state machine (ステートマシンの定義)] ページで、[Author with code snippets (コードスニペットで作成)] を選択します。[タイプ] で、[標準] を選択します。[名前] に IterateCount と入力します。

55

Page 63: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: ステートマシンを作成する

Note

ステートマシン、実行、およびアクティビティ名の長さは 1~80 文字で、アカウントとAWS リージョンに対して一意である必要があります。また、次の文字を含めることはできません。

• 空白• ワイルドカード文字 (? *)• 括弧 (< > { } [ ])• 特殊文字 (: ; , \ | ^ ~ $ # % & ` ")• 制御文字 (\\u0000 - \\u001f or \\u007f - \\u009f)

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

[Next (次へ)] を選択します。3. IAM ロールを作成または入力します。

• Step Functions の IAM ロールを作成するには、[自分用の IAM ロールを作成する] を選択し、[名前]にロール名を入力します。

• ステートマシンの正しいアクセス許可を使用して IAM ロールをすでに作成済みである (p. 259)場合は、[Choose an existing IAM role (既存の IAM ロールを選択する)] を選択します。リストからロールを選択するか、ロールの ARN を指定します。

Note

Step Functions によって作成された IAM ロールを削除すると、Step Functions は後で再作成することはできません。同様に、ロールを変更すると (たとえば、IAM ポリシーのプリンシパルから Step Functions を削除するなど)、後で Step Functions でそれを元の設定に復元することはできません。

4. 次のコードは、以下の状態のステートマシンを記述します。

• ConfigureCount – count、index、step のデフォルト値を設定します。

"ConfigureCount": { "Type": "Pass", "Result": { "count": 10, "index": 0, "step": 1 }, "ResultPath": "$.iterator", "Next": "Iterator"},

• Iterator – 前に作成した Lambda 関数を参照し、ConfigureCount で設定した値を渡します。

"Iterator": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Iterate", "ResultPath": "$.iterator", "Next": "IsCountReached"},

56

Page 64: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: ステートマシンを作成する

• IsCountReached – Iterator Lambda 関数から返されるブール値に応じて、作業例を再実行するか、Done に移行するかに分岐する Choice 状態。

"IsCountReached": { "Type": "Choice", "Choices": [ { "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" } ], "Default": "Done"},

• ExampleWork – 実行で達成する作業のスタブ。この例では pass 状態です。実際の実装では、これは task 状態になります。「タスク (p. 94)」を参照してください。

• Done – 実行の最終状態。

[Code (コード)] ペインで、前に作成した Lambda 関数 (p. 54)の Amazon リソースネーム (ARN) を使用して以下のステートマシンの定義を追加します。

{ "Comment": "Iterator State Machine Example", "StartAt": "ConfigureCount", "States": { "ConfigureCount": { "Type": "Pass", "Result": { "count": 10, "index": 0, "step": 1 }, "ResultPath": "$.iterator", "Next": "Iterator" }, "Iterator": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Iterate", "ResultPath": "$.iterator", "Next": "IsCountReached" }, "IsCountReached": { "Type": "Choice", "Choices": [ { "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" } ], "Default": "Done" }, "ExampleWork": { "Comment": "Your application logic, to run a specific number of times", "Type": "Pass", "Result": { "success": true }, "ResultPath": "$.result", "Next": "Iterator"

57

Page 65: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: ステートマシンを作成する

}, "Done": { "Type": "Pass", "End": true } }}

上の Iterator 状態の ARN を更新し、前に作成した Lambda を参照するようにします。Amazon ステートメント言語 の詳細については、「State Machine Structure (p. 92)」を参照してください。

5. [Visual Workflow] のグラフを使用して、Amazon ステートメント言語 コードでステートマシンが正しく記述されていることを確認します。

次の図は、上記のステートマシンコードで表現されたロジックを示しています。

グラフが表示されない場合は、[Visual Workflow] ペインの を選択します。6. [次へ] を選択します。7. IAM ロールを作成または入力します。

• Step Functions の IAM ロールを作成するには、[自分用の IAM ロールを作成する] を選択し、[名前]にロール名を入力します。

• ステートマシンの正しいアクセス許可を使用して IAM ロールをすでに作成済みである (p. 259)場合は、[Choose an existing IAM role (既存の IAM ロールを選択する)] を選択します。リストからロールを選択するか、ロールの ARN を指定します。

Note

Step Functions によって作成された IAM ロールを削除すると、Step Functions は後で再作成することはできません。同様に、ロールを変更すると (たとえば、IAM ポリシーのプリンシパルから Step Functions を削除するなど)、後で Step Functions でそれを元の設定に復元することはできません。

8. [Create state machine (ステートマシンの作成)] をクリックします。

58

Page 66: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 4: 新しい実行を開始する

ステップ 4: 新しい実行を開始するステートマシンを作成した後、実行を開始できます。

1. [IterateCount] ページで、[New execution (新しい実行)] を選択します。2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. [Start Execution] を選択します。

ステートマシンの新しい実行が開始され、進行中の実行が表示されます。

実行は、Lambda 関数を使用してカウントを追跡しながら段階的に増分されます。反復ごとに、ステートマシンの ExampleWork 状態で参照されている作業例が実行されます。

4. (省略可能) [Execution Details] セクションで、[Info] タブを選択して [Execution Status] および[Started] と [Closed] のタイムスタンプを確認します。

5. カウントがステートマシンの ConfigureCount 状態で設定した数に到達すると、実行が反復を完了して終了します。

59

Page 67: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド新しい実行としての続行

新しい実行としての続行このチュートリアルでは、Lambda 関数を使用してステートマシンを作成する方法を示します。新しく実行を開始し、その新しい実行で進行中の作業を続行できます。

AWS Step Functions は一定の期間とステップ数のあるワークフローを実行するように設計されています。実行の期間は最大 1 年間で、そのイベント数は最大 25,000 です (「標準ワークフローのクォータ (p. 244)」を参照してください)。

ただし、現在の実行を終了させる前に、新しい実行を開始する AWS Lambda 関数を使用するステートマシンを作成できます。これにより、大きなジョブを小さなワークフローに分割するステートマシンや、無期限に実行するステートマシンを使用できます。

このチュートリアルは、Lambda を使用してループを反復する (p. 53) チュートリアルで説明した、ワークフローを変更する外部 Lambda 関数を使用する概念に基づいています。同じ Lambda 関数(Iterator) を使用して、特定の回数ループを繰り返します。また、別の Lambda 関数を作成し、新しいワークフローの実行を開始したり、新しい実行を開始するたびにカウントを減少させることができます。入力の実行回数を設定することにより、このステートマシンは終了し、指定された回数だけ実行を再開します。

60

Page 68: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド前提条件

作成するステートマシンは、次の状態を実装します。

状態 目的

ConfigureCount Pass (p. 93) 状態は、作業の反復を進める Iterator Lambda 関数で使用される、count、index、および step 値を設定します。

Iterator Task (p. 94) 状態は、Iterator Lambda 関数を参照します。

IsCountReached Iterator 関数からのブール値を使用する Choice (p. 106) 状態は、ステートマシンが作業例を続行するか、ShouldRestart Choice状態に移行するかを決定します。

ExampleWork この例では、ExampleWork は、実際の実装で作業を実行する Task 状態を表す Pass 状態です。

ShouldRestart Choice (p. 106) 状態は、1 つの実行を終了し、別の実行を開始するか、または単に終了するかを決定する executionCount 値を使用します。

Restart 新しいステートマシンの実行を開始する Lambda 関数を使用したTask (p. 94) 状態。また、Iterator 関数と同様に、この関数はカウントを減らします。この値は新しい実行の入力に渡されます。

前提条件開始する前に、Lambda を使用する Step Functions ステートマシンを作成する (p. 20) チュートリアルに目を通し、最初の IAM ロールが作成済みであること、Lambda と Step Functions の併用方法を理解したことを確認します。

61

Page 69: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 1: 反復処理 Lambda 関数を作成してカウントを反復する

トピック• ステップ 1: 反復処理 Lambda 関数を作成してカウントを反復する (p. 62)• ステップ 2: 新しい Step Functions 実行を開始する Lambda 関数を作成する (p. 64)• ステップ 3: ステートマシンを作成する (p. 65)• ステップ 4: IAM ポリシーを変更する (p. 67)• ステップ 5: 実行を実行する (p. 67)

ステップ 1: 反復処理 Lambda 関数を作成してカウントを反復する

Note

Lambda を使用してループを反復する (p. 53) チュートリアルを完了している場合は、この手順をスキップして、その Lambda 関数を使用することができます。

このセクションと、Lambda を使用してループを反復する (p. 53) チュートリアルでは、ステートマシン内のループの反復回数を追跡するために、カウントを追跡する Lambda 関数をどのように使用できるかを示します。

次の Lambda 関数は、count、index、step の入力値を受け取ります。これらの値を、更新されたindex と、continue というブール値を使用して返します。index が count 未満の場合、Lambda 関数は continue を true に設定します。

その後、ステートマシンは、continue が true の場合に、アプリケーションロジックを実行するChoice 状態を実装し、continue が false の場合に、ShouldRestart に移行します。

反復処理 Lambda 関数を作成する1. Lambda コンソールを開き、[関数の作成] を選択します。2. [Create function] セクションで、[Author from scratch] を選択します。3. [Author with code snippets (コードスニペットで作成)] セクションで、次のように Lambda 関数を設定

します。

a. [Name (名前)] に「Iterator」と入力します。b. [Runtime (ランタイム)] で [Node.js 10.15] を選択します。c. [Role] で、[Choose an existing role] を選択します。d. [Existing role (既存のロール)] で、「Lambda を使用する Step Functions ステートマシンを作成す

る (p. 20)」チュートリアルで作成した Lambda ロールを選択します。Note

作成した IAM ロールがリストに表示されない場合は、そのロールが Lambda に伝達されるまで、あと数分かかる場合があります。

e. [Create function] を選択します。

Lambda 関数が作成されたら、ページの右上隅に表示されているその Amazon リソースネーム(ARN) を記録します。例:

arn:aws:lambda:us-east-1:123456789012:function:Iterator

4. Lambda 関数の以下のコードを、Lambda コンソールの [Iterator] ページの [Configuration] セクションにコピーします。

exports.iterator = function iterator (event, context, callback) {

62

Page 70: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 1: 反復処理 Lambda 関数を作成してカウントを反復する

let index = event.iterator.index let step = event.iterator.step let count = event.iterator.count index += step callback(null, { index, step, count, continue: index < count })}

このコードは、count、index、step の入力値を受け入れています。index を step の値増分し、それらの値とブール値 continue を返します。index が count 未満の場合、continue の値はtrue です。

5. [Save] を選択します。

反復処理 Lambda 関数をテストするIterate 関数の動作を確認するには、関数を数値で実行します。Lambda 関数の反復を表す入力値を指定し、入力値別の出力を確認できます。

Lambda 関数をテストするには

1. [Configure test event] ダイアログボックスで、[Create new test event] を選択し、[Event name] に「TestIterator」と入力します。

2. データ例を以下に置き換えます。

{ "Comment": "Test my Iterator function", "iterator": { "count": 10, "index": 5, "step": 1 }}

これらの値は、反復でステートマシンから返される値を表します。Lambda 関数はインデックスを増分し、continue を true として返します。インデックスが count 以上になると、continueを false として返します。このテストでは、インデックスは既に 5 に増分されています。結果では、index が 6 に増分され、continue が true に設定されます。

3. [作成] を選択します。4. Lambda コンソールの [Iterator] ページで、[TestIterator] が表示されていることを確認し、[Test] を

選択します。

テストの結果がページの上部に表示されます。[Details] (詳細) を選択し、結果を確認します。

{ "index": 6, "step": 1, "count": 10, "continue": true}

63

Page 71: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 2: 新しい Step Functions 実行を開始する Lambda 関数を作成する

Note

このテストで index を 9 に設定した場合、index が 10 に増分され、continue が falseになります。

ステップ 2: 新しい Step Functions 実行を開始するLambda 関数を作成する1. Lambda コンソールを開き、[関数の作成] を選択します。2. [Author with code snippets (コードスニペットで作成)] セクションで、次のように Lambda 関数を設定

します。

a. [Name (名前)] に「Restart」と入力します。b. [Runtime (ランタイム)] で [Node.js 10.15] を選択します。c. [Role] で、[Choose an existing role] を選択します。d. [Existing role (既存のロール)] で、前に作成した IAM ポリシーを含むロールを選択します。e. [Create function] を選択します。

Lambda 関数が作成されたら、ページの右上隅に表示されているその Amazon リソースネーム(ARN) を記録します。例:

arn:aws:lambda:us-east-1:123456789012:function:Restart

3. Lambda 関数の以下のコードを、Lambda コンソールの [Restart] ページの [Configuration] セクションにコピーします。

次のコードは、実行回数を減らし、減少した値を含め、ステートマシンの新しい実行を開始します。

var aws = require('aws-sdk');var sfn = new aws.StepFunctions();

exports.restart = function(event, context, callback) {

let StateMachineArn = event.restart.StateMachineArn; event.restart.executionCount -= 1; event = JSON.stringify(event);

let params = { input: event, stateMachineArn: StateMachineArn };

sfn.startExecution(params, function(err, data) { if (err) callback(err); else callback(null,event); });

}

4. [Save] を選択します。

64

Page 72: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: ステートマシンを作成する

ステップ 3: ステートマシンを作成するこれで 2 つの Lambda 関数を作成したので、ステートマシンを作成します。このステートマシンで、ShouldRestart および Restart 状態は、複数の実行で作業を分割する方法を示します。

Example ShouldRestart Choice 状態

このステートマシンの抜粋は、ShouldRestart Choice (p. 106) 状態を示しています。この状態は、実行を再開すべきかどうかを決定します。

"ShouldRestart": {"Type": "Choice","Choices": [ { "Variable": "$.restart.executionCount", "NumericGreaterThan": 1, "Next": "Restart" }],

この $.restart.executionCount 値は、最初の実行の入力に含まれています。これは、Restart 関数が呼び出されるたびに 1 ずつ減らされ、それ以降の実行ごとに、入力に配置されます。

Example Restart タスク状態

このステートマシンの抜粋は、Restart Task (p. 94) 状態を示しています。この状態では、前のステップで作成した Lambda 関数を使用して、実行を再開し、カウントを減らして、開始する残りの実行数を追跡します。

"Restart": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Restart", "Next": "Done"},

1. Step Functions コンソールで、[Create a state machine (ステートマシンの作成)] を選択します。2. [コードスニペットで作成] を選択します。[タイプ] で [標準] を選択し、ステートマシン名として

ContinueAsNew と入力します。3. 次の内容を Code ペインに入力します。

Example ContinueAsNew ステートマシン

{ "Comment": "Continue-as-new State Machine Example", "StartAt": "ConfigureCount", "States": { "ConfigureCount": { "Type": "Pass", "Result": { "count": 100, "index": -1, "step": 1 }, "ResultPath": "$.iterator", "Next": "Iterator" }, "Iterator": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Iterator", "ResultPath": "$.iterator",

65

Page 73: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: ステートマシンを作成する

"Next": "IsCountReached" }, "IsCountReached": { "Type": "Choice", "Choices": [ { "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" } ], "Default": "ShouldRestart" }, "ExampleWork": { "Comment": "Your application logic, to run a specific number of times", "Type": "Pass", "Result": { "success": true }, "ResultPath": "$.result", "Next": "Iterator" }, "ShouldRestart": { "Type": "Choice", "Choices": [ { "Variable": "$.restart.executionCount", "NumericGreaterThan": 0, "Next": "Restart" } ], "Default": "Done" }, "Restart": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Restart", "Next": "Done" }, "Done": { "Type": "Pass", "End": true } }}

4. 以前に作成したそれぞれの Lambda 関数を参照する Restart および Iterator 状態の Resource 文字列を更新します。

5. [次へ] を選択します。6. IAM ロールを作成または入力します。

• Step Functions の IAM ロールを作成するには、[自分用の IAM ロールを作成する] を選択し、[名前]にロール名を入力します。

• ステートマシンの正しいアクセス許可を使用して IAM ロールをすでに作成済みである (p. 259)場合は、[Choose an existing IAM role (既存の IAM ロールを選択する)] を選択します。リストからロールを選択するか、ロールの ARN を指定します。

Note

Step Functions によって作成された IAM ロールを削除すると、Step Functions は後で再作成することはできません。同様に、ロールを変更すると (たとえば、IAM ポリシーのプリンシパルから Step Functions を削除するなど)、後で Step Functions でそれを元の設定に復元することはできません。

66

Page 74: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 4: IAM ポリシーを変更する

7. [Create state machine (ステートマシンの作成)] をクリックします。

Note

このステートマシンの Amazon リソースネーム (ARN) を保存します。

ステップ 4: IAM ポリシーを変更するLambda 関数に新しい Step Functions 実行を開始する権限が確実にあるようにするには、RestartLambda 関数で使用する IAM ロールにインラインポリシーをアタッチします。詳細については、IAM ユーザーガイドの「インラインポリシーの埋め込み」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": "*" } ]}

Note

前の例の "Resource": "*" 行を更新して、ContinueAsNew ステートマシンの ARN を参照することができます。これは、特定のステートマシンの実行のみを開始できるようにポリシーを制限します。

ステップ 5: 実行を実行する実行を開始するには、ステートマシンの ARN と、新しい実行を開始する回数 executionCount を含む入力を指定します。

1. [ContinueAsNew] ページで、[New execution (新しい実行)] を選択します。2. [New execution (新しい実行)] ページの、[Input (入力)] セクションで、実行名として Test1 と入力し

ます。次に、[Input] (入力) に次のように入力します。

{ "restart": { "StateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:ContinueAsNew", "executionCount": 4 }}

3. ContinueAsNew ステートマシンの ARN を使用して、StateMachineArn フィールドを更新します。

4. [Start Execution] を選択します。

[Visual Workflow (ビジュアルワークフロー)] グラフに、4 回のうちの最初の実行が表示されます。完了する前に、Restart 状態がそのまま渡され、新しい実行を開始します。

67

Page 75: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 5: 実行を実行する

この実行が完了すると、実行中の次の実行を確認できます。上部にある [ContinueAsNew] リンクを選択して、実行のリストを確認します。最近閉じた実行と、Restart Lambda 関数が開始した実行中の実行の両方が表示されるはずです。

すべての実行が完了すると、リストに 4 つの成功した実行が表示されます。最初の実行が開始されると、選択した名前が表示され、その後の実行には生成された名前が付けられます。

68

Page 76: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドコードスニペットの使用

コードスニペットを使用して Amazon SNS メッセージを送信する状態を作成する

AWS Step Functions は、Amazon Simple Notification Service (Amazon SNS) などの特定の AWS サービスと統合されています。このチュートリアルでは、Amazon SNS を使用してテキストメッセージを送信するコードスニペットを生成します。ステートマシン定義から Amazon SNS に直接パラメータを渡します。

Step Functions が Amazon ステートメント言語 から直接 AWS サービスに統合される方法の詳細については、以下を参照してください。

• サービス統合 (p. 143)• コードスニペット (p. 151)• サービス API にパラメータを渡す (p. 150)

トピック• ステップ 1: コードスニペットの生成 (p. 69)• ステップ 2: ステートマシン定義を更新する (p. 71)• ステップ 3: 実行を開始する (p. 72)

ステップ 1: コードスニペットの生成コードスニペットを生成するには、ステートマシン定義の編集から開始する必要があります。

1. AWS マネジメントコンソールにサインインし、https://console.aws.amazon.com/states/home?#/statemachines/create で Step Functions コンソールを開きます。

2. [コードスニペットで作成] を選択します。[タイプ] で [標準] を選択し、ステートマシンの名前を入力します。

デフォルトの HelloWorld ステートマシンが [State machine definition (ステートマシン定義)] に表示されます。

3. [Generate Code Snippet (コードスニペットの生成)] で、[Amazon SNS:Publish a message (AmazonSNS: メッセージの公開)] を選択します。

69

Page 77: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 1: コードスニペットの生成

[Generate SNS Publish task state (SNS Publish タスク状態を生成する)] ウィンドウが表示されます。4. [Generate SNS Publish task state (SNS Publish タスク状態の生成)] ページの [Destination (宛先)] で、

[Enter phone number (電話番号を入力)] を選択して携帯電話番号を入力します。

[+][country code][subscriber number including area code] の形式を使用します。例:+12065550123。

5. [Message (メッセージ)] で、[Enter message (メッセージを入力)] を選択し、SMS メッセージとして送信するテキストを入力します。

Note

[Specify message at runtime with state input (実行時に状態の入力を使用してメッセージを指定する)] を選択することもできます。このオプションを使用すると、参照パスを使用して、ステートマシン実行の入力からメッセージを選択できます。詳細については、以下を参照してください。

• Step Functions の入出力処理 (p. 119)• リファレンスパス (p. 121)• パスを使用して状態入力をパラメータとして渡す (p. 150)

[Generate SNS Publish task state (SNS Publish タスク状態を生成する)] でオプションを設定すると、[Preview (プレビュー)] セクションがタスク状態の Amazon ステートメント言語 コードが必要なオプションで更新されます。

たとえば、これらのオプションを選択します。

これらのオプションが選択された場合、[Preview (プレビュー)] 領域に表示される生成されたコードスニペットは次のようになります。

"Amazon SNS: Publish a message": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "Message": "Hello from Step Functions!",

70

Page 78: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 2: ステートマシン定義を更新する

"PhoneNumber": "+12065550123" }, "Next": "NEXT_STATE"}

Note

[Task state options (タスク状態のオプション)] セクションで、Retry、Catch、および TimeoutSeconds の各オプションも設定できます。「Step Functions でのエラー処理 (p. 136)」を参照してください。

ステップ 2: ステートマシン定義を更新するAmazon SNS オプションを設定したので、生成されたコードスニペットをステートマシン定義に貼り付け、既存の Amazon ステートメント言語 コードを更新します。

1. [プレビュー] セクションのコードを確認したら、[クリップボードにコピー] を選択します。2. ステートマシン定義の HelloWorld 状態の閉じ括弧の後ろにカーソルを置きます。

カンマを入力し、[Enter] キーを押して新しい行を開始します。コードスニペットをステートマシン定義に貼り付けます。

3. Amazon SNS: Publish a message 状態の最期の行を、"Next": "NEXT_STATE" から "End":true に変更します。

4. HelloWorld 状態の最期の行を、"End": true から "Next": "Amazon SNS: Publish amessage" に変更します。

5. [Visual Workflow (ビジュアルワークフロー)] ペインで を選択します。ビジュアルワークフローをチェックして、新しい状態が含まれていることを確認します。

71

Page 79: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: 実行を開始する

6. (オプション) 読みやすくするために JSON をインデントします。ステートマシン定義は次のようになります。

{ "StartAt":"HelloWorld", "States":{ "HelloWorld":{ "Type":"Pass", "Result":"Hello World!", "Next":"Amazon SNS: Publish a message" }, "Amazon SNS: Publish a message":{ "Type":"Task", "Resource":"arn:aws:states:::sns:publish", "Parameters":{ "Message":"Hello from Step Functions!", "PhoneNumber":"+12065550123" }, "End":true } }}

7. [次へ] を選択します。8. IAM ロールを作成または入力します。

• Step Functions の IAM ロールを作成するには、[自分用の IAM ロールを作成する] を選択し、[名前]にロール名を入力します。

• ステートマシンの正しいアクセス許可を使用して IAM ロールをすでに作成済みである (p. 259)場合は、[Choose an existing IAM role (既存の IAM ロールを選択する)] を選択します。リストからロールを選択するか、ロールの ARN を指定します。

Note

Step Functions によって作成された IAM ロールを削除すると、Step Functions は後で再作成することはできません。同様に、ロールを変更すると (たとえば、IAM ポリシーのプリンシパルから Step Functions を削除するなど)、後で Step Functions でそれを元の設定に復元することはできません。

9. [Create state machine (ステートマシンの作成)] をクリックします。

ステップ 3: 実行を開始する作成が完了すると、新しいステートマシンからのページが表示されます。

1. Amazon リソースネーム (ARN)、関連する IAM ARN、ステートマシン定義など、ステートマシンの詳細を確認します。

2. [Executions (実行)] タブで、[Start execution (実行の開始)] を選択します。3. (オプション) 実行の名前を入力します。

Note

Amazon SNS コードスニペットを作成したときに [Specify message at runtime with stateinput (実行時に状態入力を使用してメッセージを指定する)] を選択した場合は、[Input -optional (入力 - オプション)] にメッセージを含めます。ここではデフォルトの状態入力を使用します。

[実行の開始] を選択します。

72

Page 80: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド人間による承諾プロジェクト例をデプロイする

コードスニペットで有効な携帯電話番号を設定した場合、ステートマシンの実行によって直接トリガーされた Amazon SNS からのテキストメッセージを受信します。

人間による承諾プロジェクト例をデプロイするこのチュートリアルでは、AWS Step Functions がタスク中に実行を停止し、ユーザーが E メールに返答するまで待機することができる人間による承諾プロジェクトをデプロイする方法を説明します。ユーザーによってタスクの進行が承認されてから、ワークフローは次の状態に進みます。

このチュートリアルに含まれている AWS CloudFormation スタックをデプロイすると、以下を含めてすべての必要なリソースが作成されます。

• Amazon API Gateway リソース• AWS Lambda 関数• AWS Step Functions ステートマシン• Amazon Simple Notification Service E メールトピック• 関連する AWS Identity and Access Management ロールとアクセス権限

Note

AWS CloudFormation スタックを作成するときにアクセスできる有効な E メールアドレスを提供する必要があります。

詳細については、AWS CloudFormation ユーザーガイドの「CloudFormation テンプレートの使用」と「AWS::StepFunctions::StateMachine リソース」を参照してください。

トピック• ステップ 1: AWS CloudFormation テンプレートを作成する (p. 73)• ステップ 2: スタックを作成する (p. 74)• ステップ 3: Amazon SNS サブスクリプションの承認 (p. 74)• ステップ 4: 実行を稼働する (p. 75)• AWS CloudFormation テンプレートソースコード (p. 76)

ステップ 1: AWS CloudFormation テンプレートを作成する1. AWS CloudFormation テンプレートソースコード (p. 76) セクションからサンプルコードをコピー

します。

2. AWS CloudFormation テンプレートのソースをローカルマシン上のファイルに貼り付けます。

この例では、ファイルは human-approval.yaml という名前です。

73

Page 81: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 2: スタックを作成する

ステップ 2: スタックを作成する1. AWS CloudFormation コンソール にログインします。2. [Create Stack] を選択します。3. [Choose a template (テンプレートを選択)] で、[Upload a template to Amazon S3 (Amazon S3 にテン

プレートをアップロード)]、[Choose File (ファイルを選択)] の順に選択します。4. 以前に作成した human-approval.yaml ファイルから テンプレートソースコード (p. 76) が含ま

れているものを開きます。5. [Open (開く)]、[Next (次へ)] の順に選択します。6. [Specify Details (詳細の指定)] で [Stack name (スタック名)] を入力します。7. [Parameters (パラメータ)] で有効な [Email (E メール)] アドレスを入力し、[Next (次へ)] を選択しま

す。8. [Options (オプション)] ページで、下にスクロールして [Next (次へ)] を選択します。9. [Review (見直し)] ページで、[I acknowledge that AWS CloudFormation might create IAM resources

(AWS CloudFormation が IAM リソースを作成する場合があることを理解しています)] を選択し、[Create (作成)] を選択します。

AWS CloudFormation はスタックの作成を開始し、[CREATE_IN_PROGRESS] のステータスが表示されます。プロセスが完了すると、AWS CloudFormation に [CREATE_COMPLETE] ステータスが表示されます。

10. (省略可能) スタックのリソースを表示するには、スタックを選択して [Resources] タブを選択します。

ステップ 3: Amazon SNS サブスクリプションの承認Amazon SNS トピックが作成されると、サブスクリプションの確認を求める E メールが届きます。

1. AWS CloudFormation スタックを作成した際に指定した E メールアカウントを開きます。2. [[email protected]] から受信した [AWS Notification - Subscription Confirmation (AWS 通

知 - サブスクリプションの確認)] のメッセージを開きます。

E メールは Amazon SNS トピックの Amazon リソースネーム と確認用のリンクを表示します。3. [confirm subscription (サブスクリプションの確認)] リンクを選択します。

74

Page 82: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 4: 実行を稼働する

ステップ 4: 実行を稼働する1. Step Functions コンソールにサインインします。2. [State machines (ステートマシン)] ページで [HumanApprovalLambdaStateMachine] を選択します。3. [実行の開始] を選択します。4. 実行の名前を入力します (ApprovalTest など)。5. (オプション) 実行する一部の入力を入力します。

{ "Comment": "Testing the human approval tutorial."}

6. [実行の開始] を選択します。

[ApprovalTest] の実行が開始し、[Lambda Callback (Lambda コールバック)] で一時停止します。

7. 以前に Amazon SNS トピックに使用した E メールアカウントで、[Required approval from AWS StepFunctions (AWS ステップ関数からの承認要請)] という件名のメッセージを開きます。

75

Page 83: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドテンプレートソースコード

このメッセージには、[Approve (承認)] 用と [Reject (拒否)] 用に別々の URL が含まれています。8. [Approve (承認)] URL を選択します。

選択に基づいてワークフローが続行されます。

AWS CloudFormation テンプレートソースコードこの AWS CloudFormation テンプレートを使用して、人間による承諾プロセスワークフローのサンプルをデプロイします。

AWSTemplateFormatVersion: "2010-09-09"Description: "AWS Step Functions Human based task example. It sends an email with an HTTP URL for approval."Parameters: Email: Type: String AllowedPattern: "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$" ConstraintDescription: Must be a valid email address.Resources: # Begin API Gateway Resources ExecutionApi: Type: "AWS::ApiGateway::RestApi" Properties: Name: "Human approval endpoint" Description: "HTTP Endpoint backed by API Gateway and Lambda" FailOnWarnings: true

ExecutionResource: Type: 'AWS::ApiGateway::Resource' Properties: RestApiId: !Ref ExecutionApi ParentId: !GetAtt "ExecutionApi.RootResourceId" PathPart: execution

ExecutionMethod: Type: "AWS::ApiGateway::Method" Properties: AuthorizationType: NONE HttpMethod: GET

76

Page 84: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドテンプレートソースコード

Integration: Type: AWS IntegrationHttpMethod: POST Uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaApprovalFunction.Arn}/invocations" IntegrationResponses: - StatusCode: 302 ResponseParameters: method.response.header.Location: "integration.response.body.headers.Location" RequestTemplates: application/json: | { "body" : $input.json('$'), "headers": { #foreach($header in $input.params().header.keySet()) "$header": "$util.escapeJavaScript($input.params().header.get($header))" #if($foreach.hasNext),#end

#end }, "method": "$context.httpMethod", "params": { #foreach($param in $input.params().path.keySet()) "$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end

#end }, "query": { #foreach($queryParam in $input.params().querystring.keySet()) "$queryParam": "$util.escapeJavaScript($input.params().querystring.get($queryParam))" #if($foreach.hasNext),#end

#end } } ResourceId: !Ref ExecutionResource RestApiId: !Ref ExecutionApi MethodResponses: - StatusCode: 302 ResponseParameters: method.response.header.Location: true

ApiGatewayAccount: Type: 'AWS::ApiGateway::Account' Properties: CloudWatchRoleArn: !GetAtt "ApiGatewayCloudWatchLogsRole.Arn" ApiGatewayCloudWatchLogsRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: - apigateway.amazonaws.com Action: - 'sts:AssumeRole' Policies: - PolicyName: ApiGatewayLogsPolicy PolicyDocument: Version: 2012-10-17 Statement:

77

Page 85: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドテンプレートソースコード

- Effect: Allow Action: - "logs:*" Resource: !Sub "arn:${AWS::Partition}:logs:*:*:*"

ExecutionApiStage: DependsOn: - ApiGatewayAccount Type: 'AWS::ApiGateway::Stage' Properties: DeploymentId: !Ref ApiDeployment MethodSettings: - DataTraceEnabled: true HttpMethod: '*' LoggingLevel: INFO ResourcePath: /* RestApiId: !Ref ExecutionApi StageName: states

ApiDeployment: Type: "AWS::ApiGateway::Deployment" DependsOn: - ExecutionMethod Properties: RestApiId: !Ref ExecutionApi StageName: DummyStage # End API Gateway Resources

# Begin # Lambda that will be invoked by API Gateway LambdaApprovalFunction: Type: 'AWS::Lambda::Function' Properties: Code: ZipFile: Fn::Sub: | const AWS = require('aws-sdk'); var redirectToStepFunctions = function(lambdaArn, statemachineName, executionName, callback) { const lambdaArnTokens = lambdaArn.split(":"); const partition = lambdaArnTokens[1]; const region = lambdaArnTokens[3]; const accountId = lambdaArnTokens[4];

console.log("partition=" + partition); console.log("region=" + region); console.log("accountId=" + accountId);

const executionArn = "arn:" + partition + ":states:" + region + ":" + accountId + ":execution:" + statemachineName + ":" + executionName; console.log("executionArn=" + executionArn);

const url = "https://console.aws.amazon.com/states/home?region=" + region + "#/executions/details/" + executionArn; callback(null, { statusCode: 302, headers: { Location: url } }); };

exports.handler = (event, context, callback) => { console.log('Event= ' + JSON.stringify(event)); const action = event.query.action; const taskToken = event.query.taskToken;

78

Page 86: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドテンプレートソースコード

const statemachineName = event.query.sm; const executionName = event.query.ex;

const stepfunctions = new AWS.StepFunctions();

var message = "";

if (action === "approve") { message = { "Status": "Approved! Task approved by ${Email}" }; } else if (action === "reject") { message = { "Status": "Rejected! Task rejected by ${Email}" }; } else { console.error("Unrecognized action. Expected: approve, reject."); callback({"Status": "Failed to process the request. Unrecognized Action."}); }

stepfunctions.sendTaskSuccess({ output: JSON.stringify(message), taskToken: event.query.taskToken }) .promise() .then(function(data) { redirectToStepFunctions(context.invokedFunctionArn, statemachineName, executionName, callback); }).catch(function(err) { console.error(err, err.stack); callback(err); }); } Description: Lambda function that callback to AWS Step Functions FunctionName: LambdaApprovalFunction Handler: index.handler Role: !GetAtt "LambdaApiGatewayIAMRole.Arn" Runtime: nodejs12.x

LambdaApiGatewayInvoke: Type: "AWS::Lambda::Permission" Properties: Action: "lambda:InvokeFunction" FunctionName: !GetAtt "LambdaApprovalFunction.Arn" Principal: "apigateway.amazonaws.com" SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${ExecutionApi}/*"

LambdaApiGatewayIAMRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Action: - "sts:AssumeRole" Effect: "Allow" Principal: Service: - "lambda.amazonaws.com" Policies: - PolicyName: CloudWatchLogsPolicy PolicyDocument: Statement: - Effect: Allow Action: - "logs:*" Resource: !Sub "arn:${AWS::Partition}:logs:*:*:*" - PolicyName: StepFunctionsPolicy

79

Page 87: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドテンプレートソースコード

PolicyDocument: Statement: - Effect: Allow Action: - "states:SendTaskFailure" - "states:SendTaskSuccess" Resource: "*" # End Lambda that will be invoked by API Gateway

# Begin state machine that publishes to Lambda and sends an email with the link for approval HumanApprovalLambdaStateMachine: Type: AWS::StepFunctions::StateMachine Properties: RoleArn: !GetAtt LambdaStateMachineExecutionRole.Arn DefinitionString: Fn::Sub: | { "StartAt": "Lambda Callback", "TimeoutSeconds": 3600, "States": { "Lambda Callback": { "Type": "Task", "Resource": "arn:${AWS::Partition}:states:::lambda:invoke.waitForTaskToken", "Parameters": { "FunctionName": "${LambdaHumanApprovalSendEmailFunction.Arn}", "Payload": { "ExecutionContext.$": "$$", "APIGatewayEndpoint": "https://${ExecutionApi}.execute-api.${AWS::Region}.amazonaws.com/states" } }, "Next": "ManualApprovalChoiceState" }, "ManualApprovalChoiceState": { "Type": "Choice", "Choices": [ { "Variable": "$.Status", "StringEquals": "Approved! Task approved by ${Email}", "Next": "ApprovedPassState" }, { "Variable": "$.Status", "StringEquals": "Rejected! Task rejected by ${Email}", "Next": "RejectedPassState" } ] }, "ApprovedPassState": { "Type": "Pass", "End": true }, "RejectedPassState": { "Type": "Pass", "End": true } } }

SNSHumanApprovalEmailTopic: Type: AWS::SNS::Topic Properties: Subscription: -

80

Page 88: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドテンプレートソースコード

Endpoint: !Sub ${Email} Protocol: email LambdaHumanApprovalSendEmailFunction: Type: "AWS::Lambda::Function" Properties: Handler: "index.lambda_handler" Role: !GetAtt LambdaSendEmailExecutionRole.Arn Runtime: "nodejs12.x" Timeout: "25" Code: ZipFile: Fn::Sub: | console.log('Loading function'); const AWS = require('aws-sdk'); exports.lambda_handler = (event, context, callback) => { console.log('event= ' + JSON.stringify(event)); console.log('context= ' + JSON.stringify(context));

const executionContext = event.ExecutionContext; console.log('executionContext= ' + executionContext);

const executionName = executionContext.Execution.Name; console.log('executionName= ' + executionName);

const statemachineName = executionContext.StateMachine.Name; console.log('statemachineName= ' + statemachineName);

const taskToken = executionContext.Task.Token; console.log('taskToken= ' + taskToken);

const apigwEndpint = event.APIGatewayEndpoint; console.log('apigwEndpint = ' + apigwEndpint)

const approveEndpoint = apigwEndpint + "/execution?action=approve&ex=" + executionName + "&sm=" + statemachineName + "&taskToken=" + encodeURIComponent(taskToken); console.log('approveEndpoint= ' + approveEndpoint);

const rejectEndpoint = apigwEndpint + "/execution?action=reject&ex=" + executionName + "&sm=" + statemachineName + "&taskToken=" + encodeURIComponent(taskToken); console.log('rejectEndpoint= ' + rejectEndpoint);

const emailSnsTopic = "${SNSHumanApprovalEmailTopic}"; console.log('emailSnsTopic= ' + emailSnsTopic);

var emailMessage = 'Welcome! \n\n'; emailMessage += 'This is an email requiring an approval for a step functions execution. \n\n' emailMessage += 'Please check the following information and click "Approve" link if you want to approve. \n\n' emailMessage += 'Execution Name -> ' + executionName + '\n\n' emailMessage += 'Approve ' + approveEndpoint + '\n\n' emailMessage += 'Reject ' + rejectEndpoint + '\n\n' emailMessage += 'Thanks for using Step functions!' const sns = new AWS.SNS(); var params = { Message: emailMessage, Subject: "Required approval from AWS Step Functions", TopicArn: emailSnsTopic };

sns.publish(params) .promise() .then(function(data) { console.log("MessageID is " + data.MessageId);

81

Page 89: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドテンプレートソースコード

callback(null); }).catch( function(err) { console.error(err, err.stack); callback(err); }); }

LambdaStateMachineExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: states.amazonaws.com Action: "sts:AssumeRole" Policies: - PolicyName: InvokeCallbackLambda PolicyDocument: Statement: - Effect: Allow Action: - "lambda:InvokeFunction" Resource: - !Sub "${LambdaHumanApprovalSendEmailFunction.Arn}"

LambdaSendEmailExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: "sts:AssumeRole" Policies: - PolicyName: CloudWatchLogsPolicy PolicyDocument: Statement: - Effect: Allow Action: - "logs:CreateLogGroup" - "logs:CreateLogStream" - "logs:PutLogEvents" Resource: !Sub "arn:${AWS::Partition}:logs:*:*:*" - PolicyName: SNSSendEmailPolicy PolicyDocument: Statement: - Effect: Allow Action: - "SNS:Publish" Resource: - !Sub "${SNSHumanApprovalEmailTopic}"

# End state machine that publishes to Lambda and sends an email with the link for approvalOutputs: ApiGatewayInvokeURL: Value: !Sub "https://${ExecutionApi}.execute-api.${AWS::Region}.amazonaws.com/states" StateMachineHumanApprovalArn: Value: !Ref HumanApprovalLambdaStateMachine

82

Page 90: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドMap 状態を使用して Lambda を複数回呼び出す

Map 状態を使用して Lambda を複数回呼び出すこのチュートリアルでは、ステートマシンの入力に基づき、Map 状態を使用して AWS Lambda 関数を複数回呼び出す方法について説明します。

Lambda を使用する Step Functions ステートマシンを作成する (p. 20) チュートリアルでは、Lambda関数を呼び出すステートマシンを作成する手順について説明します。このチュートリアルを完了済みである場合は、ステップ 4 (p. 85) に進み、前に作成した AWS Identity and Access Management (IAM) ロールと Lambda 関数を使用してください。

トピック• ステップ 1: Lambda 用の IAM ロールを作成する (p. 83)• ステップ 2: Lambda 関数を作成する (p. 83)• ステップ 3: Lambda 関数をテストする (p. 84)• ステップ 4: ステートマシンを作成する (p. 85)• ステップ 5: 新しい実行を開始する (p. 86)

ステップ 1: Lambda 用の IAM ロールを作成するAWS Lambda と AWS Step Functions のいずれも、コードを実行して AWS リソース (Amazon S3 バケットに保存されているデータなど) にアクセスできます。セキュリティを維持するために、これらのリソースへのアクセスを Lambda および Step Functions に付与する必要があります。

Lambda では、Lambda 関数を作成する際に AWS Identity and Access Management (IAM) ロールを割り当てる必要があります。これは、ステートマシンを作成する際に Step Functions に IAM ロールを割り当てる必要があるのと同じ方法です。

IAM コンソールを使用して、サービスにリンクされたロールを作成できます。

ロールを作成するには (コンソール)

1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

2. IAM コンソールの [Navigation] ペインで [Roles] を選択します。続いて、[Create role] を選択します。3. [AWS サービス] ロールタイプを選択し、続いて [Lambda] を選択します。4. [Lambda] ユースケースを選択します。ユースケースは、サービスに必要な信頼ポリシーを含めるよう

に定義されています。続いて、[Next: Permissions] を選択します。5. ロールにアタッチするアクセス許可ポリシーを 1 つ以上選択します (例:

AWSLambdaBasicExecutionRole)。「AWS Lambda アクセス許可モデル」を参照してください。

ロールに許可するアクセス許可を割り当てるポリシーの横にあるボックスを選択し、[Next: Review]をクリックします。

6. [Role name] に入力します。7. (オプション) [Role description] で、サービスにリンクされた新しいロールの説明を編集します。8. ロールを確認し、[ロールの作成] を選択します。

ステップ 2: Lambda 関数を作成する使用する Lambda 関数は入力 (名前) を受信し、入力値を含めた挨拶を返します。

83

Page 91: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 3: Lambda 関数をテストする

Important

Lambda 関数が、ステートマシンと同じ AWS アカウントと AWS リージョンにあることを確認します。

1. Lambda コンソールを開き、[Create a function (Lambda 関数の作成)] を選択します。2. [Blueprints] セクションで、[Author from scratch] を選択します。3. [基本的な情報] セクションで、Lambda 関数を設定します。

a. [Function name (関数名)] に「HelloFunction」と入力します。b. [ランタイム] で [Node.js 12.x] を選択します。c. [Role (ロール)] で、[既存のロールを選択] を選択します。d. [既存のロール] で、前に作成した Lambda ロール (p. 83)を選択します。

Note

作成した IAM ロールがリストに表示されない場合は、そのロールが Lambda に伝達されるまで、あと数分かかる場合があります。

e. [Create function] を選択します。

Lambda 関数が作成されたら、ページの右上隅に表示されているその Amazon リソースネーム(ARN) を記録します。例:

arn:aws:lambda:us-east-1:123456789012:function:HelloFunction

4. Lambda 関数の以下のコードを [HelloFunction] ページの [関数コード] セクションにコピーします。

exports.handler = (event, context, callback) => { callback(null, "Hello, " + event.who + "!");};

このコードは、関数に渡された event オブジェクトから提供された入力データの who フィールドを使用して、挨拶をアセンブルします。後で新しい実行を開始 (p. 86)するときに、この関数の入力データを追加します。callback メソッドによって、関数からアセンブルされた挨拶が返されます。

5. [Save] を選択します。

ステップ 3: Lambda 関数をテストするLambda 関数をテストしてオペレーションを確認します。

1. [Select a test events (テストイベントの選択)] で [Configure test event (テストイベントの設定)] を選択します。[イベント名] で、「HelloFunction」と入力します。

2. データ例を以下に置き換えます。

{ "who": "AWS Step Functions"}

"who" エントリは Lambda 関数の event.who フィールドに対応し、挨拶を完了させます。関数をStep Functions タスクとして実行するときも同じ入力データを使用します。

3. [作成] を選択します。4. [HelloFunction] ページで、新しいデータを使用して Lambda 関数の [Test] を実行します。

84

Page 92: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 4: ステートマシンを作成する

テストの結果がページの上部に表示されます。[詳細] を展開して出力を表示します。

ステップ 4: ステートマシンを作成するStep Functionsコンソールで、Map 状態を使用してステートマシンを作成します。Lambda を参照するTask 状態を追加します。Lambda 関数は、ステートマシンの入力に基づいて、 Map 状態の反復処理ごとに呼び出されます。

1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。2. [Define state machine (ステートマシンの定義)] ページで、[Author with code snippets (コードスニペッ

トで作成)] を選択します。[タイプ] で、[標準] を選択します。[名前] を入力します (例: MapLambda)。

Note

ステートマシン、実行、およびアクティビティ名の長さは 1~80 文字で、アカウントとAWS リージョンに対して一意である必要があります。また、次の文字を含めることはできません。

• 空白• ワイルドカード文字 (? *)• 括弧 (< > { } [ ])• 特殊文字 (: ; , \ | ^ ~ $ # % & ` ")• 制御文字 (\\u0000 - \\u001f or \\u007f - \\u009f)

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. 次の例に示すように、[State machine definition (ステートマシンの定義)] ペインで、前に作成したLambda 関数 (p. 84)の ARN を使用して以下のステートマシンの定義を追加します。

{ "StartAt": "ExampleMapState", "States": { "ExampleMapState": { "Type": "Map", "Iterator": { "StartAt": "CallLambda", "States": { "CallLambda": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "End": true } } }, "End": true } }}

これは、Amazon ステートメント言語 を使用したステートマシンの説明です。Lambda 関数を呼び出す Task 状態 (CallLambda) を含む ExampleMapState という名前の Map 状態を定義します。詳細については、「State Machine Structure (p. 92)」を参照してください。

85

Page 93: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 5: 新しい実行を開始する

Note

Task 状態の Retry を設定することもできます。ベストプラクティスとして、本番稼働用コードが Lambda サービス例外 (Lambda.ServiceException およびLambda.SdkClientException) を処理できることを確認します。詳細については、以下を参照してください。

• Lambda サービス例外の処理 (p. 241)• エラー後の再試行 (p. 137)

[次へ] を選択します。4. IAM ロールを作成または入力します。

• Step Functions の IAM ロールを作成するには、[自分用の IAM ロールを作成する] を選択し、[名前]にロール名を入力します。

• ステートマシンの正しいアクセス許可を使用して IAM ロールをすでに作成済みである (p. 259)場合は、[Choose an existing IAM role (既存の IAM ロールを選択する)] を選択します。リストからロールを選択するか、ロールの ARN を指定します。

Note

Step Functions によって作成された IAM ロールを削除すると、Step Functions は後で再作成することはできません。同様に、ロールを変更すると (たとえば、IAM ポリシーのプリンシパルから Step Functions を削除するなど)、後で Step Functions でそれを元の設定に復元することはできません。

5. [Next (次へ)] を選択します。

ステップ 5: 新しい実行を開始するステートマシンを作成した後、実行を開始します。

1. [LambdaStateMachine] ページで、[Start execution] (実行の開始) を選択します。

[New execution (新しい実行)] ページが表示されます。2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. 実行入力領域で、サンプルデータを以下で置き換えます。

[ { "who": "bob" }, { "who": "meg" }, { "who": "joe" }

86

Page 94: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステップ 5: 新しい実行を開始する

]

Map 状態は、入力内のこれらの項目ごとに CallLambda タスク状態を反復して実行します。"who"は、挨拶する相手の名前を取得するために Lambda 関数で使用するキー名です。

4. [Start Execution] を選択します。

ステートマシンの新しい実行が開始され、実行中の実行が表示されている新しいページが表示されます。

5. 実行結果を表示するには、[実行の詳細] の [出力] セクションを展開します。

[ "Hello, bob!", "Hello, meg!", "Hello, joe!"]

Lambda 関数の各実行の出力は、ステートマシンの出力に結合されます。

Map の使用方法の詳細については、以下を参照してください。

• マップ (p. 113)• Map 状態の例 (p. 114)• Map 状態の入出力処理 (p. 116)• ItemsPath (p. 123)

87

Page 95: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド標準ワークフローとExpress ワークフロー

Step Functions の詳細このセクションでは、AWS Step Functions に慣れ親しんで理解するための重要な概念について説明します。

トピック• 標準ワークフローとExpress ワークフロー (p. 88)• 状態 (p. 89)• Transitions (p. 117)• ステートマシンデータ (p. 117)• Step Functions の入出力処理 (p. 119)• Step Functions での実行 (p. 135)• Step Functions でのエラー処理 (p. 136)• サービスの AWS Step Functions との統合 (p. 143)• Step Functions の読み込み整合性 (p. 180)• Step Functions のテンプレート (p. 180)• Step Functions のタグ付け (p. 180)• AWS Step Functions Data Science SDK for Python (p. 182)

標準ワークフローとExpress ワークフローステートマシンを作成するときは、標準または Express のいずれかのタイプを選択する必要があります。どちらの場合も、Amazon ステートメント言語 を使用してステートマシンを定義します。ステートマシンの実行の動作は、選択したタイプによって異なります。ステートマシンが作成された後は、選択したタイプを変更することはできません。

標準ワークフローは、長時間実行され、耐久性が高く、監査可能なワークフローに最適です。最長 1 年間実行でき、実行完了後 90 日以内であれば Step Functions API を使用して完全な実行履歴を取得できます。標準ワークフローは at-most-once モデルを採用しており、ASL で Retry 動作を指定しない限り、タスクと状態が複数回実行されることはありません。これにより、Amazon EMR クラスターの開始や支払いの処理など、非べき等アクションのオーケストレーションに適しています。標準ワークフローの実行は、処理された状態遷移の数に応じて課金されます。

Express ワークフローは、IoT データの取り込み、ストリーミングデータ処理と変換、モバイルアプリケーションのバックエンドなど、大容量のイベント処理ワークロードに最適です。これらのワークフローは最大 5 分間実行できます。Express ワークフローは、複数回実行する可能性がある an at-least-once モデルを採用しています。これにより、入力データの変換や PUT 経由での Amazon DynamoDB での保存などのべき等アクションを調整するのに理想的です。Express ワークフローの実行は、実行回数、実行時間、消費されたメモリによって課金されます。

標準ワークフローと Express ワークフローは、Amazon API Gateway 経由の HTTP リクエスト (大規模なフルマネージド型 API)、IoT ルール、および 140 を超える Amazon EventBridge イベントソースなどのイベントに応答して自動的に開始できます。

標準ワークフローと Express ワークフロー

  標準ワークフロー Express ワークフロー

最大期間 1 年. 5 分。

88

Page 96: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド最低 1 回のワークフロー実行

  標準ワークフロー Express ワークフロー

サポートされている実行開始レート (p. 244)

毎秒 2,000 以上 毎秒 100,000 以上

サポートされている状態遷移レート (p. 244)

1 アカウントあたり 1 秒あたり4,000 以上

ほぼ無制限

料金表 状態移行ごとの価格設定。状態遷移は、実行のステップが完了するたびにカウントされます。

実行回数、実行時間、およびメモリ消費量によって価格設定されます。

実行履歴 実行は Step Functions API を使用して一覧表示および記述でき、コンソールから視覚的にデバッグできます。ステートマシンでのロギングを有効にすることで、CloudWatch Logs で実行を検査することもできます。

ステートマシンでのロギングを有効にすることで、CloudWatchLogs で実行を検査できます。

実行セマンティクス (p. 89) 一度だけのワークフロー実行。 最低 1 回のワークフロー実行。

サービス統合 (p. 143) すべてのサービス統合とパターンをサポートします。

すべてのサービス統合をサポートします。ジョブ実行 (.sync)パターンまたはコールバック(.waitForTaskToken) パターンはサポートされません。

Step Functions のアクティビティ Step Functions のアクティビティをサポートします。

Step Functions のアクティビティをサポートしません。

最低 1 回のワークフロー実行標準ワークフローは、1 回だけワークフローを実行します。Express ワークフローでは、ワークフローの実行が最低 1 回行われます。

標準ワークフローでは、実行状態は、すべての状態遷移で内部的に保持されます。各実行は 1 回だけ実行されます。同じ名前の標準ワークフローを複数回開始しようとすると、1 つの実行のみが開始されます。標準ワークフローは常に最初から最後まで実行されます。

標準ワークフローとは異なり、Express ワークフローは、実行の進行状況に対して内部的保持される状態はありません。1 つの実行が 1 回だけ実行されることを保証する方法はありません。同じ名前の Expressワークフローを複数回開始しようとすると、実行が同時に開始され、それぞれが少なくとも 1 回実行されます。まれに、内部実行状態が失われることがあり、そのような実行は最初から自動的に再開されます。Express ワークフローを使用する場合は、ステートマシンロジックがべき等であり、同じ入力の複数の同時実行によって悪影響を受けないようにしてください。

状態個別の状態では、入力に基づいて決定を行い、アクションを実行して、出力を他の状態に渡すことができます。AWS Step Functions では、Amazon ステートメント言語 でワークフローを定義します。StepFunctions コンソールは、アプリケーションロジックを視覚化するために、そのステートマシンをグラフィカルに表示します。

状態はステートマシンの要素です。状態は名前で参照されます。任意の文字列を指定できますが、ステートマシン全体の範囲で一意である必要があります。

89

Page 97: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド状態

状態はステートマシン内でさまざまな関数を実行できます。

• ステートマシンで何らかの作業をする (Task (p. 94) 状態)。• 実行の選択肢間で選択する (Choice (p. 106) 状態)• 失敗または成功で実行を停止する (Fail (p. 110) または Succeed (p. 110) 状態)• 入力を単純に出力に渡す、または一部の固定データを出力する (Pass (p. 93) 状態)• 一定時間または指定された時刻/日付まで遅延を提供する (Wait (p. 109) 状態)• 実行の並列ブランチを開始する (Parallel (p. 111) 状態)• ステップを動的に反復する (Map (p. 113) 状態)

以下は、AWS Lambda 関数を実行する HelloWorld という名前の状態の例です。

"HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "Next": "AfterHelloWorldState", "Comment": "Run the HelloWorld Lambda function"}

状態は多くの一般的な特徴を共有しています。

• 各状態には、必ずその状態のタイプを示す Type フィールドがあります。• 各状態は任意で、人間が読んで理解できる状態の説明を入力できる Comment フィールドを持つことが

できます。• 各状態 (Succeed または Fail 状態を除く) には Next フィールドが必要です。または、代わりに End

フィールドを指定して終了状態にできます。

Note

Choice 状態には 1 つ以上の Next がある場合がありますが、各 Choice ルール内には 1 つのみです。Choice 状態では End を使用できません。

特定の状態タイプには追加フィールドが必要です。または共通フィールドの使用方法を再定義します。

標準ワークフローが作成され実行されると、Step Functions コンソールの [実行の詳細] ページで、各状態に関する情報 (入力および出力、アクティブ化された日時と所要時間) にアクセスできます。

Express ワークフローを作成して実行した後、ロギングが有効になっている場合は、Amazon CloudWatchLogs で実行に関する情報にアクセス (p. 305)できます。

トピック• Amazon ステートメント言語 (p. 91)• Pass (p. 93)• タスク (p. 94)• Choice (p. 106)• Wait (p. 109)• Succeed (p. 110)• 失敗 (p. 110)• Parallel (p. 111)• マップ (p. 113)

90

Page 98: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon ステートメント言語

Amazon ステートメント言語Amazon ステートメント言語 は JSON ベースの構造化言語で、ステートマシンおよび作業を実行できる状態 (p. 89)のコレクション (Task 状態) の定義、次に移行する状態の決定 (Choice 状態)、エラーによる実行の停止 (Fail 状態) などに使用されます。

詳細については、Amazon ステートメント言語の仕様と、Amazon ステートメント言語コードを検証するツールである Statelint を参照してください。

Amazon ステートメント言語 を使用して Step Functions コンソールでステートマシンを作成するには、「開始方法 (p. 14)」を参照してください。

Amazon ステートメント言語 仕様の例

{ "Comment": "An example of the Amazon States Language using a choice state.", "StartAt": "FirstState", "States": { "FirstState": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FUNCTION_NAME", "Next": "ChoiceState" }, "ChoiceState": { "Type" : "Choice", "Choices": [ { "Variable": "$.foo", "NumericEquals": 1, "Next": "FirstMatchState" }, { "Variable": "$.foo", "NumericEquals": 2, "Next": "SecondMatchState" } ], "Default": "DefaultState" },

"FirstMatchState": { "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:OnFirstMatch", "Next": "NextState" },

"SecondMatchState": { "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:OnSecondMatch", "Next": "NextState" },

"DefaultState": { "Type": "Fail", "Error": "DefaultStateError", "Cause": "No Matches!" },

"NextState": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FUNCTION_NAME", "End": true

91

Page 99: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon ステートメント言語

} }}

トピック• ステートマシン構造 (p. 92)• Common State フィールド (p. 93)

ステートマシン構造ステートマシンは、次のフィールドを含む構造を表す JSON テキストを使用して定義されます。

Comment(オプション)

ステートマシンの人間が読み取れる説明。StartAt (必須)

いずれかの状態オブジェクトの名前と完全に一致する必要がある (大文字と小文字が区別されます) 文字列。

TimeoutSeconds(オプション)

ステートマシンを実行できる最大秒数。指定された時間より長く実行されると、States.Timeoutエラー名 (p. 137) で実行が失敗します。

Version(オプション)

ステートマシンで使用される Amazon ステートメント言語 のバージョンです (デフォルトは「1.0」)。

States (必須)

オブジェクトには、コンマで区切られた一連の状態が含まれています。

States フィールドには States (p. 89) が含まれています。

{ "State1" : { },

"State2" : { }, ...}

ステートマシンは、それに含まれている状態と、状態間の関係によって定義されます。

次に例を示します。

{ "Comment": "A Hello World example of the Amazon States Language using a Pass state", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Pass", "Result": "Hello World!", "End": true } }

92

Page 100: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドPass

}

このステートマシンの実行が開始されると、システムは StartAt フィールドで参照されている状態で開始されます ("HelloWorld")。この状態に "End": true フィールドがある場合、実行が停止して結果が返されます。それ以外の場合、システムは "Next": フィールドを探し、次はその状態で続行します。このプロセスは、システムが終了状態 ("Type": "Succeed"、"Type": "Fail"、または "End": trueの状態) に到達するまで繰り返されます。そうでない場合は、ランタイムエラーが発生します。

ステートマシン内の状態には次のルールが適用されます。

• 状態は、囲みブロック内の任意の順序で発生しますが、リストされた順序は実行順序に影響を与えません。状態自体の内容によってこの順序が決まります。

• ステートマシン内では、最上位の構造で StartAt フィールドの値により指定される start 状態として指定された状態が 1 つだけ存在します。この状態は、実行が開始されたときに最初に実行される状態です。

• End フィールドが true の状態は、end (または terminal) 状態とみなされます。ステートマシンのロジックによっては (ステートマシンに実行のブランチが複数あるかどうかなど)、複数の end 状態が存在する可能性があります。

• ステートマシンが 1 つの状態だけで構成される場合、start 状態と end 状態の両方になることができます。

Common State フィールドType (必須)

状態のタイプ。Next

現在の状態が終了するときに実行される次の状態の名前。Choice など、一部の状態では複数の移行状態が許可されます。

End

true に設定されている場合は、この状態を終了状態として指定します (実行が終了されます)。ステートマシンごとに、任意の数の終了状態が存在します。状態では Next または End のどちらか 1 つのみを使用できます。Choice など一部の状態タイプでは、End フィールドはサポートまたは使用されません。

Comment(オプション)

状態に関する、人間が読み取れる説明を保持します。InputPath(オプション)

状態の入力の一部を選択して状態の処理タスクに渡すパス (p. 119)。省略した場合、入力全体を指定する値 $ が設定されます。詳細については、「入力および出力処理 (p. 119)」を参照してください。

OutputPath(オプション)

状態の入力の一部を選択して状態の出力に渡すパス (p. 119)。省略した場合、入力全体を指定する値$ が設定されます。詳細については、「入力および出力処理 (p. 119)」を参照してください。

PassPass 状態 ("Type": "Pass") は、何も作業せずに入力を出力に渡します。Pass 状態は、ステートマシンを構築およびデバッグする際に便利です。

93

Page 101: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスク

共通状態フィールド (p. 93)に加えて、Pass 状態では次のフィールドを使用できます。

Result(オプション)

次の状態に渡される仮想タスクの出力として扱われ、ResultPath フィールド (ある場合) に従ってフィルタリングされます。

ResultPath(オプション)

Result で指定された仮想タスクの「出力」を配置する場所 (入力内) を指定します。その後、入力はOutputPath フィールド (ある場合) に従ってフィルタリングされてから状態の出力に使用されます。詳細については、「入力および出力処理 (p. 119)」を参照してください。

Parameters(オプション)

入力として渡されるキーと値のペアの集合を作成します。値は静的とするか、入力からパスで選択できます。詳細については、「InputPath およびパラメータ (p. 121)」を参照してください。

Pass 状態の例以下の Pass 状態の例では、テストなどの目的で、ステートマシンにいくつかの固定データを挿入します。

"No-op": { "Type": "Pass", "Result": { "x-datum": 0.381018, "y-datum": 622.2269926397355 }, "ResultPath": "$.coords", "Next": "End"}

この状態の入力は以下であるとします。

{ "georefOf": "Home"}

出力は次のようになります。

{ "georefOf": "Home", "coords": { "x-datum": 0.381018, "y-datum": 622.2269926397355 }}

タスクTask 状態 ("Type": "Task") は、ステートマシンによって実行される単一の作業単位を表します。

ステートマシンのすべての作業は、タスクにより処理されます。タスクの作業を実行するには、アクティビティ、または AWS Lambda 関数を使用するか、パラメータをそのサービスの API アクションに渡します。

AWS Step Functions では、タスク状態から直接 Lambda 関数を呼び出すことができます。Lambda 関数は、AWS Lambda で実行されるクラウドネイティブタスクです。Lambda 関数は、AWS マネジメントコ

94

Page 102: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスク

ンソール を使用したり、コードを Lambda にアップロードしたりして、さまざまなプログラミング言語で記述できます。詳細については、「??? (p. 20)」を参照してください。

Note

Step Functions では、一部の AWS サービスをタスク状態から直接調整することができます。詳細については、「サービス統合 (p. 143)」を参照してください。

アクティビティはプログラムコードで構成され、オペレーターがアクションを実行するか、入力を提供するのを待機します。アクティビティは、Amazon EC2、Amazon ECS、またはモバイルデバイスでもホストできます。アクティビティは、GetActivityTask と SendTaskSuccess、SendTaskFailure、および SendTaskHeartbeat API アクションを使用して Step Functions をポーリングします。

Amazon ステートメント言語 は、状態のタイプを Task に設定し、タスクにアクティビティまたはLambda 関数の Amazon リソースネーム (ARN) を指定することにより、タスクを表します。

共通状態フィールド (p. 93)に加えて、Task 状態には次のフィールドがあります。

Resource (必須)

URI (特に、実行する特定のタスクを一意に識別する ARN)。Parameters(オプション)

接続されたリソースの API アクションに情報を渡すのに使用します。パラメータには静的な JSONと JsonPath を組み合わせて使用できます。詳細については、「サービス API にパラメータを渡す (p. 150)」を参照してください。

ResultPath(オプション)

Resource で指定されたタスクを実行した結果を配置する場所 (入力内) を指定します。その後、入力は OutputPath フィールド (ある場合) に従ってフィルタリングされてから状態の出力に使用されます。詳細については、「パス (p. 119)」を参照してください。

Retry(オプション)

Retrier と呼ばれるオブジェクトの配列。状態でランタイムエラーが発生した場合の再試行ポリシーを定義します。詳細については、「Retry の使用例と Catch の使用例 (p. 140)」を参照してください。

Catch(オプション)

Catcher と呼ばれるオブジェクトの配列で、フォールバック状態を定義します。この状態は、状態にランタイムエラーが発生し、その再試行ポリシーが使い果たされたか定義されていない場合に実行されます。詳細については、「フォールバック状態 (p. 139)」を参照してください。

TimeoutSeconds(オプション)

指定した秒数よりも長時間タスクが実行されると、この状態は States.Timeout エラー名で失敗します。ゼロ以外の正の整数にする必要があります。指定しない場合、デフォルト値は99999999 です。タスクが開始されると、カウントが開始します (例: ActivityStarted またはLambdaFunctionStarted が [実行イベント履歴] にログインされる際)。

HeartbeatSeconds(オプション)

タスクからのハートビートの間隔が指定された秒数よりも長時間経過した場合、このタスクはStates.Timeout エラー名で失敗します。0 以外の正の整数である必要があり、TimeoutSecondsフィールドに指定された秒数よりも小さい必要があります。指定しない場合、デフォルト値は 99999999 です。アクティビティにおいては、GetActivityTask にトークンが送信され、ActivityStarted が [実行イベント履歴] にログインされると、カウントが開始します。

Task 状態は、その状態で実行が終了する場合は End フィールドが true に設定されている必要があります。または、Next フィールドに、Task 状態が完了した際に実行される状態を指定する必要があります。

95

Page 103: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスク

Task 状態の例この例では、ActivityState は呼び出し元の AWS アカウントの us-east-1 AWS リージョンでHelloWorld を実行するアクティビティをスケジュールします。HelloWorld が完了すると、次の状態(ここでは NextState と呼ばれます) が実行されます。

このタスクが 300 秒以内に完了しなかった場合、または 60 秒間隔のハートビート通知を送信しなかった場合、タスクは failed とマークされます。長時間実行されるアクティビティでは、タイムアウト値とハートビート間隔を設定することをお勧めします。

"ActivityState": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:HelloWorld", "TimeoutSeconds": 300, "HeartbeatSeconds": 60, "Next": "NextState"}

タスクのリソース ARN の指定Resource フィールドの ARN は次のパターンを使用して指定します。

arn:partition:service:region:account:task_type:name

このパターンでは:

• partition は使用する AWS Step Functions のパーティションです。最も一般的に使用されるのは awsです。

• service はタスクの実行に使用される AWS のサービスを示します。以下のいずれかです。• アクティビティ (p. 97)にstates。• Lambda 関数 (p. 97)に lambda。

• region は、Step Functions アクティビティ/ステートマシンタイプまたは Lambda 関数が作成されたAWS リージョンです。

• account はお客様の AWS アカウント ID です。• task_type は実行するタスクのタイプです。以下のいずれかの値です:

• activity – アクティビティ (p. 97)。• function – Lambda 関数 (p. 97)。• servicename – サポートされた接続サービスの名前 (「Step Functions でサポートされる AWS サー

ビス統合 (p. 152)」を参照)。• name は登録されたリソース名 (アクティビティ名、Lambda 関数名、またはサービス API アクション)

です。

Note

Step Functions はパーティション、リージョン、アカウント間での ARN の参照はサポートされていません (たとえば、「aws-cn」がパーティション「aws」のタスクを呼び出すことはできません。その逆も同様です)。

タスクタイプ以下のタスクタイプがサポートされています。

96

Page 104: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスク

• アクティビティ (p. 97)• Lambda 関数 (p. 97)• サポートされる AWS のサービス (p. 143)

次のセクションでは、各タスクタイプの詳細を示します。

アクティビティ

アクティビティは、お客様によって実装およびホストされ、特定のタスクを実行するワーカー (プロセスまたはスレッド) を示します。標準ワークフローでのみサポートされ、Express ワークフローではサポートされません。

アクティビティ resource ARN は以下の構文を使用します。

arn:partition:states:region:account:activity:name

これらのフィールドの詳細については、「タスクのリソース ARN の指定 (p. 96)」を参照してください。

Note

アクティビティは、最初に使用する前に Step Functions で作成しておく必要があります(CreateActivity、API アクション、または Step Functions コンソールを使用)。

アクティビティの作成とワーカーの実装の詳細については、「アクティビティ (p. 98)」を参照してください。

Lambda 関数

Lambda タスクでは AWS Lambda を使用して関数を実行します。Lambda 関数を指定するには、Resource フィールドに Lambda 関数の ARN を使用します。

Lambda 関数 Resource ARN は以下の構文を使用します。

arn:partition:lambda:region:account:function:function_name

これらのフィールドの詳細については、「タスクのリソース ARN の指定 (p. 96)」を参照してください。

例:

"LambdaState": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorld", "Next": "NextState"}

Resource フィールドに指定された Lambda 関数が完了すると、その出力が Next フィールド(「NextState」) で指定された状態に送信されます。

サポートされる AWS サービス

接続されたリソースを参照すると、Step Functions によって、サポートされたサービスの API アクションが直接呼び出されます。Resource フィールドでサービスとアクションを指定します。

97

Page 105: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスク

接続されたサービス Resource ARN では以下の構文を使用します。

arn:partition:states:region:account:servicename:APIname

Note

接続されたリソースへの同期接続を作成するには、.sync を ARN の APIname エントリに付加します。詳細については、「サービス統合 (p. 143)」を参照してください。

例:

{ "StartAt": "BATCH_JOB", "States": { "BATCH_JOB": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "preprocessing", "JobName": "PreprocessingBatchJob", "JobQueue": "SecondaryQueue", "Parameters.$": "$.batchjob.parameters", "RetryStrategy": { "attempts": 5 } }, "End": true } }}

アクティビティアクティビティは、ワーカーによって作業が実行されるステートマシンでタスクを実行できるようにするAWS Step Functions 機能です。ワーカーは、Amazon Elastic Compute Cloud (Amazon EC2) や AmazonElastic Container Service (Amazon ECS)、モバイルデバイスなど—基本的にどこでもホストできます。

概要

AWS Step Functions では、アクティビティはどこかで実行されているコード (アクティビティワーカーとも呼ばれる) を、ステートマシンの特定のタスクと関連付ける方法です。Step Functions コンソールを使用して、または CreateActivity を呼び出すことでアクティビティを作成できます。これによって、タスクの状態の Amazon リソースネーム (ARN) が提供されます。この ARN を使用して、アクティビティワーカーでの作業のタスク状態をポーリングします。

Note

アクティビティはバージョニングされず、下位互換性があることが予期されます。アクティビティに下位互換性のない変更を加える必要がある場合は、一意の名前を使用して、Step Functionsで新しいアクティビティを作成します。

アクティビティワーカーは、Amazon EC2 インスタンス、AWS Lambda 関数、モバイルデバイスで実行されているアプリケーションです。任意の場所にホストされている、HTTP 接続を行うことができる任意のアプリケーションです。Step Functions がアクティビティタスクの状態に達すると、ワークフローはアクティビティワーカーのタスクのポーリングを待機します。アクティビティワーカーは、GetActivityTask を使用して Step Functions をポーリングし、関連するアクティビティのARN を送信します。GetActivityTask は input (タスクの JSON 入力文字列) および taskToken(タスクの一意の識別子) を含むレスポンスを返します。アクティビティワーカーは作業の完了後にSendTaskSuccess または SendTaskFailure を使用して成功または失敗のレポートを提供します。こ

98

Page 106: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスク

れら 2 つの呼び出しは、GetActivityTask によって提供される taskToken を使用して結果をタスクと関連付けます。

アクティビティタスクに関連する API

Step Functions では、アクティビティの作成と一覧表示、タスクのリクエスト、ワーカーの結果に基づくステートマシンのフロー管理のための API を提供しています。

以下は、アクティビティに関連する Step Functions API です。

• CreateActivity

• GetActivityTask

• ListActivities

• SendTaskFailure

• SendTaskHeartbeat

• SendTaskSuccess

Note

GetActivityTask を使用してアクティビティタスクをポーリングすると、一部の実装でレイテンシーが発生する可能性があります。「アクティビティタスクポーリング時のレイテンシーを回避する (p. 242)」を参照してください。

アクティビティタスクの完了を待機中タスク定義で TimeoutSeconds を設定して、ステートが待機する時間を設定します。タスクをアクティブおよび待機中にしておくためには、TimeoutSeconds で設定した時間内に SendTaskHeartbeat を使用して、アクティビティワーカーから定期的にハートビートを送信します。長いタイムアウト期間を設定し、能動的にハートビートを送信することで、Step Functions のアクティビティは実行の完了を最大で 1年間待機できます。

たとえば、長いプロセスの結果を待機するワークフローが必要な場合は、以下の操作を実行します。

1. コンソールを使用して、または CreateActivity を呼び出してアクティビティを作成します。アクティビティ ARN を書き留めます。

2. ステートマシンの定義でアクティビティのタスク状態の ARN を参照し、TimeoutSeconds を設定します。

3. GetActivityTask を使用して作業をポーリングするアクティビティワーカーを実装し、そのアクティビティ ARN を参照します。

4. ステートマシンのタスク定義の HeartbeatSeconds (p. 94) で設定した時間内に定期的にSendTaskHeartbeat を使用して、タスクがタイムアウトしないようにします。

5. ステートマシンの実行を開始します。6. アクティビティワーカーのプロセスを開始します。

実行はアクティビティタスクの状態で一時停止して、アクティビティワーカーのタスクのポーリングを待機します。taskToken がアクティビティワーカーに提供されると、ワークフローはステータス提供のため SendTaskSuccess または SendTaskFailure を待機します。TimeoutSeconds で設定された時間より前に、これらのいずれかまたは SendTaskHeartbeat 呼び出しを実行が受け取らない場合、実行は失敗し、実行履歴に ExecutionTimedOut イベントが含まれることになります。

次のステップアクティビティワーカーを使用するステートマシンの作成の詳細については、以下を参照してください。

• Step Functions を使用してアクティビティステートマシンを作成する (p. 32)

99

Page 107: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスク

• Ruby のサンプルアクティビティワーカー (p. 100)

Ruby のサンプルアクティビティワーカー

以下は、ベストプラクティスの使用方法およびお客様独自のアクティビティワーカーを実装する方法を示すため、AWS SDK for Ruby を使用するアクティビティワーカーの例です。

このコードには、ポーラーおよびアクティビティワーカー用に構成可能な数のスレッドを含む、コンシューマー/プロデューサーパターンが実装されています。ポーラースレッドは、アクティビティタスクを常にロングポーリングします。アクティビティタスクが取得されると、アクティビティスレッドの区切られたブロックキューを通じて渡され、選択されます。

• AWS SDK for Ruby の詳細については、「AWS SDK for Ruby API Reference」を参照してください。• このコードと関連リソースをダウンロードするには、GitHub リポジトリで「step-functions-ruby-activity-

worker」を参照してください。

次の Ruby コードは、この例の Ruby アクティビティワーカーのメインエントリポイントです。

require_relative '../lib/step_functions/activity' credentials = Aws::SharedCredentials.new region = 'us-west-2' activity_arn = 'ACTIVITY_ARN' activity = StepFunctions::Activity.new( credentials: credentials, region: region, activity_arn: activity_arn, workers_count: 1, pollers_count: 1, heartbeat_delay: 30 ) # The start method takes as argument the block that is the actual logic of your custom activity. activity.start do |input| { result: :SUCCESS, echo: input['value'] }

コードにはデフォルトが含まれていますが、アクティビティを参照するために変更し、実際の実装に合わせることができます。このコードは、実際の実装ロジックを入力として取得するため、特定のアクティビティと認証情報を参照し、スレッドの数とハートビートの遅延を設定できます。詳細およびコードのダウンロードについては、「Step Functions Ruby Activity Worker」を参照してください。

項目 説明

require_relative 次の例のアクティビティワーカーコードへの相対パス。

region アクティビティの AWS リージョン。

workers_count アクティビティワーカーのスレッドの数。ほとんどの実装では、10 ~ 20 のスレッドで十分です。アクティビティの処理に時間がかかればかかるほど、必要なスレッドが多くなります。試算するには、1 秒あたりのプロセスアクティビティの数と、99 パーセンタイルアクティビティ処理レイテンシー (秒単位) を乗算してください。

100

Page 108: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスク

項目 説明

pollers_count ポーラーのスレッドの数。ほとんどの実装では、10 ~ 20 のスレッドで十分です。

heartbeat_delay ハートビート間の遅延 (秒)。

input アクティビティの実装ロジック。

以下は、コード内で ../lib/step_functions/activity とともに参照される Ruby アクティビティワーカーです。

require 'set'require 'json'require 'thread'require 'logger'require 'aws-sdk'

module Validate def self.positive(value) raise ArgumentError, 'Argument has to be positive' if value <= 0 value end

def self.required(value) raise ArgumentError, 'Argument is required' if value.nil? value endend

module StepFunctions class RetryError < StandardError def initialize(message) super(message) end end

def self.with_retries(options = {}, &block) retries = 0 base_delay_seconds = options[:base_delay_seconds] || 2 max_retries = options[:max_retries] || 3 begin block.call rescue => e puts e if retries < max_retries retries += 1 sleep base_delay_seconds**retries retry end raise RetryError, 'All retries of operation had failed' end end

class Activity def initialize(options = {}) @states = Aws::States::Client.new( credentials: Validate.required(options[:credentials]), region: Validate.required(options[:region]), http_read_timeout: Validate.positive(options[:http_read_timeout] || 60) ) @activity_arn = Validate.required(options[:activity_arn])

101

Page 109: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスク

@heartbeat_delay = Validate.positive(options[:heartbeat_delay] || 60) @queue_max = Validate.positive(options[:queue_max] || 5) @pollers_count = Validate.positive(options[:pollers_count] || 1) @workers_count = Validate.positive(options[:workers_count] || 1) @max_retry = Validate.positive(options[:workers_count] || 3) @logger = Logger.new(STDOUT) end

def start(&block) @sink = SizedQueue.new(@queue_max) @activities = Set.new start_heartbeat_worker(@activities) start_workers(@activities, block, @sink) start_pollers(@activities, @sink) wait end

def queue_size return 0 if @sink.nil? @sink.size end

def activities_count return 0 if @activities.nil? @activities.size end

private

def start_pollers(activities, sink) @pollers = Array.new(@pollers_count) do PollerWorker.new( states: @states, activity_arn: @activity_arn, sink: sink, activities: activities, max_retry: @max_retry ) end @pollers.each(&:start) end

def start_workers(activities, block, sink) @workers = Array.new(@workers_count) do ActivityWorker.new( states: @states, block: block, sink: sink, activities: activities, max_retry: @max_retry ) end @workers.each(&:start) end

def start_heartbeat_worker(activities) @heartbeat_worker = HeartbeatWorker.new( states: @states, activities: activities, heartbeat_delay: @heartbeat_delay, max_retry: @max_retry ) @heartbeat_worker.start end

def wait

102

Page 110: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスク

sleep rescue Interrupt shutdown ensure Thread.current.exit end

def shutdown stop_workers(@pollers) wait_workers(@pollers) wait_activities_drained stop_workers(@workers) wait_activities_completed shutdown_workers(@workers) shutdown_worker(@heartbeat_worker) end

def shutdown_workers(workers) workers.each do |worker| shutdown_worker(worker) end end

def shutdown_worker(worker) worker.kill end

def wait_workers(workers) workers.each(&:wait) end

def wait_activities_drained wait_condition { @sink.empty? } end

def wait_activities_completed wait_condition { @activities.empty? } end

def wait_condition(&block) loop do break if block.call sleep(1) end end

def stop_workers(workers) workers.each(&:stop) end

class Worker def initialize @logger = Logger.new(STDOUT) @running = false end

def run raise 'Method run hasn\'t been implemented' end

def process loop do begin break unless @running run rescue => e

103

Page 111: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスク

puts e @logger.error('Unexpected error has occurred') @logger.error(e) end end end

def start return unless @thread.nil? @running = true @thread = Thread.new do process end end

def stop @running = false end

def kill return if @thread.nil? @thread.kill @thread = nil end

def wait @thread.join end end

class PollerWorker < Worker def initialize(options = {}) @states = options[:states] @activity_arn = options[:activity_arn] @sink = options[:sink] @activities = options[:activities] @max_retry = options[:max_retry] @logger = Logger.new(STDOUT) end

def run activity_task = StepFunctions.with_retries(max_retry: @max_retry) do begin @states.get_activity_task(activity_arn: @activity_arn) rescue => e @logger.error('Failed to retrieve activity task') @logger.error(e) end end return if activity_task.nil? || activity_task.task_token.nil? @activities.add(activity_task.task_token) @sink.push(activity_task) end end

class ActivityWorker < Worker def initialize(options = {}) @states = options[:states] @block = options[:block] @sink = options[:sink] @activities = options[:activities] @max_retry = options[:max_retry] @logger = Logger.new(STDOUT) end

def run

104

Page 112: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスク

activity_task = @sink.pop result = @block.call(JSON.parse(activity_task.input)) send_task_success(activity_task, result) rescue => e send_task_failure(activity_task, e) ensure @activities.delete(activity_task.task_token) unless activity_task.nil? end

def send_task_success(activity_task, result) StepFunctions.with_retries(max_retry: @max_retry) do begin @states.send_task_success( task_token: activity_task.task_token, output: JSON.dump(result) ) rescue => e @logger.error('Failed to send task success') @logger.error(e) end end end

def send_task_failure(activity_task, error) StepFunctions.with_retries do begin @states.send_task_failure( task_token: activity_task.task_token, cause: error.message ) rescue => e @logger.error('Failed to send task failure') @logger.error(e) end end end end

class HeartbeatWorker < Worker def initialize(options = {}) @states = options[:states] @activities = options[:activities] @heartbeat_delay = options[:heartbeat_delay] @max_retry = options[:max_retry] @logger = Logger.new(STDOUT) end

def run sleep(@heartbeat_delay) @activities.each do |token| send_heartbeat(token) end end

def send_heartbeat(token) StepFunctions.with_retries(max_retry: @max_retry) do begin @states.send_task_heartbeat(token) rescue => e @logger.error('Failed to send heartbeat for activity') @logger.error(e) end end rescue => e @logger.error('Failed to send heartbeat for activity') @logger.error(e)

105

Page 113: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドChoice

end end endend

ChoiceChoice 状態 ("Type": "Choice") はステートマシンに分岐ロジックを追加します。

共通状態フィールド (p. 93)に加えて、Choice 状態には次の追加フィールドが導入されます。

Choices (必須)

ステートマシンが次に移行する状態を決定する Choice ルール (p. 107)の配列。Default (オプション、推奨)

Choices のいずれの移行も実行されない場合の移行先の状態の名前。

Important

Choice 状態では End フィールドはサポートされません。また、Next は Choices フィールド内でのみ使用されます。

Choice 状態の例以下は、Choice 状態および移行先の他の状態の例です。

Note

$.type フィールドを指定する必要があります。状態入力に $.type フィールドが含まれていない場合は、実行が失敗し、実行履歴にエラーが表示されます。

"ChoiceStateX": { "Type": "Choice", "Choices": [ { "Not": { "Variable": "$.type", "StringEquals": "Private" }, "Next": "Public" }, { "Variable": "$.value", "NumericEquals": 0, "Next": "ValueIsZero" }, { "And": [ { "Variable": "$.value", "NumericGreaterThanEquals": 20 }, { "Variable": "$.value", "NumericLessThan": 30

106

Page 114: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドChoice

} ], "Next": "ValueInTwenties" } ], "Default": "DefaultState"},

"Public": { "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Foo", "Next": "NextState"},

"ValueIsZero": { "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Zero", "Next": "NextState"},

"ValueInTwenties": { "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Bar", "Next": "NextState"},

"DefaultState": { "Type": "Fail", "Cause": "No Matches!"}

この例では、以下の入力値を使用してステートマシンが開始されます。

{ "type": "Private", "value": 22}

Step Functions は、value フィールドに基づいて、ValueInTwenties 状態に移行します。

Choice 状態の Choices と一致するものがない場合、Default フィールドに指定されている状態が代わりに実行されます。Default 状態が指定されていない場合は、エラーで失敗します。

Choice ルールChoice 状態には、必ず Choices フィールドがあります。値は空でない配列であり、その各要素はChoice ルールと呼ばれるオブジェクトです。Choice ルールには次のものが含まれます。

• 比較 – 比較する入力変数、比較のタイプ、および変数を比較する値を指定する 2 つのフィールド。• Next フィールド – このフィールドの値はステートマシンの状態名と一致する必要があります。

次の例では、数値が 1 と等しいかどうかを確認します。

{ "Variable": "$.foo", "NumericEquals": 1, "Next": "FirstMatchState"}

次の例では、文字列が MyString と等しいかどうかを確認します。

107

Page 115: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドChoice

{ "Variable": "$.foo", "StringEquals": "MyString", "Next": "FirstMatchState"}

次の例では、文字列が MyStringABC を超過しているかどうかを確認します。

{ "Variable": "$.foo", "StringGreaterThan": "MyStringABC", "Next": "FirstMatchState"}

次の例では、タイムスタンプが 2001-01-01T12:00:00Z と等しいかどうかを確認します。

{ "Variable": "$.foo", "TimestampEquals": "2001-01-01T12:00:00Z", "Next": "FirstMatchState"}

Step Functions は Choices フィールドにリストされた順序で各 Choice ルールを検討します。次に、最初の Choice ルールの Next フィールドで指定された状態に遷移します。ここで、変数は比較演算子に従って値と一致します。

次の比較演算子がサポートされています。

• And

• BooleanEquals

• Not

• NumericEquals

• NumericGreaterThan

• NumericGreaterThanEquals

• NumericLessThan

• NumericLessThanEquals

• Or

• StringEquals

• StringGreaterThan

• StringGreaterThanEquals

• StringLessThan

• StringLessThanEquals

• TimestampEquals

• TimestampGreaterThan

• TimestampGreaterThanEquals

• TimestampLessThan

• TimestampLessThanEquals

これらの演算子のそれぞれで、対応する値が適切なタイプ (文字列、数値、ブール値、またはタイムスタンプ) である必要があります。Step Functions では、数値フィールドを文字列値に対して一致を試みません。ただし、タイムスタンプフィールドは論理的に文字列であるため、タイムスタンプとみなされるフィールドを StringEquals コンパレータで一致させることはできます。

108

Page 116: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドWait

Note

相互運用性のため、数値比較は IEEE 754-2008binary64 データタイプで表される大きさまたは精度を外れる値では機能しないと考えてください。特に、[-253+1, 253-1] の範囲外の整数では想定した形での比較が失敗する可能性があります。タイムスタンプ (たとえば、2016-08-18T17:33:00Z) は、RFC3339 プロファイル ISO 8601 に準拠している必要があり、さらに制限があります。

• 大文字の T で日付部分と時刻部分を区切る必要があります。• 大文字の Z で数値タイムゾーンオフセットが存在しないことを示す必要があります。

文字列比較の動作を理解するには、Java compareTo のドキュメントを参照してください。And および Or 演算子は Choice ルールの空ではない配列の値であり、それ自体に Next フィールドを含まない必要があります。同様に、Not 演算子の値は単一の Choice ルールである必要があり、Next フィールドを含めることはできません。And、Not、および Or を使用して、複雑なネスト化された Choice ルールを作成できます。ただし、Next フィールドは最上位の Choice ルールにのみ使用できます。

WaitWait 状態 ("Type": "Wait") は、ステートマシンの続行を指定された時間遅延させます。相対時間 (状態が開始してからの秒数で指定) と絶対時間 (タイムスタンプで指定) のいずれかを選択できます。

共通状態フィールド (p. 93)に加えて、Wait 状態には次のいずれかのフィールドがあります。

Seconds

Next フィールドで指定された状態の開始を待機する時間 (秒)。Timestamp

Next フィールドで指定された状態の開始を待機する絶対時間。

タイムスタンプは、ISO 8601 の RFC3339 プロファイルに従う必要があります。ただし、大文字の Tによって日付部分と時刻部分を区切り、大文字の Z によって数値のタイムゾーンオフセットが存在しないことを示す必要があるという追加の制限があります。たとえば、2016-08-18T17:33:00Z などです。

SecondsPath

Next フィールドで指定された状態の開始まで待機する時間 (秒)。状態の入力データから取得されたパス (p. 119)を使用して指定します。

TimestampPath

Next フィールドで指定された状態の開始まで待機する絶対時間。状態の入力データから取得されたパス (p. 119)を使用して指定します。

Note

Seconds、Timestamp、SecondsPath、または TimestampPath のいずれかちょうど 1 つを指定する必要があります。

Wait 状態の例たとえば、次の Wait 状態はステートマシンに 10 秒の遅延を導入します。

"wait_ten_seconds": {

109

Page 117: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドSucceed

"Type": "Wait", "Seconds": 10, "Next": "NextState"}

次の例では、Wait 状態は絶対時間 2016 年 3 月 14 日午後 1:59 (UTC) まで待機します。

"wait_until" : { "Type": "Wait", "Timestamp": "2016-03-14T01:59:00Z", "Next": "NextState"}

待機時間をハードコードする必要はありません。たとえば、以下の入力データがあるとします。

{ "expirydate": "2016-03-14T01:59:00Z"}

参照パス (p. 119)を使用して入力データから選択することで、値「expirydate」を入力データから選択できます。

"wait_until" : { "Type": "Wait", "TimestampPath": "$.expirydate", "Next": "NextState"}

SucceedSucceed 状態 ("Type": "Succeed") は実行を正常に停止します。Succeed 状態は、実行を停止するだけの Choice 状態ブランチのターゲットに便利です。

Succeed 状態は終了状態であるため、次の例に示すように、End フィールドがなく、Next フィールドは必要ありません。

"SuccessState": { "Type": "Succeed"}

失敗Fail 状態 ("Type": "Fail") は、ステートマシンの実行を停止し、失敗としてマークします。

Fail 状態では、共通状態フィールド (p. 93)のセットから Type および Comment フィールドの使用のみが許可されます。また、Fail 状態では以下のフィールドを使用できます。

Cause(オプション)

運用または診断の目的で使用できるカスタムの失敗文字列を提供します。Error(オプション)

エラー処理 (Retry/Catch)、運用または診断の目的で使用できるエラー名を提供します。

Fail 状態は常にステートマシンを終了するため、Next フィールドはなく、End フィールドも不要です。

110

Page 118: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドParallel

次に例を示します。

"FailState": { "Type": "Fail", "Cause": "Invalid response.", "Error": "ErrorA"}

ParallelParallel 状態 ("Type": "Parallel") はステートマシンの実行の並列ブランチを作成するために使用できます。

共通状態フィールド (p. 93)に加えて、Parallel 状態には次の追加のフィールドがあります。

Branches (必須)

ステートマシンで並列して実行する状態を指定するオブジェクトの配列。このような各ステートマシンオブジェクトには States および StartAt というフィールドが必要です。これらの意味はステートマシンの最上位にあるものとまったく同様です。

ResultPath(オプション)

ブランチの出力を配置する (入力内の) 場所を指定します。その後、入力は OutputPath フィールド(ある場合) に従ってフィルタリングされてから状態の出力に使用されます。詳細については、「入力および出力処理 (p. 119)」を参照してください。

Retry(オプション)

Retrier と呼ばれるオブジェクトの配列。状態でランタイムエラーが発生した場合の再試行ポリシーを定義します。詳細については、「Retry の使用例と Catch の使用例 (p. 140)」を参照してください。

Catch(オプション)

Catcher と呼ばれるオブジェクトの配列。状態でランタイムエラーが発生し、再試行ポリシーがすでに試された後または定義されていない場合に実行されるフォールバック状態を定義します。詳細については、「フォールバック状態 (p. 139)」を参照してください。

Parallel 状態を使用すると AWS Step Functions で各ブランチが実行されます。そのブランチのStartAt フィールドに指定された名前の状態から開始され、可能な限り同時に実行されて、すべてのブランチが終了 (終了状態に到達) してから、Parallel 状態の Next フィールドが処理されます。

Parallel 状態の例{ "Comment": "Parallel Example.", "StartAt": "LookupCustomerInfo", "States": { "LookupCustomerInfo": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "LookupAddress", "States": { "LookupAddress": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:AddressFinder", "End": true }

111

Page 119: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドParallel

} }, { "StartAt": "LookupPhone", "States": { "LookupPhone": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:PhoneFinder", "End": true } } } ] } }}

この例では、LookupAddress および LookupPhone ブランチは並行して実行されます。Step Functionsコンソールでの視覚的なワークフローの外観を次に示します。

各ブランチは自己完結型である必要があります。Parallel 状態の 1 つのブランチの状態にはそのブランチ外のフィールドをターゲットにする Next フィールドがあってはなりません。また、そのブランチ外の他の状態からこのブランチに移行することもできません。

Parallel 状態の入出力処理Parallel 状態は各ブランチに自身の入力データ (InputPath フィールドによって変更される場合があります) のコピーを提供します。そのブランチからの出力を含む各ブランチの 1 つの要素から成る配列である出力が生成されます。すべての要素が同じタイプである必要はありません。出力配列は、通常の方法でResultPath を使用して入力データに挿入し、全部を Parallel 状態の出力として送信できます (「入力および出力処理 (p. 119)」を参照)。

{ "Comment": "Parallel Example.", "StartAt": "FunWithMath", "States": { "FunWithMath": { "Type": "Parallel", "End": true,

112

Page 120: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドマップ

"Branches": [ { "StartAt": "Add", "States": { "Add": { "Type": "Task", "Resource": "arn:aws:swf:us-east-1:123456789012:task:Add", "End": true } } }, { "StartAt": "Subtract", "States": { "Subtract": { "Type": "Task", "Resource": "arn:aws:swf:us-east-1:123456789012:task:Subtract", "End": true } } } ] } }}

FunWithMath 状態に入力として配列 [3, 2] が提供される場合、Add および Subtract 状態は両方ともその配列を入力として受信します。Add の出力は 5 になり、Subtract の場合は 1 になります。Parallel 状態の出力は配列になります。

[ 5, 1 ]

エラー処理処理されないエラーまたは Fail 状態に移行したためにブランチが失敗すると、Parallel 状態全体が失敗とみなされ、そのすべてのブランチが停止します。エラーが Parallel 状態自体で処理されない場合、Step Functions は実行をエラーで停止します。

Note

並列状態が失敗しても、呼び出された Lambda 関数が実行し続けられるため、タスクトークンを処理するアクティビティワーカーが停止することはありません。

• 長時間稼働のアクティビティを停止するには、ハートビートを使用して、ブランチが StepFunctions で停止されたかどうかを検出し、タスクを処理しているワーカーを停止します。SendTaskHeartbeat、SendTaskSuccess、または SendTaskFailure を呼び出すと、状態が失敗した場合にエラーがスローされます。「ハートビートエラー」を参照してください。

• Lambda 関数の実行は停止できません。フォールバックを実装している場合は、Lambda 関数終了後にクリーンアップが行われるように Wait 状態を使用します。

マップMap 状態 ("Type": "Map") を使用して、入力配列の要素ごとに一連のステップを実行できます。Parallel (p. 111) 状態は同じ入力を使用して複数のステップのブランチを実行しますが、 Map状態は状態入力の配列の複数のエントリに対して同じステップを実行します。

Map 状態の使用の概要については、「Map 状態のチュートリアル (p. 83)」を参照してください。

113

Page 121: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドマップ

共通状態フィールド (p. 93)に加えて、Map 状態には次の追加のフィールドがあります。

Iterator (必須)

“Iterator” フィールドの値は、配列の各要素を処理するステートマシンを定義するオブジェクトです。

ItemsPath(オプション)

“ItemsPath” フィールドの値は、有効な入力内で配列フィールドを見つける場所を識別する参照パスです。詳細については、「ItemsPath (p. 123)」を参照してください。

"Iterator" フィールド内の各状態はそのフィールド内の他の状態にのみ移行できます。“ItemsPath” フィールド外の状態からそのフィールド内の状態に移行することはできません。

いずれかの反復が失敗すると、Map 状態全体が失敗し、すべての反復が終了します。MaxConcurrency(オプション)

“MaxConcurrency”フィールドの値は、反復子の呼び出しを並列実行できる上限数を指定する整数です。たとえば、 "MaxConcurrency" 値が 10 の場合、 Map 状態の反復の同時実行数は 10 回に制限されます。

Note

この “MaxConcurrency” 値は上限であり、この数まで同時反復が実行されることを保証するものではありません。

デフォルト値は "0" です。この場合、並列処理にクォータはなく、反復は可能な限り同時に呼び出されます。

"MaxConcurrency" 値が "1" の場合は、入力内に出現する順の各配列要素に対して "Iterator"が 1 回呼び出され、前の反復が完了するまで新しい反復は開始されません。

ResultPath(オプション)

ブランチの出力を配置する (入力内の) 場所を指定します。その後、入力は OutputPath フィールド(ある場合) に従ってフィルタリングされてから状態の出力に使用されます。詳細については、「入力および出力処理 (p. 119)」を参照してください。

Retry(オプション)

Retrier と呼ばれるオブジェクトの配列。状態でランタイムエラーが発生した場合の再試行ポリシーを定義します。詳細については、「Retry の使用例と Catch の使用例 (p. 140)」を参照してください。

Catch(オプション)

Catcher と呼ばれるオブジェクトの配列。状態でランタイムエラーが発生し、再試行ポリシーがすでに試された後または定義されていない場合に実行されるフォールバック状態を定義します。詳細については、「フォールバック状態 (p. 139)」を参照してください。

Map 状態の例Map 状態の次の入力データについて考えてみます。

{ "ship-date": "2016-03-14T01:59:00Z", "detail": { "delivery-partner": "UQS", "shipped": [ { "prod": "R31", "dest-code": 9511, "quantity": 1344 }, { "prod": "S39", "dest-code": 9511, "quantity": 40 },

114

Page 122: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドマップ

{ "prod": "R31", "dest-code": 9833, "quantity": 12 }, { "prod": "R40", "dest-code": 9860, "quantity": 887 }, { "prod": "R40", "dest-code": 9511, "quantity": 1220 } ] }}

前の入力を指定すると、次の例の Map 状態は、 "shipped" フィールドの配列の各項目に対して AWSLambda 関数 (ship-val) を 1 回呼び出します。

"Validate-All": { "Type": "Map", "InputPath": "$.detail", "ItemsPath": "$.shipped", "MaxConcurrency": 0, "Iterator": { "StartAt": "Validate", "States": { "Validate": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ship-val", "End": true } } }, "ResultPath": "$.detail.shipped", "End": true}

Map 状態の各反復は、配列の項目 ("ItemsPath" (p. 123) フィールドで選択) を Lambda 関数への入力として送信します。たとえば、Lambda の 1 回の呼び出しへの入力は次のようになります。

{ "prod": "R31", "dest-code": 9511, "quantity": 1344}

完了すると、 Map 状態の出力は JSON 配列となります。配列の各項目は反復の出力です (この例ではship-val Lambda 関数の出力)。

パラメータを使用した Map 状態の例前の例の ship-val Lambda 関数で、配列の項目に加えて配送の運送会社に関する情報も各反復で必要であるとします。Map 状態の現在の反復に固有である情報に加えて、入力からの情報を含めることもできます。次の例の "Parameters" フィールドに注目してください。

"Validate-All": { "Type": "Map", "InputPath": "$.detail", "ItemsPath": "$.shipped", "MaxConcurrency": 0, "ResultPath": "$.detail.shipped", "Parameters": { "parcel.$": "$$.Map.Item.Value", "courier.$": "$.delivery-partner" }, "Iterator": { "StartAt": "Validate", "States": {

115

Page 123: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドマップ

"Validate": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ship-val", "End": true } } }, "End": true}

"Parameters" ブロックは、反復への入力を JSON ノードに置き換えます。この JSON ノードには、コンテキストオブジェクト (p. 133)からの現在の項目データと Map 状態入力の "delivery-partner"フィールドからの運送会社情報の両方が含まれています。ship-val Lambda 関数の呼び出しに渡される、1 つの反復への入力例を次に示します。

{ "parcel": { "prod": "R31", "dest-code": 9511, "quantity": 1344 }, "courier": "UQS"}

前の Map 状態の例で、ResultPath (p. 124) フィールドは入力と同じ出力を生成しますが、“detail.shipped” フィールドは各反復の “ship-val” Lambda 関数の出力を各要素とする配列で上書きされます。

詳細については、以下を参照してください。

• Map 状態を使用して Lambda を複数回呼び出す (p. 83)• Step Functions の入出力処理 (p. 119)• ItemsPath (p. 123)• Map 状態のコンテキストオブジェクトデータ (p. 133)

Map 状態の入出力処理Map 状態に対して、InputPath (p. 121) は他の状態タイプと同じように機能し、入力のサブセットを選択します。

Map 状態の入力には JSON 配列を含める必要があり、配列の各項目に対して 1 回ずつ Iterator セクションが実行されます。この配列を入力内で見つける場所を指定するには、 ItemsPath (p. 123) フィールドを使用します。場所を指定しない場合、ItemsPath の値は "$" となり、 Iterator セクションはこの配列が唯一の入力であると見なします。Map 状態には、ItemsPath (p. 123) フィールドを含めることもできます。このフィールドの値は参照パス (p. 121)であることが必要です。ItemsPath フィールドは、反復に使用される配列を入力内で見つける場所を選択します。参照パスは、有効な入力に適用され(InputPath の適用後)、JSON 配列を値とするフィールドを識別する必要があります。

各反復への入力は、デフォルトでは、 ItemsPath 値で識別される配列フィールドの単一の要素です。これは、 Parameters (p. 122) フィールドを使用して上書きできます。

完了すると、 Map 状態の出力は JSON 配列となります。配列の各項目は反復の出力です。

詳細については、以下を参照してください。

• Map 状態のチュートリアル (p. 83)• パラメータを使用した Map 状態の例 (p. 115)

116

Page 124: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドTransitions

• Step Functions の入出力処理 (p. 119)• Map 状態のコンテキストオブジェクトデータ (p. 133)• Map 状態を使用してデータを動的に処理する (p. 209)

Transitionsステートマシンの実行が開始されると、システムは最上位の StartAt フィールドで参照されている状態で開始されます。このフィールド (文字列) は、いずれかの状態の名前と完全に一致する必要があります(大文字と小文字が区別されます)。

状態の実行後、AWS Step Functions は Next フィールドの値を使用してに次に進むべき状態を判断します。

Next フィールドは、状態名を文字列として指定することもでき、ステートマシンの説明で指定された状態の名前に完全に一致する必要があります (大文字と小文字が区別されます)。

たとえば、次の状態には NextState への移行が含まれています。

"SomeState" : { ..., "Next" : "NextState"}

ほとんどの状態では、Next フィールドを通じて 1 つの移行ルールのみ許可されます。ただし、特定のフロー制御状態 (Choice 状態など) では、それぞれ独自の Next フィールドを使用して複数の移行ルールを指定できます。「Amazon ステートメント言語 (p. 91)」では、移行の指定方法など、指定可能な各状態タイプについて詳しく説明されています。

状態には、他の状態からの受信移行を複数指定できます。

プロセスは、終了状態 ("Type": Succeed、"Type": Fail、または "End": true の状態) に到達するまで繰り返されます。そうでない場合は、ランタイムエラーが発生します。

ステートマシン内の状態には次のルールが適用されます。

• 状態は、囲みブロック内の任意の順序で発生しますが、リストされた順序は実行順序に影響を与えません。この順序は状態の内容によって決まります。

• ステートマシン内では、最上位の構造で StartAt フィールドの値により指定される start 状態として指定された状態が 1 つだけ存在します。

• ステートマシンのロジック—によっては (ステートマシンに実行のブランチが複数あるかどうかなど—)、複数の end 状態が存在する可能性があります。

• ステートマシンが 1 つの状態だけで構成される場合、start 状態と end 状態の両方になることができます。

ステートマシンデータステートマシンのデータは、次の形式です。

• ステートマシンへの最初の入力• 状態間で渡されるデータ• ステートマシンからの出力

117

Page 125: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドデータ形式

このセクションでは、ステートマシンのデータを AWS Step Functions でフォーマットして使用する方法について説明します。

トピック• データ形式 (p. 118)• ステートマシンの入出力 (p. 118)• 状態の入出力 (p. 118)

データ形式ステートマシンのデータは、JSON テキストで表されるため、JSON によりサポートされる任意のデータ型を使用して値を指定できます。

Note

• JSON テキスト形式の数値は、JavaScript セマンティクスに準拠します。これらの数値は通常、倍精度 IEEE-854 値に対応しています。

• 有効な JSON テキストは、スタンドアロン、引用符で区切られた文字列、オブジェクト、配列、数値、ブール値、null です。

• 状態の出力は、次の状態への入力になります。ただし、入力および出力処理 (p. 119)を使用することで、状態が入力データのサブセットでのみ機能するように制限できます。

ステートマシンの入出力実行を開始するときに StartExecution アクションにデータを渡すか、Step Functions コンソールを使用して初期データを渡すことにより、AWS Step Functions に初期入力データを与えることができます。初期データは、ステートマシンの StartAt 状態に渡されます。入力が提供されない場合、デフォルトは空のオブジェクト ({}) です。

実行の出力は、最後の状態 (terminal) により返されます。この出力は、実行の結果に JSON テキストとして表示されます。

標準ワークフローの場合、外部呼び出し元を使用して、実行履歴から実行結果を取得できます(DescribeExecution アクションなど)。実行結果は、Step Functions コンソールで確認できます。

Express ワークフローでは、ロギングを有効にしている場合は、CloudWatch Logs から結果を取得できます。詳細については、「CloudWatch Logs を使用したロギング (p. 305)」を参照してください。

状態の入出力各状態の入力は、前の状態の JSON テキストで構成されます。または、StartAt 状態の場合、実行への入力で構成されます。特定のフロー制御状態は、その出力への入力をエコーします。

次の例では、ステートマシンが 2 つの数値を同時に追加します。

1. AWS Lambda 関数を定義します。

function Add(input) { var numbers = JSON.parse(input).numbers; var total = numbers.reduce( function(previousValue, currentValue, index, array) { return previousValue + currentValue; }); return JSON.stringify({ result: total });}

118

Page 126: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド入力および出力処理

2. ステートマシンを定義します。

{ "Comment": "An example that adds two numbers together.", "StartAt": "Add", "Version": "1.0", "TimeoutSeconds": 10, "States": { "Add": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Add", "End": true } }}

3. 次の JSON テキストで実行を開始します。

{ "numbers": [3, 4] }

Add 状態が JSON テキストを受け取り、Lambda 関数に渡します。

Lambda 関数は、計算の結果をその状態に返します。

状態は、その出力で次の値を返します。

{ "result": 7 }

Add はステートマシンの最終状態でもあるため、この値はステートマシンの出力として返されます。

最終状態が出力を返さない場合、ステートマシンは空のオブジェクト ({}) を返します。

詳細については、「Step Functions の入出力処理 (p. 119)」を参照してください。

Step Functions の入出力処理Step Functions の実行は JSON テキストを入力として受け取り、その入力をワークフローの最初の状態に渡します。それぞれの状態で JSON を入力として受け取ります。また、通常 JSON を出力として次の状態に渡します。AWS Step Functions のワークフローを効率的に設計し、実装するには、状態間のこの情報の流れを理解して、このデータのフィルタリングや操作の方法を学ぶことが重要です。

Amazon ステートメント言語 では、これらのフィールドを使用して、状態によって異なる JSON のフローをフィルタリングおよび制御します。

• InputPath

• OutputPath

• ResultPath

• Parameters

次の図は、JSON 情報がタスク状態を遷移する様子を表します。InputPath では、Task 状態のタスクにどの JSON 入力部分を渡すかを選択します (例: AWS Lambda 関数)。次に、ResultPath を使用して、出力に渡す状態入力とタスク結果の組み合わせを選択します。OutputPath では、JSON 出力をフィルタリングして、出力に渡される情報を絞り込むことができます。

119

Page 127: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドパス

InputPath、Parameters、ResultPath、OutputPath ではそれぞれ、パスを使用して、ワークフローの各状態に遷移するように JSON を操作します。

それぞれパス (p. 120)を使用して、入力または結果から JSON の部分を選択することができます。パスは $ で始まる文字列です。これを使用して、JSON テキスト内でノードを識別します。Step Functions パスでは、JsonPath 構文を使用します。

トピック• パス (p. 120)• InputPath およびパラメータ (p. 121)• ItemsPath (p. 123)• ResultPath (p. 124)• OutputPath (p. 130)• InputPath、ResultPath、および OutputPath 例 (p. 130)• Context オブジェクト (p. 132)

パスAmazon ステートメント言語 では、パスは $ で始まる文字列です。これを使用して JSON テキスト内でコンポーネントを識別できます。パスは JsonPath 構文に従います。InputPath、ResultPath、およびOutputPath に値を指定するときに、入力のサブセットにアクセスするパスを指定できます。詳細については、「Step Functions の入出力処理 (p. 119)」を参照してください。

120

Page 128: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドInputPath およびパラメータ

Note

また、状態の定義の "Parameters" フィールド内のパスを使用して、入力あるいはコンテキストオブジェクトの JSON ノードを指定することもできます。「サービス API にパラメータを渡す (p. 150)」を参照してください。

リファレンスパスリファレンスパスは、JSON 構造内の単一ノードのみを識別できるように構文が制限されたパスです。

• オブジェクトのフィールドにアクセスするには、ドット (.) と角括弧 ([ ]) のみを使用して表記します。

• 演算子 @ .. , : ? * はサポートされていません。• length() などの関数はサポートされていません。

たとえば、if 状態入力データには次の値が含まれます。

{ "foo": 123, "bar": ["a", "b", "c"], "car": { "cdr": true }}

次のリファレンスパスは以下を返します。

$.foo => 123$.bar => ["a", "b", "c"]$.car.cdr => true

特定の状態はパスおよびリファレンスパスを使用して、ステートマシンのフローの制御、または状態の設定やオプションを構成します。

InputPath およびパラメータ"InputPath" フィールドおよび "Parameters" フィールドの両方によってワークフローを通して動くJSON を操作する方法が提供されます。InputPath は、パスを使用して JSON 表記をフィルタリングすることで渡される入力を制限できます (「パス (p. 120)」を参照)。"Parameters" フィールドによって、ステートマシンで定義した静的値あるいはパスを使用した入力から選択された静的値のいずれかの値となるキー値ペアのコレクションを渡すことができるようになります。

AWS Step Functions は "InputPath" フィールド、そして "Parameters" フィールドの順に適用します。最初に InputPath を使用して raw 入力をフィルタリングしてから、Parameters を適用して、入力をさらに操作するか、新しい値を追加します。

InputPath状態入力の一部を選択するには、InputPath を使用します。

たとえば、状態への入力に以下が含まれているとします。

{ "comment": "Example for InputPath.", "dataset1": { "val1": 1,

121

Page 129: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドInputPath およびパラメータ

"val2": 2, "val3": 3 }, "dataset2": { "val1": "a", "val2": "b", "val3": "c" }}

InputPath を適用できます。

"InputPath": "$.dataset2",

上記の InputPath を使用すると、入力として渡される JSON は次のようになります。

{ "val1": "a", "val2": "b", "val3": "c"}

Note

パスは値の選択になる場合があります。次の の例を考えます。

{ "a": [1, 2, 3, 4] }

パス $.a[0:2] を適用すると、結果は次のとおりです。

[ 1, 2 ]

パラメータ入力として渡されるキーと値のペアの集合を作成するには、"Parameters" フィールドを使用します。それぞれの値は、ステートマシンの定義に含める静的な値、または入力からパスまたはコンテキストオブジェクトで選択した静的な値を使用できます。パスを使用して値を選択するキーと値のペアの場合、キーの名前は .$ で終わる必要があります。

たとえば、以下の入力を使用するとします。

{ "comment": "Example for Parameters.", "product": { "details": { "color": "blue", "size": "small", "material": "cotton" }, "availability": "in stock", "sku": "2317", "cost": "$23" }}

いくつかの情報を選択するには、これらのパラメータをステートマシン定義で指定できます。

"Parameters": {

122

Page 130: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドItemsPath

"comment": "Selecting what I care about.", "MyDetails": { "size.$": "$.product.details.size", "exists.$": "$.product.availability", "StaticValue": "foo" } },

前の入力と "Parameters" フィールドを指定する場合、これが渡される JSON となります。

{ "comment": "Selecting what I care about.", "MyDetails": { "size": "small", "exists": "in stock", "StaticValue": "foo" }},

入力に加えて、コンテキストオブジェクトとして知られる特別な JSON にアクセスできます。コンテキストオブジェクトには、ステートマシン実行に関する情報が含まれています。「Context オブジェクト (p. 132)」を参照してください。

Note

"Parameters" フィールドを使用して、接続されたリソースに情報を渡すこともできます。たとえば、タスクの状態で AWS Batch ジョブを調整する場合は、該当する API パラメータをそのサービスの API アクションに直接渡すことができます。詳細については、以下のトピックを参照してください。

• サービス API にパラメータを渡す (p. 150)• サービス統合 (p. 143)

ItemsPathItemsPath フィールドは、入力内の配列を選択するために Map 状態 (p. 113) によって使用されます。Map 状態は、入力に含まれる配列の項目ごとにステップを反復するために使用されます。デフォルトでは、Map 状態は ItemsPath を "$" に設定し、入力全体を選択します。Map 状態への入力が JSON 配列の場合は、配列内の各項目に対して反復処理を実行し、その項目を入力として反復に渡します。この場合の例については、「Map 状態のチュートリアル (p. 83)」を参照してください。

ItemsPath フィールドでは、反復処理に使用する JSON 配列を入力内で見つける場所を指定できます。ItemsPath の値は参照パス (p. 121)でなければならず、JSON 配列である値を識別する必要があります。たとえば、次の例のように、Map 状態への入力に 2 つの配列が含まれている場合について考えてみます。

{ "ThingsPiratesSay": [ { "say": "Avast!" }, { "say": "Yar!" }, { "say": "Walk the Plank!" } ], "ThingsGiantsSay": [

123

Page 131: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドResultPath

{ "say": "Fee!" }, { "say": "Fi!" }, { "say": "Fo!" }, { "say": "Fum!" } ]}

この場合、ItemsPath で特定の配列を選択することで、Map 状態の反復処理に使用する配列を指定できます。次のステートマシン定義では ItemsPath を使用して入力内の "ThingsPiratesSay" 配列を指定し、"ThingsPiratesSay" 配列内の各項目に対して Pass 状態 SayWord の反復処理を実行します。

{ "StartAt": "PiratesSay", "States": { "PiratesSay": { "Type": "Map", "ItemsPath": "$.ThingsPiratesSay", "Iterator": { "StartAt": "SayWord", "States": { "SayWord": { "Type": "Pass", "End": true } } }, "End": true } }}

入力を処理する際に、ItemsPath は InputPath (p. 121) の後に適用されます。InputPath によって入力がフィルタリングされた後で、状態への有効な入力に対して適用されます。

Map 状態の詳細については、以下を参照してください。

• Map 状態 (p. 113)• マップ (p. 113)• Map 状態の例 (p. 114)• Map 状態を使用して Lambda を複数回呼び出す (p. 83)• Map 状態の入出力処理 (p. 116)• Map 状態を使用してデータを動的に処理する (p. 209)

ResultPath状態の出力は、入力のコピー、生成される結果 (例: Task 状態の Lambda 関数からの出力)、またはその入力と結果の組み合わせです。ResultPath を使用して、上記のうち、状態出力に渡す組み合わせを制御します。

次の状態タイプでは、結果を生成できます。また、ResultPath: を含むことができます。

124

Page 132: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドResultPath

• Pass (p. 93)• タスク (p. 94)• Parallel (p. 111)

ResultPath を使用して、タスク結果とタスク入力を組み合わせるか、またはこれらのいずれかを選択します。ResultPath に指定したパスで、出力に渡す情報を制御します。

Note

ResultPath では、リファレンスパス (p. 121)の使用を制限します。これにより、JSON の単一ノードのみ識別できるように範囲を制限できます。『Amazon ステートメント言語 (p. 91)』の「リファレンスパス (p. 121)」を参照してください。

これらの例は、Lambda を使用する Step Functions ステートマシンを作成する (p. 20) チュートリアルに記述されているステートマシンおよび Lambda 関数に基づきます。上記のチュートリアルを実行し、出力をテストするには、ResultPath フィールドにさまざまなパスを入力します。

ResultPath を使用して:• ResultPath を使用して結果で入力を置き換える (p. 125)• 結果を破棄し、元の入力を保持する (p. 126)• ResultPath を使用して結果を入力に含める (p. 126)• ResultPath を使用して、入力のノードを結果に更新する (p. 128)• ResultPath を使用して、エラーと入力の両方を Catch に含める (p. 129)

ResultPath を使用して結果で入力を置き換えるResultPath を指定しない場合、デフォルトの動作は、"ResultPath": "$" を指定した場合と同様になります。上記の場合、入力全体を結果に置き換えるように状態に指示されるため、状態入力は、タスク結果によって生じる結果によって完全に置き換えられます。

次の図は、ResultPath によって、入力がタスクの結果に完全に置き換えられる様子を表します。

125

Page 133: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドResultPath

Lambda を使用する Step Functions ステートマシンを作成する (p. 20) のステートマシンおよび Lambda関数を使用する (以下の入力を渡す場合)

{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions"}

Lambda 関数では、以下のような結果が生成されます。

"Hello, AWS Step Functions!"

ResultPath が状態で指定されていない場合、または "ResultPath": "$" が設定されている場合、状態の入力は、Lambda 関数の結果に置き換えられます。また、状態の出力は次のとおりです。

"Hello, AWS Step Functions!"

Note

ResultPath は、結果の内容を入力に含むために、出力に渡す前に使用します。ただし、ResultPath が指定されていない場合、デフォルトで入力全体が置き換えられます。

結果を破棄し、元の入力を保持するResultPath を null に設定すると、元の入力が出力に渡されます。"ResultPath": null を使用すると、状態の入力ペイロードは、結果に関係なく、出力に直接コピーされます。

次の図は、null ResultPath が入力を直接出力にコピーする方法を示しています。

ResultPath を使用して結果を入力に含める次の図は、ResultPath を使用して結果を入力に含める方法を示します。

126

Page 134: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドResultPath

Lambda を使用する Step Functions ステートマシンを作成する (p. 20) チュートリアルで説明されるステートマシンおよび Lambda 関数を使用すると、次の入力を渡すことができます。

{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions"}

Lambda 関数の結果は次のとおりです。

"Hello, AWS Step Functions!"

入力を保持するには、Lambda 関数の結果を挿入し、結合された JSON を次の状態に渡します。ResultPath を次のように設定できます。

"ResultPath": "$.taskresult"

これにより、Lambda 関数の結果が元の入力に含められます。

{ "comment": "This is a test of input and output of a Task state.", "details": "Default behavior example", "who": "AWS Step Functions", "taskresult": "Hello, AWS Step Functions!"}

Lambda 関数の出力は、taskresult の値として元の入力に付加されます。新しく挿入された値を含む入力は、次の状態に渡されます。

また、その結果を入力の子ノードに挿入することもできます。ResultPath を以下のように設定します。

127

Page 135: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドResultPath

"ResultPath": "$.strings.lambdaresult"

次の入力を使用して実行を開始します。

{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz" }, "who": "AWS Step Functions"}

Lambda 関数の結果は、入力の strings ノードの子として挿入されます。

{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz", "lambdaresult": "Hello, AWS Step Functions!" }, "who": "AWS Step Functions"}

状態出力によって、子ノードとしての結果に元の入力 JSON が含まれるようになりました。

ResultPath を使用して、入力のノードを結果に更新する次の図は、ResultPath を使用して、入力の既存 JSON ノードの値をタスク結果の値に更新する方法を示します。

128

Page 136: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドResultPath

Lambda を使用する Step Functions ステートマシンを作成する (p. 20) チュートリアルのステートマシンおよび Lambda 関数の例を使用すると、次の入力を渡すことができます。

{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions"}

Lambda 関数の結果は次のとおりです。

Hello, AWS Step Functions!

入力を保存し、その結果を JSON の新しいノードとして挿入せずに、既存のノードを上書きすることができます。

たとえば、"ResultPath": "$" を省略または設定するとノード全体が上書きされるため、個々のノードを指定して結果を上書きすることができます。

"ResultPath": "$.comment"

comment ノードは状態入力に存在しているため、ResultPath を "$.comment" に設定すると、入力のノードは、Lambda 関数の結果に置き換えられます。OutputPath でフィルタリングしない場合、以下が出力に渡されます。

{ "comment": "Hello, AWS Step Functions!", "details": "Default behavior example", "who": "AWS Step Functions",}

comment ノード、"This is a test of the input and output of a Task state." の値は、Lambda 関数の結果 (状態出力の "Hello, AWS Step Functions!") によって置き換えられます。

ResultPath を使用して、エラーと入力の両方を Catch に含めるStep Functions ステートマシンを使用してエラー条件を処理する (p. 37) チュートリアルでは、ステートマシンを使用してエラーを検出する方法を示します。場合によっては、元の入力をエラーとともに保持する場合があります。Catch の ResultPath を使用して、エラーを置き換えずに元の入力に含めます。

"Catch": [{ "ErrorEquals": ["States.ALL"], "Next": "NextTask", "ResultPath": "$.error" }]

前の Catch ステートメントでエラーが検出された場合は、状態入力の error ノードに結果が含まれます。たとえば、次の入力を示します。

{"foo": "bar"}

エラー検出時の状態出力は次のようになります。

{ "foo": "bar", "error": { "Error": "Error here"

129

Page 137: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドOutputPath

}}

エラー処理の詳細については、以下を参照してください。

• Step Functions でのエラー処理 (p. 136)• Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)

OutputPathOutputPath を使用すると、状態の出力の一部を選択して次の状態に渡すことができるようになります。これにより、不要な情報をフィルタして、必要な一部の JSON のみを渡すことができるようになります。

OutputPath を指定しない場合、デフォルトの値は $ です。これによって、JSON ノード全体 (状態の入力、タスクの結果、および ResultPath によって決定) が次の状態に渡されます。

詳細については、以下を参照してください。

• Amazon ステートメント言語 のパス (p. 120)• InputPath、ResultPath、および OutputPath 例 (p. 130)• 静的 JSON をパラメータとして渡す (p. 150)• Step Functions の入出力処理 (p. 119)

InputPath、ResultPath、および OutputPath 例Fail を除く状態にはいずれも、InputPath、ResultPath、または OutputPath を含むことができます。これらの状態では、JSON がワークフロー内を移動する際にパスを使用してフィルタリングすることができます。

たとえば、Lambda を使用する Step Functions ステートマシンを作成する (p. 20) チュートリアルに示すAWS Lambda 関数とステートマシンから開始します。次の InputPath、ResultPath、OutputPath が含まれるように、ステートマシンを変更します。

{ "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "InputPath": "$.lambda", "ResultPath": "$.data.lambdaresult", "OutputPath": "$.data", "End": true } }}

次の入力を使用して実行を開始します。

{ "comment": "An input comment.", "data": { "val1": 23, "val2": 17

130

Page 138: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドInputPath、ResultPath、および OutputPath 例

}, "extra": "foo", "lambda": { "who": "AWS Step Functions" }}

comment と extra ノードは破棄できるが、Lambda 関数の出力は含め、data ノードに情報を保存するとします。

更新されたステートマシンで、Task 状態は、タスクへの入力を処理するように変更されます。

"InputPath": "$.lambda",

ステートマシン定義のこの行によって、タスク入力は、状態入力から lambda ノードのみに制限されます。Lambda 関数には、入力として JSON オブジェクト ({"who": "AWS Step Functions"}) のみ送信されます。

"ResultPath": "$.data.lambdaresult",

ResultPath は、元のステートマシン入力の data ノードの子として、Lambda 関数の結果をlambdaresult という名前のノードに挿入するよう指示します。OutputPath の処理をこれ以上行わない場合は、状態の出力によって、Lambda 関数の結果が元の入力に含まれます。

{ "comment": "An input comment.", "data": { "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!" }, "extra": "foo", "lambda": { "who": "AWS Step Functions" }}

しかし、目的は data ノードのみを保持し、Lambda 関数の結果を含めることです。OutputPath を使用して、状態出力に渡す前に、結合されたこの JSON をフィルタリングします。

"OutputPath": "$.data",

これにより、出力に渡される、元の入力の data ノード (例: ResultPath によって挿入されるlambdaresult の子) のみ選択されます。状態出力は、次のようにフィルタリングされます。

{ "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!"}

この Task 状態では次のようになります。

1. InputPath では、Lambda 関数への入力から lambda ノードのみ送信されます。2. ResultPath では、元の入力の data ノードの子として結果を挿入します。3. OutputPath では、data ノードのみ状態出力に渡されるように、状態入力 (現在は Lambda 関数の結

果が含まれる) がフィルタリングされます。

131

Page 139: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドContext オブジェクト

詳細については、「Step Functions の入出力処理 (p. 119)」を参照してください。

Context オブジェクトコンテキストオブジェクトは、実行中に使用できる内部の JSON 構造です。これには、ステート定義の"Parameters" フィールド内からアクセスできるステートマシンと実行に関する情報が含まれています。これにより、ワークフローが特定の実行に関する情報にアクセスできるようになります。

コンテキストオブジェクトの形式コンテキストオブジェクトには、ステートマシン、筐体、実行、およびタスクに関する情報が含まれています。この JSON オブジェクトにはデータ型ごとのノードが含まれ、次の形式になります。

{ "Execution": { "Id": "String", "Input": {}, "StartTime": "Format: ISO 8601" }, "State": { "EnteredTime": "Format: ISO 8601", "Name": "String", "RetryCount": Number }, "StateMachine": { "Id": "String" }, "Task": { "Token": "String" }}

実行中、コンテキストオブジェクトの "Parameters" フィールドがアクセスされた場所から関連するデータで入力されます。"Parameters" フィールドがタスクの状態外にある場合、"Task" フィールドの値は null になります。

稼働中の実行からのコンテンツには、次の形式による仕様が含まれています。

{ "Execution": { "Id": "arn:aws:states:us-east-1:123456789012:execution:stateMachineName:executionName", "Input": { "key": "value" }, "Name": "executionName", "RoleArn": "arn:aws:iam::123456789012:role...", "StartTime": "2019-03-26T20:14:13.192Z" }, "State": { "EnteredTime": "2019-03-26T20:14:13.192Z", "Name": "Test", "RetryCount": 3 }, "StateMachine": { "Id": "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName", "Name": "name" }, "Task": { "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W" }

132

Page 140: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドContext オブジェクト

}

Note

Map 状態に関連するコンテキストオブジェクトデータについては、「Map 状態のコンテキストオブジェクトデータ (p. 133)」を参照してください。

コンテキストオブジェクトへのアクセスコンテキストオブジェクトにアクセスするには、パスを使用して状態の入力を選択したときと同様に、.$を末尾に追加したパラメータ名をまず指定します。次に、入力の代わりにコンテキストオブジェクトデータにアクセスするには、$$. をパスの先頭に追加します。これによって、パスを使用してコンテキストオブジェクト内のノードを選択するように AWS Step Functions に指示します。

このタスク状態の例は、パスを使用して実行 Amazon リソースネーム (ARN) を取得して Amazon SimpleQueue Service (Amazon SQS) メッセージに渡します。

{ "Order Flight Ticket Queue": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage", "Parameters": { "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/flight-purchase", "MessageBody": { "From": "YVR", "To": "SEA", "Execution.$": "$$.Execution.Id" } }, "Next": "NEXT_STATE" }}

Note

統合されたサービスの呼び出しにタスクトークンを使用する方法の詳細については、「タスクトークンのコールバックまで待機する (p. 146)」を参照してください。

Map 状態のコンテキストオブジェクトデータMap (p. 113) 状態を処理する際にコンテキストオブジェクトの 2 つの項目 Value と Index を追加で使用できます。Index には、現在の反復で処理されている配列項目のインデックス番号が含まれています。Map 状態内では、コンテキストオブジェクトに以下のものが含まれます。

"Map": { "Item": { "Index": "Number", "Value": "String" }}

これらは Map 状態でのみ使用でき、"Parameters" (p. 122) フィールドの "Iterator" セクションの前に指定できます。

Note

コンテキストオブジェクトのパラメータは、 "Iterator" セクションに含まれている状態内ではなく、メインの Map 状態の "Parameters" ブロック内に定義する必要があります。

133

Page 141: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドContext オブジェクト

シンプルな Map 状態のステートマシンでは、コンテキストオブジェクトの情報を次のように挿入できます。

{ "StartAt": "ExampleMapState", "States": { "ExampleMapState": { "Type": "Map", "Parameters": { "ContextIndex.$": "$$.Map.Item.Index", "ContextValue.$": "$$.Map.Item.Value" }, "Iterator": { "StartAt": "TestPass", "States": { "TestPass": { "Type": "Pass", "End": true } } }, "End": true } }}

次の入力を使用して前のステートマシンを実行すると、 Index と Value が出力に挿入されます。

[ { "who": "bob" }, { "who": "meg" }, { "who": "joe" }]

実行の出力は次のとおりです。

[ { "ContextValue": { "who": "bob" }, "ContextIndex": 0 }, { "ContextValue": { "who": "meg" }, "ContextIndex": 1 }, { "ContextValue": { "who": "joe" }, "ContextIndex": 2 }]

134

Page 142: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド実行

Step Functions での実行ステートマシンの実行は、AWS Step Functions ステートマシンが実行されタスクを行うときに発生します。各 Step Functions ステートマシンでは、複数の同時実行を開始できます。これには、Step Functionsコンソールから開始したり、AWS SDK、Step Functions API アクション、または AWS Command LineInterface (AWS CLI) を使用します。実行は JSON 入力を受け取り JSON 出力を生成します。以下の方法で Step Functions の実行を開始できます。

• StartExecution API アクションを呼び出します。• Step Functions コンソールで新しい実行を開始 (p. 15)します。• Amazon CloudWatch Events (p. 44) を使用して実行を開始します。• Amazon API Gateway (p. 49) で実行を開始します。• Task 状態からネストされたワークフロー実行 (p. 135)を開始します。

Step Functions の別の使用方法の詳細については、「開発オプション (p. 18)」を参照してください。

タスク状態からワークフロー実行を開始するAWS Step Functions は、ステートマシンの Task 状態から直接ワークフロー実行を開始できます。これにより、ワークフローを小さなステートマシンに分割し、これらの他のステートマシンの実行を開始できます。これらの新しいワークフロー実行を開始することで、以下のことが可能になります。

• 高レベルのワークフローを、低レベルのタスク固有のワークフローから分離する。• 別のステートマシンを複数回呼び出すことによって、要素が繰り返されるのを回避する。• モジュール式の再利用可能なワークフローのライブラリを作成して、開発を迅速化する。• 複雑さを軽減し、ステートマシンの編集とトラブルシューティングを容易にする。

Step Functions は、独自の API を統合サービス (p. 143)として呼び出すことによって、これらのワークフロー実行を開始できます。Task 状態から StartExecution API アクションを呼び出し、必要なパラメータを渡すだけです。いずれかのサービス統合パターン (p. 145)を使用して Step Functions API を呼び出すことができます。ステートマシンの新しい実行を開始するには、次のような Task 状態を使用します。

{ "Type":"Task", "Resource":"arn:aws:states:::states:startExecution", "Parameters":{ "StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld", "Input":{ "Comment":"Hello world!" }, "Retry":[ { "ErrorEquals":[ "StepFunctions.ExecutionLimitExceeded" ] } ], "End":true }}

この Task 状態は、HelloWorld ステートマシンの新しい実行を開始し、JSON コメントを入力として渡します。

135

Page 143: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドエラー処理

Note

StartExecution API アクションクォータでは、開始できる実行の数を制限できます。StepFunctions.ExecutionLimitExceeded で Retry を使用して、実行が確実に開始されるようにします。以下を参照してください。

• API アクションのスロットリングに関連するクォータ (p. 245)• Step Functions でのエラー処理 (p. 136)

ワークフロー実行の関連付け開始されたワークフロー実行とそれを開始した実行を関連付けるには、コンテキストオブジェクトから実行入力に実行 ID を渡します。実行中の Task 状態から、コンテキストオブジェクトの ID にアクセスできます。パラメータ名に .$ を追加し、$$.Execution.Id を使用してコンテキストオブジェクトの ID を参照することで、実行 ID を渡します。

"AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id"

実行を開始するときに、AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID という特別なパラメータを使用できます。この関連付けが含まれている場合、Step Functions コンソールの [ステップの詳細] セクションにリンクが表示されます。指定すると、ワークフローの実行を、実行の開始から、開始したワークフロー実行まで簡単にトレースできます。前の例を使用して、次のように実行 ID を HelloWorld ステートマシンの開始した実行に関連付けます。

{ "Type":"Task", "Resource":"arn:aws:states:::states:startExecution", "Parameters":{ "StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld", "Input": { "Comment": "Hello world!", "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id" } }, "End":true}

詳細については、以下を参照してください。

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)• コンテキストオブジェクトへのアクセス (p. 133)• AWS Step Functions (p. 177)

Step Functions でのエラー処理状態でランタイムエラーが発生することがあります。エラーはさまざまな理由で発生します。

• ステートマシンの定義の問題 (たとえば、Choice 状態に一致するルールがない)。• タスクの失敗 (たとえば、Lambda 関数の例外)。• 一時的な問題 (たとえば、ネットワークパーティションイベント)。

デフォルトでは、状態でエラーが報告されると、AWS Step Functions の実行全体が失敗します。

136

Page 144: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドエラー名

エラー名Step Functions は大文字と小文字を区別する文字列を使用して Amazon ステートメント言語 でエラーを識別します。これをエラー名といいます。Amazon ステートメント言語 は、よく知られているエラー名付ける一連の組み込み文字列を定義します。すべて States. というプレフィックスが付いています。

States.ALL

すべての既知のエラー名に一致するワイルドカード。States.Runtime

処理できなかった例外のため、実行に失敗しました。多くの場合、これらは実行時のエラー (nullJSON ペイロードに InputPath または OutputPath を適用しようとしたなど) によって発生します。States.Runtime エラーは再試行可能ではなく、常に実行が失敗します。States.ALL での再試行またはキャッチでは States.Runtime エラーは検出されません。

States.Timeout

TimeoutSeconds 値より長時間実行されたか、HeartbeatSeconds 値より長い間隔ハートビートの送信に失敗した Task 状態。

States.TaskFailed

実行中に失敗した Task 状態。States.Permissions

指定されたコードの実行に必要な特権が足りないため失敗した Task 状態。

状態は別の名前でエラーを報告することがあります。ただし、これらは States. プレフィックスで始まるとは限りません。

ベストプラクティスとして、本番稼働用コードが AWS Lambda サービス例外(Lambda.ServiceException および Lambda.SdkClientException) を処理できることを確認します。詳細については、「Lambda サービス例外の処理 (p. 241)」を参照してください。

Note

Lambda で処理されないエラーは、エラー出力で Lambda.Unknown と表示されます。このようなエラーには、メモリ不足や関数タイムアウトが含まれます。これらのエラーを処理するには、Lambda.Unknown、States.ALL、または States.TaskFailed で一致できます。Lambda での呼び出しが最大数に達すると、Lambda.TooManyRequestsException というエラーになります。Lambda の Handled および Unhandled エラーの詳細については、AWSLambda Developer Guideの「FunctionError」を参照してください。

エラー後の再試行Task および Parallel 状態は Retry という名前のフィールドを持つことができます。その値は retriersと呼ばれるオブジェクトの配列にする必要があります。個々の retrier は特定回数の再試行を表し、通常は時間間隔が増加していきます。

Note

再試行は状態遷移として扱われます。状態遷移が請求に与える影響の詳細については、「StepFunctions 料金表」を参照してください。

retrier には以下のフィールドがあります。

137

Page 145: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドエラー後の再試行

ErrorEquals (必須)

エラー名に一致する空でない文字列の配列です。状態がエラーを報告すると、Step Functions はretriers 全体をスキャンします。エラー名がこの配列に表示されている場合、この retrier に記述されている再試行ポリシーを実装します。

IntervalSeconds(オプション)

最初の再試行前の秒数を表す整数 (デフォルトは 1)。MaxAttempts(オプション)

再試行の最大回数を表す正の整数 (デフォルトでは 3)。エラーが指定された回数を超えて再発する場合は、再試行が停止され通常のエラー処理が再開されます。値 0 を指定すると、エラーは再試行されません。

BackoffRate(オプション)

各試行間で再試行間隔が増加する乗数 (デフォルトでは 2.0)。

この Retry の例では、2 回の再試行を、3 秒および 4.5 秒間待機した後に行います。

"Retry": [ { "ErrorEquals": [ "States.Timeout" ], "IntervalSeconds": 3, "MaxAttempts": 2, "BackoffRate": 1.5} ]

retrier の ErrorEquals フィールドにあらかじめ表示される名前 States.ALL は、すべてのエラー名に一致するワイルドカードです。ErrorEquals 配列では単独で表示される必要があり、Retry 配列では最後の retrier に表示される必要があります。

この Retry フィールドの例では、States.Timeout を除くすべてのエラーを再試行します。

"Retry": [ { "ErrorEquals": [ "States.Timeout" ], "MaxAttempts": 0}, { "ErrorEquals": [ "States.ALL" ]} ]

複雑な再試行シナリオretrier のパラメータは、単一状態実行のコンテキストの retrier に対するすべてのアクセスに適用されます。

次の Task 状態の場合を考えてみます。

"X": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:task:X", "Next": "Y", "Retry": [ { "ErrorEquals": [ "ErrorA", "ErrorB" ], "IntervalSeconds": 1, "BackoffRate": 2.0, "MaxAttempts": 2 }, { "ErrorEquals": [ "ErrorC" ], "IntervalSeconds": 5 } ],

138

Page 146: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドFallback 状態

"Catch": [ { "ErrorEquals": [ "States.ALL" ], "Next": "Z" } ]}

このタスクは 5 回連続で失敗し、エラー名 ErrorA、ErrorB、ErrorC、ErrorB、および ErrorB を出力します。結果として以下が発生します。

• 最初の 2 つのエラーが最初の retrier に一致し、1 秒および 2 秒の待機が発生します。• 3 番目のエラーが 2 番目の retrier に一致し、5 秒の待機が発生します。• 4 番目のエラーが 1 番目の retrier に一致し、4 秒の待機が発生します。• 5 番目のエラーも最初の retrier に一致します。ただし、その特定のエラー (ErrorB) における再試行の

上限 (MaxAttempts) である 2 回にすでに達しているため、再試行は失敗し、実行は Catch フィールドを介して Z 状態にリダイレクトされます。

Fallback 状態Task および Parallel 状態は Catch というフィールドを持つことができます。このフィールドの値は、catchers と言われるオブジェクトの配列である必要があります。

catcher には以下のフィールドがあります。

ErrorEquals (必須)

同じ名前の retrier フィールドで指定されたエラー名と正確に一致する空ではない文字列。Next (必須)

ステートマシンの状態名のいずれかに正確に一致する必要がある文字列。ResultPath(オプション)

Next フィールドに指定された状態に対して送信される入力を決定するパス (p. 119)。

状態がエラーを報告し、Retry フィールドがないか再試行でエラーが解決できなかった場合、StepFunctions は配列にリストされた順序で catcher をスキャンします。エラー名が catcher の ErrorEqualsフィールドの値に表示される場合、ステートマシンは Next フィールドに名前がある状態に移行します。

catcher の ErrorEquals フィールドにあらかじめ表示される名前 States.ALL は、すべてのエラー名に一致するワイルドカードです。ErrorEquals 配列では単独で表示される必要があり、Catch 配列では最後の catcher に表示される必要があります。

次の Catch フィールドの例では、Lambda 関数が処理されない Java 例外を出力した場合にRecoveryState という名前の状態に移行します。それ以外の場合は、フィールドは EndState 状態に移行します。

"Catch": [ { "ErrorEquals": [ "java.lang.Exception" ], "ResultPath": "$.error-info", "Next": "RecoveryState"}, { "ErrorEquals": [ "States.ALL" ], "Next": "EndState"} ]

Note

各 catcher には処理するエラーを複数指定できます。

139

Page 147: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドRetry の使用例と Catch の使用例

エラー出力Step Functions が catch 名に指定された状態に移行する場合、オブジェクトには通常 Cause というフィールドが含まれます。このフィールドの値は人間が読んで理解できるエラーの説明です。このオブジェクトはエラー出力といいます。

この例では、最初の catcher に ResultPath フィールドが含まれています。これは状態の最上位のResultPath フィールドに似た動作を行い、次のいずれかの結果になります。

• 状態を実行した結果を取得して、状態の入力の一部 (または状態の入力のすべて) を上書きします。• 結果を取得して入力に追加します。catcher によって処理されたエラーの場合、状態の実行結果はエラー

出力です。

したがって、この例では、最初の catcher ではエラー出力が error-info という名前のフィールドとして入力に追加されます (入力にこの名前のフィールドが存在しない場合)。次に、入力全体がRecoveryState に送信されます。2 番目 catcher では、エラー出力によって入力が上書きされ、エラー出力のみが EndState に送信されます。

Note

ResultPath フィールドを指定しない場合、入力全体を選択して上書きする $ がデフォルトで設定されます。

状態に Retry および Catch フィールドの両方がある場合、Step Functions は最初に該当する retriers を使用し、その後、再試行ポリシーがエラーを解決できなかった場合、一致する catcher を適用します。

Retry の使用例と Catch の使用例次の例で定義されたステートマシンには、2 つの Lambda 関数があるとします。1 つは常に失敗し、1 つはステートマシンで定義されたタイムアウトが発生するのに十分な時間待機します。

これは、常に失敗してメッセージ error を返す Lambda 関数の定義です。以下のステートマシンの例では、この Lambda 関数の名前は FailFunction です。

exports.handler = (event, context, callback) => { callback("error");};

これは、10 秒間スリープする Lambda 関数の定義です。以下のステートマシンの例では、この Lambda関数の名前は sleep10 です。

Note

Lambda コンソールでこの Lambda 関数を作成するときは、[Advanced settings] セクションの[Timeout] 値を 3 秒 (デフォルト) から 11 秒に変更してください。

exports.handler = (event, context, callback) => { setTimeout(function(){ }, 11000);};

Retry を使用して失敗を処理するこのステートマシンは Retry フィールドを使用して、失敗してエラー名 HandledError を出力する関数を再試行します。この関数は 2 回再試行されます。再試行間にはエクスポネンシャルパックオフが使用されます。

140

Page 148: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドRetry の使用例と Catch の使用例

{ "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction", "Retry": [ { "ErrorEquals": ["HandledError"], "IntervalSeconds": 1, "MaxAttempts": 2, "BackoffRate": 2.0 } ], "End": true } }}

このバリエーションでは、Lambda 関数が出力するすべてのエラーに一致する事前定義されたエラーコード States.TaskFailed を使用します。

{ "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction", "Retry": [ { "ErrorEquals": ["States.TaskFailed"], "IntervalSeconds": 1, "MaxAttempts": 2, "BackoffRate": 2.0 } ], "End": true } }}

Note

ベストプラクティスとしては、Lambda 関数をリファレンスするタスクが Lambda サービス例外を処理する必要があります。詳細については、「Lambda サービス例外の処理 (p. 241)」を参照してください。

Catch を使用して失敗を処理するこの例では、Catch フィールドを使用します。Lambda 関数がエラーを出力すると、そのエラーがキャッチされ、ステートマシンは fallback 状態に移行します。

{ "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction", "Catch": [ {

141

Page 149: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドRetry の使用例と Catch の使用例

"ErrorEquals": ["HandledError"], "Next": "fallback" } ], "End": true }, "fallback": { "Type": "Pass", "Result": "Hello, AWS Step Functions!", "End": true } }}

このバリエーションでは、Lambda 関数が出力するすべてのエラーに一致する事前定義されたエラーコード States.TaskFailed を使用します。

{ "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction", "Catch": [ { "ErrorEquals": ["States.TaskFailed"], "Next": "fallback" } ], "End": true }, "fallback": { "Type": "Pass", "Result": "Hello, AWS Step Functions!", "End": true } }}

Retry を使用してタイムアウトを処理するこのステートマシンは Retry フィールドを使用して、タイムアウトした関数を再試行します。この関数は2 回再試行されます。再試行間にはエクスポネンシャルパックオフが使用されます。

{ "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:sleep10", "TimeoutSeconds": 2, "Retry": [ { "ErrorEquals": ["States.Timeout"], "IntervalSeconds": 1, "MaxAttempts": 2, "BackoffRate": 2.0 } ], "End": true } }}

142

Page 150: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサービス統合

Catch を使用してタイムアウトを処理するこの例では、Catch フィールドを使用します。タイムアウトが発生すると、ステートマシンは fallback状態に移行します。

{ "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:sleep10", "TimeoutSeconds": 2, "Catch": [ { "ErrorEquals": ["States.Timeout"], "Next": "fallback" } ], "End": true }, "fallback": { "Type": "Pass", "Result": "Hello, AWS Step Functions!", "End": true } }}

Note

状態入力とエラーを保持するには、ResultPath を使用します。「ResultPath を使用して、エラーと入力の両方を Catch に含める (p. 129)」を参照してください。

サービスの AWS Step Functions との統合AWS Step Functions は一部の AWS サービスを統合するため、API アクションを呼び出し、StepFunctions 内で Amazon ステートメント言語 から実行を直接調整できます。これらのサービスで API にパラメータを直接呼び出して渡すことができます。

Amazon ステートメント言語 でTask 状態からこれらのサービスを直接調整します。たとえば、StepFunctions を使用して以下に他のサービスを呼び出すことができます。

• AWS Lambda 関数を呼び出す• AWS Batch ジョブを実行後、結果に基づき、別のアクションを実行する• Amazon DynamoDB に項目を挿入するか、ここから項目を取得する• Amazon Elastic Container Service (Amazon ECS) タスクを実行して、完了するまで待機する• Amazon Simple Notification Service (Amazon SNS) でトピックに発行する• Amazon Simple Queue Service (Amazon SQS) でメッセージを送信する• AWS Glue または Amazon SageMakerのジョブを管理する• Amazon EMR ジョブを実行するためのワークフローを構築します。• AWS Step Functions ワークフロー実行を開始します。

標準ワークフローと Express ワークフローは、同じサービス統合セットをサポートしますが、同じ統合パターンはサポートしていません。Express ワークフローは、ジョブの実行 (.sync) またはコールバックの待

143

Page 151: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサービス統合

機 (.waitForTaskToken) をサポートしていません。詳細については、「標準ワークフローとExpress ワークフロー (p. 88)」を参照してください。

Standard Workflows

サポートされるサービス統合

サービス リクエストレスポンス (p. 145)

ジョブの実行(.sync) (p. 146)

コールバックまで待機(.waitForTaskToken) (p. 146)

Lambda (p. 153) ✓   ✓

AWS Batch (p. 155) ✓ ✓  

DynamoDB (p. 156) ✓    

Amazon ECS/AWSFargate (p. 158)

✓ ✓ ✓

AmazonSNS (p. 160)

✓   ✓

AmazonSQS (p. 161)

✓   ✓

AWS Glue (p. 163) ✓ ✓  

AmazonSageMaker (p. 163)

✓ ✓  

AmazonEMR (p. 169)

✓ ✓  

AWSCodeBuild (p. 176)

✓ ✓  

AWS StepFunctions (p. 177)

✓ ✓ ✓

Express Workflows

サポートされるサービス統合

サービス リクエストレスポンス (p. 145)

ジョブの実行(.sync) (p. 146)

コールバックまで待機(.waitForTaskToken) (p. 146)

Lambda (p. 153) ✓    

AWS Batch (p. 155) ✓    

DynamoDB (p. 156) ✓    

Amazon ECS/AWSFargate (p. 158)

✓    

AmazonSNS (p. 160)

✓    

AmazonSQS (p. 161)

✓    

144

Page 152: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサービス統合パターン

サービス リクエストレスポンス (p. 145)

ジョブの実行(.sync) (p. 146)

コールバックまで待機(.waitForTaskToken) (p. 146)

AWS Glue (p. 163) ✓    

AmazonSageMaker (p. 163)

✓    

AmazonEMR (p. 169)

✓    

AWSCodeBuild (p. 176)

✓    

AWS StepFunctions (p. 177)

✓ ✓  

トピック• サービス統合パターン (p. 145)• サービス API にパラメータを渡す (p. 150)• コードスニペット (p. 151)• Step Functions でサポートされる AWS サービス統合 (p. 152)

サービス統合パターンAWS Step Functions は Amazon ステートメント言語 内で直接サービスを統合します。3 つの異なるサービス統合パターンを使用して、これらの AWS のサービスを制御できます。

• サービスを呼び出し、Step Functions が HTTP レスポンスを取得した直後に次のステップに進むことができるようにします。

• サービスを呼び出し、ジョブが完了するまで Step Functions が待機するようにします。• タスクトークンでサービスを呼び出し、トークンがペイロードとともに返されるまで Step Functions が

待機するようにします。

このようなサービス統合パターンは、タスク定義 (p. 94)の "Resource" フィールドで URI を作成した方法に応じて個別に制御されます。

統合されたサービスを呼び出す方法• リクエストレスポンス (p. 145)• ジョブを実行する (p. 146)• タスクトークンのコールバックまで待機する (p. 146)

Note

統合されたサービス用に AWS Identity and Access Management (IAM) を設定する方法については、「統合サービスの IAM ポリシー (p. 264)」を参照してください。

リクエストレスポンスタスクの状態の "Resource" 文字列でサービスを指定する場合にリソースのみを指定すると、StepFunctions は HTTP レスポンスがあるまで待機してから次の状態に進みます。Step Functions はジョブの完了まで待機しません。

145

Page 153: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサービス統合パターン

次の例は Amazon SNS トピックを発行する方法を示しています。

"Send message to SNS":{ "Type":"Task", "Resource":"arn:aws:states:::sns:publish", "Parameters":{ "TopicArn":"arn:aws:sns:us-east-1:123456789012:myTopic", "Message":"Hello from Step Functions!" }, "Next":"NEXT_STATE"}

この例は、Amazon SNS の Publish API を参照します。Publish API の呼び出し後、ワークフローは次の状態に進みます。

ジョブを実行するAWS Batch や Amazon ECS などの統合されたサービスの場合、Step Functions は次の状態に進む前にリクエストの完了まで待機します。Step Functions を待機させるには、タスクの状態の "Resource" フィールドでリソース URI の後に .sync サフィックスを追加します。

たとえば、AWS Batch ジョブを送信する場合には、次のステートマシン定義の "Resource" フィールドを参照します。

"Manage Batch task": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "arn:aws:batch:us-east-2:123456789012:job-definition/testJobDefinition", "JobName": "testJob", "JobQueue": "arn:aws:batch:us-east-2:123456789012:job-queue/testQueue" }, "Next": "NEXT_STATE"}

リソース Amazon リソースネーム (ARN) に追加される .sync 部分によって、ジョブが完了するまで待機するよう Step Functions に伝えられます。AWS Batch submitJob の呼び出し後、ワークフローは停止します。ジョブが完了すると、Step Functions は次の状態に進みます。詳細については、「バッチジョブの管理 (AWS Batch、Amazon SNS) (p. 184)」の AWS Batch サンプルプロジェクトを参照してください。

どの統合されたサービスでジョブの完了の待機 (.sync) がサポートされているかのリストについては、「Step Functions でサポートされる AWS サービス統合 (p. 152)」を参照してください。

Note

.sync または .waitForTaskToken パターンを使用するサービス統合では、IAM のアクセス許可が別途必要です。詳細については、「統合サービスの IAM ポリシー (p. 264)」を参照してください。

タスクトークンのコールバックまで待機するコールバックタスクは、タスクトークンが返されるまでワークフローを待機させる方法を提供します。タスクには、人間による承認、サードパーティとの統合、あるいはレガシーシステムの呼び出しまで待機することが必要になる場合があります。このようなタスクでは、Step Functions を無期限に停止して、外部のプロセスあるいはワークフローが完了するまで待機させることができます。このような状況において Step Functions では、タスクトークンをいくつかの統合されたサービスに渡すことができます。SendTaskSuccess あるいは SendTaskFailure 呼び出しでタスクがタスクトークンを受け取るまで、このタスクは停止します。

146

Page 154: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサービス統合パターン

どの統合されたサービスでタスクトークンの待機 (.waitForTaskToken) がサポートされているかのリストについては、「Step Functions でサポートされる AWS サービス統合 (p. 152)」を参照してください。

Note

.sync または .waitForTaskToken パターンを使用するサービス統合では、IAM のアクセス許可が別途必要です。詳細については、「統合サービスの IAM ポリシー (p. 264)」を参照してください。

トピック• タスクトークンの例 (p. 147)• コンテキストオブジェクトからトークンを取得する (p. 148)• 待機中のタスクにハートビートタイムアウトを設定する (p. 149)

タスクトークンの例

この例では、承認ワークフローの一部としてクレジットチェックを実行するために、外部のマイクロサービスを Step Functions ワークフローに統合する必要があります。Step Functions は、メッセージの一部にタスクトークンが含まれる Amazon SQS メッセージを発行します。1 つの外部システムが Amazon SQSに統合され、キューからメッセージを引き出します。これが完了すると、結果および元のタスクトークンが返されます。その後、Step Functions はワークフローを続行します。

Amazon SQS を参照するタスク定義の "Resource" フィールドには、末尾に追加された.waitForTaskToken が含まれています。

"Send message to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/myQueue", "MessageBody": {

147

Page 155: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサービス統合パターン

"Message": "Hello from Step Functions!", "TaskToken.$": "$$.Task.Token" } }, "Next": "NEXT_STATE"}

これにより、Step Functions に停止してタスクトークンを待つように指示されます。.waitForTaskToken を使用してリソースを指定する場合、状態定義の "Parameters" フィールドで特別なパス指定 ($$.Task.Token) を使用して、タスクトークンにアクセスすることができます。最初の $$. は、そのパスアクセスにコンテキストオブジェクト (p. 148)を指定し、現在実行中のタスクのタスクトークンを取得します。

これが完了すると、外部サービスによって taskToken が含まれた SendTaskSuccess あるいはSendTaskFailure が呼び出されます。この時点でのみ、ワークフローが次の状態へと続行します。

Note

プロセスが SendTaskSuccess または SendTaskFailure とともにタスクトークンを送信することに失敗した場合に無期限に待機することを回避するには、「待機中のタスクにハートビートタイムアウトを設定する (p. 149)」を参照してください。

コンテキストオブジェクトからトークンを取得する

コンテキストオブジェクトは、実行に関する情報が含まれた内部の JSON オブジェクトです。状態の入力と同様に、実行中に "Parameters" フィールドからパスを使用してこれにアクセスできます。タスクの定義内からアクセスすると、これにはタスクトークンを含めた特定の実行に関する情報が含まれます。

{ "Execution": { "Id": "arn:aws:states:us-east-1:123456789012:execution:stateMachineName:executionName", "Input": { "key": "value" }, "Name": "executionName", "RoleArn": "arn:aws:iam::123456789012:role...", "StartTime": "2019-03-26T20:14:13.192Z" }, "State": { "EnteredTime": "2019-03-26T20:14:13.192Z", "Name": "Test", "RetryCount": 3 }, "StateMachine": { "Id": "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName", "Name": "name" }, "Task": { "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W" }}

タスク定義の "Parameters" フィールド内から特別なパスを使用して、タスクトークンにアクセスできます。入力あるいはコンテキストオブジェクトにアクセスするには、.$ をパラメータ名に追加してパラメータがパスになるようにまず指定します。以下では、"Parameters" 仕様内で入力およびコンテキストオブジェクトからのノードを指定します。

"Parameters": { "Input.$": "$", "TaskToken.$": "$$.Task.Token"

148

Page 156: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサービス統合パターン

},

いずれの場合でも、.$ をパラメータ名に追加することで、Step Functions がパスを予期するように指示します。最初のケースでは、"$" は入力全体を含むパスです。後者のケースでは、$$. はパスがコンテキストオブジェクトにアクセスすることを指定し、また、$$.Task.Token は稼働している実行のコンテキストオブジェクト内のタスクトークンの値に対してパラメータを設定します。

Amazon SQS 例では、"Resource" フィールド内の .waitForTaskToken によって、タスクトークンが返されるまで待機するように Step Functions に指示されます。"TaskToken.$": "$$.Task.Token" パラメータは、このトークンを Amazon SQS メッセージの一部として渡します。

"Send message to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/myQueue", "MessageBody": { "Message": "Hello from Step Functions!", "TaskToken.$": "$$.Task.Token" } }, "Next": "NEXT_STATE"}

コンテキストオブジェクトの詳細については、このガイドの「入力および出力処理 (p. 119)」セクションの「Context オブジェクト (p. 132)」を参照してください。

待機中のタスクにハートビートタイムアウトを設定する

タスクトークンを待っているタスクは、実行が 1 年間のサービスクォータに達するまで待機します (状態のスロットリングに関連するクォータ (p. 246) を参照)。実行のスタックを回避するには、ステートマシン定義でハートビートタイムアウト間隔を設定できます。HeartbeatSeconds (p. 94) フィールドを使用して、タイムアウト間隔を指定します。

{ "StartAt": "Push based to SQS", "States": { "Push to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "HeartbeatSeconds": 600, "Parameters": { "MessageBody": { "myTaskToken.$": "$$.Task.Token" }, "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/push-based-queue" }, "ResultPath": "$.SQS", "End": true } }}

このステートマシン定義では、1 つのタスクがメッセージを Amazon SQS にプッシュし、外部プロセスが指定したタスクトークンとともにコールバックするまで待機します。"HeartbeatSeconds": 600フィールドは、ハートビートタイムアウト間隔を 10 分に設定しています。タスクは、タスクトークンが次のいずれかの API アクションとともに返されるまで待機します。

• SendTaskSuccess

• SendTaskFailure

• SendTaskHeartbeat

149

Page 157: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサービス API にパラメータを渡す

待機しているタスクが 10 分以内に有効なタスクトークンを受信しない場合、タスクは States.Timeoutエラー名で失敗します。

詳細については、コールバックタスクサンプルプロジェクト (コールバックパターンの例 (AmazonSQS、Amazon SNS、Lambda) (p. 199)) を参照してください。

サービス API にパラメータを渡すサービス API に渡されるパラメータを管理するには、"Parameters" フィールドを Task 状態で使用します。

静的 JSON をパラメータとして渡すJSON オブジェクトをパラメータとしてリソースに渡すには、ステートマシン定義に直接含めます。

たとえば、SubmitJob API の RetryStrategy パラメータを AWS Batch 用に設定するには、次のようにパラメータに含めます。

"RetryStrategy": { "attempts": 5}

また、静的 JSON を使用して複数のパラメータを渡すこともできます。より複雑な例として、AmazonSNS トピックを発行するタスクの仕様の "Resource" フィールドおよび "Parameters" フィールドを以下に示します。

"Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:us-east-1:123456789012:myTopic", "Message": "test message", "MessageAttributes": { "my attribute no 1": { "DataType": "String", "StringValue": "value of my attribute no 1" }, "my attribute no 2": { "DataType": "String", "StringValue": "value of my attribute no 2" } } },

パスを使用して状態入力をパラメータとして渡す状態の入力の一部をパラメータに渡すには、パス (p. 120)を使用します。パスは $ で始まる文字列です。これを使用して、JSON テキスト内でコンポーネントを識別します。Step Functions パスでは、JsonPath 構文を使用します。

パラメータでパスを使用して入力内の JSON ノードを参照するように指定するには、パラメータ名の末尾を .$ で終了します。たとえば、message という名前のノードに状態入力のテキストがある場合、そのパスで入力 JSON を参照することでパラメータに渡すことができます。

次の状態入力を使用します。

{ "comment": "A message in the state input", "input": { "message": "foo", "otherInfo": "bar" },

150

Page 158: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドコードスニペット

"data": "example"}

次のようにして、メッセージ foo をパラメータとして渡すことができます。

"Parameters": {"Message.$": "$.input.message"},

Step Functions のパラメータの使用の詳細については、以下を参照してください。

• 入力および出力処理 (p. 119)• InputPath およびパラメータ (p. 121)

コンテキストオブジェクトノードをパラメータとして渡す静的コンテンツおよび状態の入力からのノードに加えて、コンテキストオブジェクトからノードをパラメータとして渡すことができます。コンテキストオブジェクトは、ステートマシンの実行中に存在する動的な JSON データです。これにはステートマシンと現在の実行に関する情報が含まれます。コンテキストオブジェクトにアクセスするには、状態の定義の "Parameters" フィールド内のパスを使用できます。

コンテキストオブジェクトに関する詳細と "Parameters" フィールドからデータにアクセスする方法については、次を参照してください。

• Context オブジェクト (p. 132)• コンテキストオブジェクトへのアクセス (p. 133)• コンテキストオブジェクトからトークンを取得する (p. 148)

コードスニペットAWS Step Functions では、コードスニペットは、ステートマシン定義で新しい状態のオプションを簡単に設定する方法です。ステートマシンを編集または作成する場合、コードペインの最上部に [Generate codesnippet (コードスニペットの生成)] メニューが含まれます。[Generate code snippet (コードスニペットの生成)] メニューでオプションを選択すると、その状態に固有のパラメータを設定するウィンドウが開き、選択したオプションに基づいて Amazon ステートメント言語 コードが生成されます。

たとえば、[AWS Batch: Manage a job (AWS Batch: ジョブの管理)] コードスニペットを選択する場合、以下を設定できます。

• Batch job name (Batch ジョブ名) – ジョブ名を指定します。実行時にパスを使用して指定することもできます。

• Batch job definition (Batch ジョブ定義) – アカウント内の既存の AWS Batch ジョブの Amazon リソースネーム (ARN) を選択するか、ジョブ定義を入力します。実行時にパスを使用して指定することもできます。

• [Batch job queue (Batch ジョブキュー)] – アカウント内の既存の AWS Batch ジョブキューの ARN を選択するか、キュー定義を入力します。実行時にパスを使用して指定することもできます。

• [Run synchronously (同期的に実行)] – このオプションを選択すると、AWS Batch ジョブが完了してから次の状態に進むように Step Functions が設定されます。

Note

サービスパラメータを指定する詳細については、「サービス API にパラメータを渡す (p. 150)」を参照して ください。

AWS Batch オプションを設定した後、Retry、TimeoutSeconds.、Catch などの状態のエラー処理オプションを指定できます。

151

Page 159: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

詳細については、「エラー名 (p. 137)」の「Amazon ステートメント言語」を参照してください。

Step Functions サービスの統合に関する詳細については、以下を参照してください。

• サービスの AWS Step Functions との統合 (p. 143)• Step Functions でサポートされる AWS サービス統合 (p. 152)• コードスニペットの使用 (p. 69)

Step Functions でサポートされる AWS サービス統合以下のトピックには、他の AWS のサービスを調整するために Amazon ステートメント言語 でサポートされている API、パラメータ、リクエスト/レスポンスの構文が含まれています。トピックでは、コード例も示します。タスクの状態の Resource フィールドで、統合されたサービスを Amazon ステートメント言語から直接呼び出すことができます。

3 つのサービス統合パターンを使用できます。

• デフォルトのレスポンス (p. 145)• ジョブが完了するまで待機します (.sync)。 (p. 146)• タスクトークンを待ちます (.waitForTaskToken)。 (p. 146)

標準ワークフローと Express ワークフローは、同じサービス統合セットをサポートしますが、同じ統合パターンはサポートしていません。Express ワークフローは、ジョブの実行 (.sync) またはコールバックの待機 (.waitForTaskToken) をサポートしていません。詳細については、「標準ワークフローとExpress ワークフロー (p. 88)」を参照してください。

Standard Workflows

サポートされるサービス統合

サービス リクエストレスポンス (p. 145)

ジョブの実行(.sync) (p. 146)

コールバックまで待機(.waitForTaskToken) (p. 146)

Lambda (p. 153) ✓   ✓

AWS Batch (p. 155) ✓ ✓  

DynamoDB (p. 156) ✓    

Amazon ECS/AWSFargate (p. 158)

✓ ✓ ✓

AmazonSNS (p. 160)

✓   ✓

AmazonSQS (p. 161)

✓   ✓

AWS Glue (p. 163) ✓ ✓  

AmazonSageMaker (p. 163)

✓ ✓  

AmazonEMR (p. 169)

✓ ✓  

CodeBuild (p. 176) ✓ ✓  

152

Page 160: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

サービス リクエストレスポンス (p. 145)

ジョブの実行(.sync) (p. 146)

コールバックまで待機(.waitForTaskToken) (p. 146)

AWS StepFunctions (p. 177)

✓ ✓ ✓

Express Workflows

サポートされるサービス統合

サービス リクエストレスポンス (p. 145)

ジョブの実行(.sync) (p. 146)

コールバックまで待機(.waitForTaskToken) (p. 146)

Lambda (p. 153) ✓    

AWS Batch (p. 155) ✓    

DynamoDB (p. 156) ✓    

Amazon ECS/AWSFargate (p. 158)

✓    

AmazonSNS (p. 160)

✓    

AmazonSQS (p. 161)

✓    

AWS Glue (p. 163) ✓    

AmazonSageMaker (p. 163)

✓    

AmazonEMR (p. 169)

✓    

CodeBuild (p. 176) ✓    

StepFunctions (p. 177)

✓ ✓  

Step Functions で Lambda を呼び出すStep Functions can control certain AWS services directly from the Amazon ステートメント言語. For moreinformation, see the following:

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)

状態の出入力および結果の管理については、「Step Functions の入出力処理 (p. 119)」を参照してください。

サポートされている AWS Lambda API:

• Invoke

• リクエストの構文

153

Page 161: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

• サポートされているパラメータ• ClientContext

• FunctionName

• InvocationType

• Qualifier

• Payload

• レスポンスの構文

以下には、Lambda 関数を呼び出す Task 状態が含まれます。

{ "StartAt":"CallLambda", "States":{ "CallLambda":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke", "Parameters":{ "FunctionName":"MyFunction" }, "End":true } }}

以下には、コールバック (p. 146)サービス統合パターンを実装する Task 状態が含まれています。

{ "StartAt":"GetManualReview", "States":{ "GetManualReview":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken", "Parameters":{ "FunctionName":"get-model-review-decision", "Payload":{ "model.$":"$.new_model", "token.$":"$$.Task.Token" }, "Qualifier":"prod-v1" }, "End":true } }}

Lambda 関数を単に呼び出すには、"Resource" 文字列でリソース Amazon リソースネーム ARN を直接呼び出すこともできます。

{ "StartAt":"CallFunction", "States":{ "CallFunction": { "Type":"Task", "Resource":"arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "End": true } }}

154

Page 162: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

"Resource" フィールドから ARN を直接使用して Lambda を呼び出す場合、.waitForTaskToken を指定することはできません。ステート入力は、ペイロードとして Lambda に渡されます。Lambda 関数の出力が結果です。Lambda タスクがタスクトークンを待つようにするには、前のコールバックパターンの例を参照してください。

Lambda 関数の特定バージョンまたはエイリアスを呼び出すには、Resource フィールドの ARN でそれらのオプションを指定します。Lambda のドキュメントで以下を参照してください。

• AWS Lambda バージョニング• AWS Lambda エイリアス

For information on how to configure IAM when using Step Functions with other AWS services, see 統合サービスの IAM ポリシー (p. 264).

Step Functions を使用して AWS Batch を管理するStep Functions can control certain AWS services directly from the Amazon ステートメント言語. For moreinformation, see the following:

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)

サポートされている AWS Batch API:Note

Parameters in Step Functions are expressed in PascalCase, even when the native service API iscamelCase.

• SubmitJob

• リクエストの構文• サポートされているパラメータ:

• ArrayProperties

• ContainerOverrides

• DependsOn

• JobDefinition

• JobName

• JobQueue

• Parameters

• RetryStrategy

• Timeout

• レスポンスの構文

以下には、AWS Batch ジョブを送信し、完了するまで待機する Task が含まれます。

{ "StartAt": "BATCH_JOB", "States": { "BATCH_JOB": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "preprocessing", "JobName": "PreprocessingBatchJob",

155

Page 163: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

"JobQueue": "SecondaryQueue", "Parameters.$": "$.batchjob.parameters", "ContainerOverrides": { "Vcpus": 4 } }, "End": true } }}

For information on how to configure IAM when using Step Functions with other AWS services, see 統合サービスの IAM ポリシー (p. 264).

Step Functions を使用した DynamoDB API の呼び出しStep Functions can control certain AWS services directly from the Amazon ステートメント言語. For moreinformation, see the following:

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)

Note

There is a quota for the maximum input or result data size for a task in Step Functions. Thisrestricts you to 32,768 characters of data when you send to, or receive data from, another service.See ステートマシンの実行に関連するクォータ (p. 244).

サポートされている Amazon DynamoDB API および構文:

• GetItem

• リクエストの構文• サポートされているパラメータ:

• Key

• TableName

• AttributesToGet

• ConsistentRead

• ExpressionAttributeNames

• ProjectionExpression

• ReturnConsumedCapacity

• レスポンスの構文• PutItem

• リクエストの構文• サポートされているパラメータ:

• Item

• TableName

• ConditionalOperator

• ConditionExpression

• Expected

• ExpressionAttributeNames

• ExpressionAttributeValues

• ReturnConsumedCapacity

156

Page 164: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

• ReturnItemCollectionMetrics

• ReturnValues

• レスポンスの構文• DeleteItem

• リクエストの構文• サポートされているパラメータ:

• Key

• TableName

• ConditionalOperator

• ConditionExpression

• Expected

• ExpressionAttributeNames

• ExpressionAttributeValues

• ReturnConsumedCapacity

• ReturnItemCollectionMetrics

• ReturnValues

• レスポンスの構文• UpdateItem

• リクエストの構文• サポートされているパラメータ:

• Key

• TableName

• AttributeUpdates

• ConditionalOperator

• ConditionExpression

• Expected

• ExpressionAttributeNames

• ExpressionAttributeValues

• ReturnConsumedCapacity

• ReturnItemCollectionMetrics

• ReturnValues

• UpdateExpression

• レスポンスの構文

DynamoDB からメッセージを取得する Task 状態を以下に示します。

"Read Next Message from DynamoDB": { "Type": "Task", "Resource": "arn:aws:states:::dynamodb:getItem", "Parameters": { "TableName": "TransferDataRecords-DDBTable-3I41R5L5EAGT", "Key": { "MessageId": {"S.$": "$.List[0]"} } }, "ResultPath": "$.DynamoDB", "Next": "Send Message to SQS" },

157

Page 165: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

Note

マップまたはリストをマップ内の DynamoDB に渡すことはできません。

この状態を実例で確認するには、データレコードの転送 (Lambda、DynamoDB、Amazon SQS) (p. 191)サンプルプロジェクトを参照してください。

For information on how to configure IAM when using Step Functions with other AWS services, see 統合サービスの IAM ポリシー (p. 264).

Step Functions で Amazon ECS または Fargate タスクを管理するStep Functions can control certain AWS services directly from the Amazon ステートメント言語. For moreinformation, see the following:

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)

サポートされている Amazon ECS/Fargate API と構文:

Note

Parameters in Step Functions are expressed in PascalCase, even when the native service API iscamelCase.

• RunTask は、指定されたタスク定義を使用して新しいタスクを開始します。• リクエストの構文• サポートされているパラメータ:

• Cluster

• Group

• LaunchType

• NetworkConfiguration

• Overrides

• PlacementConstraints

• PlacementStrategy

• PlatformVersion

• TaskDefinition

• レスポンスの構文

Note

Overrides パラメータで、Step Functions は、executionRoleArn や taskRoleArn をContainerOverrides としてサポートしていません。

Amazon ECS タスクにデータを渡す

Step Functions can control certain AWS services directly from the Amazon ステートメント言語. For moreinformation, see the following:

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)

158

Page 166: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

overrides を使用することで、コンテナのデフォルトコマンドを上書きし、入力を Amazon ECS タスクに渡すことができます。「ContainerOverride」を参照してください。この例では、JsonPath を使用して、入力の Task の値を Task 状態に渡します。

以下には、Amazon ECS タスクを実行し、完了するまで待機する Task が含まれます。

{ "StartAt": "Run an ECS Task and wait for it to complete", "States": { "Run an ECS Task and wait for it to complete": { "Type": "Task", "Resource": "arn:aws:states:::ecs:runTask.sync", "Parameters": { "Cluster": "cluster-arn", "TaskDefinition": "job-id", "Overrides": { "ContainerOverrides": [ { "Name": "container-name", "Command.$": "$.commands" } ] } }, "End": true } }}

ContainerOverrides の "Command.$": "$.commands" 行は状態の入力からコンテナにコマンドを渡します。

前の例では、実行への入力が次の場合、各コマンドはコンテナのオーバーライドとして渡されます。

{ "commands": [ "test command 1", "test command 2", "test command 3" ]}

以下には Amazon ECS タスクを実行する Task 状態が含まれ、その後タスクトークンが返されるまで待機します。「タスクトークンのコールバックまで待機する (p. 146)」を参照してください。

{ "StartAt":"Manage ECS task", "States":{ "Manage ECS task":{ "Type":"Task", "Resource":"arn:aws:states:::ecs:runTask.waitForTaskToken", "Parameters":{ "LaunchType":"FARGATE", "Cluster":"cluster-arn", "TaskDefinition":"job-id", "Overrides":{ "ContainerOverrides":[ { "Name":"container-name", "Environment":[ { "Name":"TASK_TOKEN_ENV_VARIABLE",

159

Page 167: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

"Value.$":"$$.Task.Token" } ] } ] } }, "End":true } }}

For information on how to configure IAM when using Step Functions with other AWS services, see 統合サービスの IAM ポリシー (p. 264).

Step Functions を使用した Amazon SNS の呼び出しStep Functions can control certain AWS services directly from the Amazon ステートメント言語. For moreinformation, see the following:

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)

サポートされている Amazon SNS API:

Note

There is a quota for the maximum input or result data size for a task in Step Functions. Thisrestricts you to 32,768 characters of data when you send to, or receive data from, another service.See ステートマシンの実行に関連するクォータ (p. 244).

• Publish

• リクエストの構文• サポートされているパラメータ

• Message

• MessageAttributes

• MessageStructure

• PhoneNumber

• Subject

• TargetArn

• TopicArn

• レスポンスの構文

以下には、Amazon Simple Notification Service (Amazon SNS) トピックを公開する Task 状態が含まれます。

{ "StartAt": "Publish to SNS", "States": { "Publish to SNS": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:us-east-1:123456789012:myTopic", "Message.$": "$.input.message", "MessageAttributes": {

160

Page 168: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

"my attribute no 1": { "DataType": "String", "StringValue": "value of my attribute no 1" }, "my attribute no 2": { "DataType": "String", "StringValue": "value of my attribute no 2" } } }, "End": true } }}

以下には、Amazon SNS トピックに発行され、その後タスクトークンが返されるまで待機する Task 状態が含まれます。「タスクトークンのコールバックまで待機する (p. 146)」を参照してください。

{ "StartAt":"Send message to SNS", "States":{ "Send message to SNS":{ "Type":"Task", "Resource":"arn:aws:states:::sns:publish.waitForTaskToken", "Parameters":{ "TopicArn":"arn:aws:sns:us-east-1:123456789012:myTopic", "Message":{ "Input.$":"$", "TaskToken.$":"$$.Task.Token" } }, "End":true } }}

For information on how to configure IAM when using Step Functions with other AWS services, see 統合サービスの IAM ポリシー (p. 264).

Step Functions を使用した Amazon SQS の呼び出しStep Functions can control certain AWS services directly from the Amazon ステートメント言語. For moreinformation, see the following:

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)

サポートされている Amazon SQS API:Note

There is a quota for the maximum input or result data size for a task in Step Functions. Thisrestricts you to 32,768 characters of data when you send to, or receive data from, another service.See ステートマシンの実行に関連するクォータ (p. 244).

• SendMessage

サポートされているパラメータ:• DelaySeconds

• MessageAttribute

161

Page 169: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

• MessageBody

• MessageDeduplicationId

• MessageGroupId

• QueueUrl

• Response syntax

以下には、Amazon Simple Queue Service (Amazon SQS) メッセージを送信する Task 状態が含まれます。

{ "StartAt": "Send to SQS", "States": { "Send to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage", "Parameters": { "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/myQueue", "MessageBody.$": "$.input.message", "MessageAttributes": { "my attribute no 1": { "DataType": "String", "StringValue": "attribute1" }, "my attribute no 2": { "DataType": "String", "StringValue": "attribute2" } } }, "End": true } }}

以下には Amazon SQS キューに発行する Task タスクが含まれ、その後タスクトークンが返されるまで待機します。「タスクトークンのコールバックまで待機する (p. 146)」を参照してください。

{ "StartAt":"Send message to SQS", "States":{ "Send message to SQS":{ "Type":"Task", "Resource":"arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters":{ "QueueUrl":"https://sqs.us-east-1.amazonaws.com/123456789012/myQueue", "MessageBody":{ "Input.$":"$", "TaskToken.$":"$$.Task.Token" } }, "End":true } }}

Amazon SQS でメッセージを受信する方法の詳細については、『Amazon Simple Queue Service 開発者ガイド』の「メッセージの受信および削除」を参照してください。

For information on how to configure IAM when using Step Functions with other AWS services, see 統合サービスの IAM ポリシー (p. 264).

162

Page 170: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

Step Functions を使用した AWS Glue ジョブの管理Step Functions can control certain AWS services directly from the Amazon ステートメント言語. For moreinformation, see the following:

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)

サポートされている AWS Glue API:

• StartJobRun

• サポートされているパラメータ:• JobName

• JobRunId

• Arguments

• AllocatedCapacity

• Timeout

• SecurityConfiguration

• NotificationProperty

以下には、AWS Glue ジョブを開始する Task 状態が含まれます。

"Glue StartJobRun": { "Type": "Task", "Resource": "arn:aws:states:::glue:startJobRun.sync", "Parameters": { "JobName": "GlueJob-JTrRO5l98qMG" }, "Next": "ValidateOutput" },

For information on how to configure IAM when using Step Functions with other AWS services, see 統合サービスの IAM ポリシー (p. 264).

Step Functions を使用して Amazon SageMaker を管理するStep Functions can control certain AWS services directly from the Amazon ステートメント言語. For moreinformation, see the following:

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)

サポートされている Amazon SageMaker API および構文:

• CreateEndpoint

• リクエストの構文• サポートされているパラメータ:

• EndpointConfigName

• EndpointName

• Tags

• レスポンスの構文

163

Page 171: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

• CreateEndpointConfig

• リクエストの構文• サポートされているパラメータ:

• EndpointConfigName

• KmsKeyId

• ProductionVariants

• Tags

• レスポンスの構文• CreateHyperParameterTuningJob

• リクエストの構文• サポートされているパラメータ:

• HyperParameterTuningJobConfig

• HyperParameterTuningJobName

• Tags

• TrainingJobDefinition

• WarmStartConfig

• レスポンスの構文• CreateLabelingJob

• リクエストの構文• サポートされているパラメータ:

• HumanTaskConfig

• InputConfig

• LabelAttributeName

• LabelCategoryConfigS3Uri

• LabelingJobAlgorithmsConfig

• LabelingJobName

• OutputConfig

• RoleArn

• StoppingConditions

• Tags

• レスポンスの構文• CreateModel

• リクエストの構文• サポートされているパラメータ:

• Containers

• EnableNetworkIsolation

• ExecutionRoleArn

• ModelName

• PrimaryContainer

• Tags

• VpcConfig

• CreateTrainingJob

• リクエストの構文• サポートされているパラメータ:

• AlgorithmSpecification

• HyperParameters

164

Page 172: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

• InputDataConfig

• OutputDataConfig

• ResourceConfig

• RoleArn

• StoppingCondition

• Tags

• TrainingJobName

• VpcConfig

• レスポンスの構文• CreateTransformJob

Note

AWS Step Functions は CreateTransformJob のポリシーを自動的には作成しません。インラインポリシーは、作成したロールにアタッチする必要があります。詳細については、このサンプル IAM ポリシー (CreateTrainingJob (p. 271))を参照してください。

• リクエストの構文• サポートされているパラメータ:

• BatchStrategy

• Environment

• MaxConcurrentTransforms

• MaxPayloadInMB

• ModelName

• Tags

• TransformInput

• TransformJobName

• TransformOutput

• TransformResources

• レスポンスの構文• UpdateEndpoint

• リクエストの構文• サポートされているパラメータ:

• EndpointConfigName

• EndpointName

• レスポンスの構文

Amazon SageMaker 変換ジョブの例以下には、Amazon SageMaker 変換ジョブを作成する Task 状態が含まれます。DataSource およびTransformOutput の Amazon S3 の場所を指定します。

{"SageMaker CreateTransformJob": { "Type": "Task", "Resource": "arn:aws:states:::sagemaker:createTransformJob.sync", "Parameters": { "ModelName": "SageMakerCreateTransformJobModel-9iFBKsYti9vr", "TransformInput": { "CompressionType": "None", "ContentType": "text/csv", "DataSource": {

165

Page 173: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

"S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://my-s3bucket-example-1/TransformJobDataInput.txt" } } }, "TransformOutput": { "S3OutputPath": "s3://my-s3bucket-example-1/TransformJobOutputPath" }, "TransformResources": { "InstanceCount": 1, "InstanceType": "ml.m4.xlarge" }, "TransformJobName": "sfn-binary-classification-prediction" }, "Next": "ValidateOutput"},

Amazon SageMaker トレーニングジョブの例

以下には Amazon SageMaker トレーニングジョブを作成する Task 状態が含まれています。

{ "SageMaker CreateTrainingJob":{ "Type":"Task", "Resource":"arn:aws:states:::sagemaker:createTrainingJob.sync", "Parameters":{ "TrainingJobName":"search-model", "ResourceConfig":{ "InstanceCount":4, "InstanceType":"ml.c4.8xlarge", "VolumeSizeInGB":20 }, "HyperParameters":{ "mode":"batch_skipgram", "epochs":"5", "min_count":"5", "sampling_threshold":"0.0001", "learning_rate":"0.025", "window_size":"5", "vector_dim":"300", "negative_samples":"5", "batch_size":"11" }, "AlgorithmSpecification":{ "TrainingImage":"...", "TrainingInputMode":"File" }, "OutputDataConfig":{ "S3OutputPath":"s3://bucket-name/doc-search/model" }, "StoppingCondition":{ "MaxRuntimeInSeconds":100000 }, "RoleArn":"arn:aws:iam::123456789012:role/docsearch-stepfunction-iam-role", "InputDataConfig":[ { "ChannelName":"train", "DataSource":{ "S3DataSource":{ "S3DataType":"S3Prefix", "S3Uri":"s3://bucket-name/doc-search/interim-data/training-data/", "S3DataDistributionType":"FullyReplicated" }

166

Page 174: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

} } ] }, "Retry":[ { "ErrorEquals":[ "SageMaker.AmazonSageMakerException" ], "IntervalSeconds":1, "MaxAttempts":100, "BackoffRate":1.1 }, { "ErrorEquals":[ "SageMaker.ResourceLimitExceededException" ], "IntervalSeconds":60, "MaxAttempts":5000, "BackoffRate":1 }, { "ErrorEquals":[ "States.Timeout" ], "IntervalSeconds":1, "MaxAttempts":5, "BackoffRate":1 } ], "Catch":[ { "ErrorEquals":[ "States.ALL" ], "ResultPath":"$.cause", "Next":"Sagemaker Training Job Error" } ], "Next":"Delete Interim Data Job" }}

Amazon SageMaker ラベル付けジョブの例

以下には Amazon SageMaker ラベル付けジョブを作成する Task 状態が含まれています。

{ "StartAt": "SageMaker CreaateLabelingJob", "TimeoutSeconds": 3600, "States": { "SageMaker CreaateLabelingJob": { "Type": "Task", "Resource": "arn:aws:states:::sagemaker:createLabelingJob.sync", "Parameters": { "HumanTaskConfig": { "AnnotationConsolidationConfig": { "AnnotationConsolidationLambdaArn": "arn:aws:lambda:us-west-2:123456789012:function:ACS-TextMultiClass" }, "NumberOfHumanWorkersPerDataObject": 1,

167

Page 175: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

"PreHumanTaskLambdaArn": "arn:aws:lambda:us-west-2:123456789012:function:PRE-TextMultiClass", "TaskDescription": "Classify the following text", "TaskKeywords": [ "tc", "Labeling" ], "TaskTimeLimitInSeconds": 300, "TaskTitle": "Classify short bits of text", "UiConfig": { "UiTemplateS3Uri": "s3://s3bucket-example/TextClassification.template" }, "WorkteamArn": "arn:aws:sagemaker:us-west-2:123456789012:workteam/private-crowd/ExampleTesting" }, "InputConfig": { "DataAttributes": { "ContentClassifiers": [ "FreeOfPersonallyIdentifiableInformation", "FreeOfAdultContent" ] }, "DataSource": { "S3DataSource": { "ManifestS3Uri": "s3://s3bucket-example/manifest.json" } } }, "LabelAttributeName": "Categories", "LabelCategoryConfigS3Uri": "s3://s3bucket-example/labelcategories.json", "LabelingJobName": "example-job-name", "OutputConfig": { "S3OutputPath": "s3://s3bucket-example/output" }, "RoleArn": "arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole", "StoppingConditions": { "MaxHumanLabeledObjectCount": 10000, "MaxPercentageOfInputDatasetLabeled": 100 } }, "Next": "ValidateOutput" }, "ValidateOutput": { "Type": "Choice", "Choices": [ { "Not": { "Variable": "$.LabelingJobArn", "StringEquals": "" }, "Next": "Succeed" } ], "Default": "Fail" }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail", "Error": "InvalidOutput", "Cause": "Output is not what was expected. This could be due to a service outage or a misconfigured service integration." } }

168

Page 176: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

}

Step Functions を使用して Amazon EMR を呼び出すStep Functions can control certain AWS services directly from the Amazon ステートメント言語. For moreinformation, see the following:

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)

AWS Step Functions を Amazon EMR と統合するには、提供されている Amazon EMR サービス統合 APIを使用します。サービス統合 API は対応する Amazon EMR API に似ていますが、渡されるフィールドと返される応答にいくつかの違いがあります。

Note

emr-5.28.0 の時点で、クラスターの作成時に StepConcurrencyLevel パラメータを指定して、単一のクラスターで複数のステップを並行して実行することができます。Step Functions Map および Parallel 状態を使用して、並行して作業をクラスターに送信できます。

EMR サービス統合の可用性は、EMR API の可用性によります。特殊リージョンにおける制限については、Amazon EMR ドキュメントを参照してください。

各サービス統合 API と対応する Amazon EMR API の違いを次の表に示します。

Amazon EMR サービス統合 API と対応する Amazon EMR API

Amazon EMR サービス統合 API 対応する EMR API 違い

createCluster

新しいクラスター (ジョブフロー)を作成して実行を開始します。

Amazon EMR はサービスリンクロールとして知られる IAM ロールの一意のタイプに直接リンクされています。createClusterと createCluster.syncが機能するには、サービスリンクロールAWSServiceRoleForEMRCleanupを作成するために必要なアクセス許可が設定されている必要があります。IAM アクセス権限ポリシーに追加できるステートメントなど、詳細については、「Amazon EMR のサービスリンクロールを使用する」を参照してください。

runJobFlow createCluster は次の場合を除き、runJobFlow と同じリクエスト構文を使用します。

• このフィールドInstances.KeepJobFlowAliveWhenNoStepsは必須で、ブール値 TRUE である必要があります。

• フィールド Steps は許可されていません。

• フィールドInstances.InstanceFleets[index].Nameは指定する必要があり、オプションのmodifyInstanceFleetByNameコネクタ API を使用する場合は一意である必要があります。

• フィールドInstances.InstanceGroups[index].Nameは指定する必要があり、オプションのmodifyInstanceGroupByNameAPI を使用する場合は一意である必要があります。

レスポンスは次のとおりです。

169

Page 177: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

Amazon EMR サービス統合 API 対応する EMR API 違い

{ "ClusterId": "string"}

Amazon EMR は以下を使用します。

{ "JobFlowId": "string"}

createCluster.sync

新しいクラスター (ジョブフロー)を作成して実行を開始します。

runJobFlow createCluster と同じですが、クラスターが WAITING 状態になるまで待機します。

setClusterTerminationProtection

クラスター (ジョブフロー) をロックして、クラスター内のEC2 インスタンスをユーザーの介入、API コール、またはジョブフローエラーが発生した場合に終了できないようにします。

setTerminationProtection リクエストは以下を使用します。

{ "ClusterId": "string"}

Amazon EMR は以下を使用します。

{ "JobFlowIds": ["string"]}

terminateCluster

クラスター (ジョブフロー) をシャットダウンします。

terminateJobFlows リクエストは以下を使用します。

{ "ClusterId": "string"}

Amazon EMR は以下を使用します。

{ "JobFlowIds": ["string"]}

terminateCluster.sync

クラスター (ジョブフロー) をシャットダウンします。

terminateJobFlows terminateCluster と同じですが、クラスターが終了するまで待機します。

170

Page 178: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

Amazon EMR サービス統合 API 対応する EMR API 違い

addStep

実行中のクラスターに新しいステップを追加します。

addJobFlowSteps リクエストはキー "ClusterId"を使用します。Amazon EMR は"JobFlowId" を使用します。リクエストは 1 つのステップを使用します。

{ "Step": <"StepConfig object">}

Amazon EMR は以下を使用します。

{ "Steps": [<StepConfig objects>]}

レスポンスは次のとおりです。

{ "StepId": "string"}

Amazon EMR は、次の値を返します。

{ "StepIds": [<strings>]}

addStep.sync

実行中のクラスターに新しいステップを追加します。

addJobFlowSteps addStep と同じですが、ステップが完了するまで待機します。

171

Page 179: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

Amazon EMR サービス統合 API 対応する EMR API 違い

cancelStep

実行中のクラスターで保留中のステップを取り消します。

cancelSteps リクエストは以下を使用します。

{ "StepId": "string"}

Amazon EMR は以下を使用します。

{ "StepIds": [<strings>]}

レスポンスは次のとおりです。

{ "CancelStepsInfo": <CancelStepsInfo object>}

Amazon EMR は以下を使用します。

{ "CancelStepsInfoList": [<CancelStepsInfo objects>]}

modifyInstanceFleetByName

指定されたInstanceFleetName を使用して、インスタンスフリートのターゲットオンデマンドおよびターゲットスポット容量を変更します。

modifyInstanceFleet リクエストはmodifyInstanceFleet の場合と同じですが、以下が異なります。

• フィールドInstance.InstanceFleetIdは許可されていません。

• 実行時に、InstanceFleetId はListInstanceFleets を呼び出して結果を解析することにより、サービス統合によって自動的に決定されます。

172

Page 180: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

Amazon EMR サービス統合 API 対応する EMR API 違い

modifyInstanceGroupByName

インスタンスグループのノード数と構成設定を変更します。

modifyInstanceGroups リクエストは次のとおりです。

{ "ClusterId": "string", "InstanceGroup": <InstanceGroupModifyConfig object>}

Amazon EMR はリストを使用します。

{ "ClusterId": ["string"], "InstanceGroups": [<InstanceGroupModifyConfig objects>]}

InstanceGroupModifyConfigオブジェクト内では、フィールド InstanceGroupId は使用できません。

新しいフィールドInstanceGroupName が追加されました。実行時に、InstanceGroupId はListInstanceGroups を呼び出して結果を解析することにより、サービス統合によって自動的に決定されます。

以下にはクラスターを作成する Task 状態が含まれています。

"Create_Cluster": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync", "Parameters": { "Name": "MyWorkflowCluster", "VisibleToAllUsers": true, "ReleaseLabel": "emr-5.28.0", "Applications": [ { "Name": "Hive" } ], "ServiceRole": "EMR_DefaultRole", "JobFlowRole": "EMR_EC2_DefaultRole", "LogUri": "s3n://aws-logs-123456789012-us-east-1/elasticmapreduce/", "Instances": { "KeepJobFlowAliveWhenNoSteps": true, "InstanceFleets": [ { "InstanceFleetType": "MASTER", "Name": "MASTER", "TargetOnDemandCapacity": 1,

173

Page 181: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

"InstanceTypeConfigs": [ { "InstanceType": "m4.xlarge" } ] }, { "InstanceFleetType": "CORE", "Name": "CORE", "TargetOnDemandCapacity": 1, "InstanceTypeConfigs": [ { "InstanceType": "m4.xlarge" } ] } ] } }, "End": true}

以下には終了保護を有効にする Task 状態が含まれています。

"Enable_Termination_Protection": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:setClusterTerminationProtection", "Parameters": { "ClusterId.$": "$.ClusterId", "TerminationProtected": true }, "End": true}

以下にはクラスターにステップを送信する Task 状態が含まれています。

"Step_One": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:addStep.sync", "Parameters": { "ClusterId.$": "$.ClusterId", "Step": { "Name": "The first step", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": [ "hive-script", "--run-hive-script", "--args", "-f", "s3://<region>.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q", "-d", "INPUT=s3://<region>.elasticmapreduce.samples", "-d", "OUTPUT=s3://<mybucket>/MyHiveQueryResults/" ] } } }, "End": true}

174

Page 182: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

以下には、ステップをキャンセルする Task 状態が含まれます。

"Cancel_Step_One": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:cancelStep", "Parameters": { "ClusterId.$": "$.ClusterId", "StepId.$": "$.AddStepsResult.StepId" }, "End": true}

以下には、クラスターを終了する Task 状態を示します。

"Terminate_Cluster": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:terminateCluster.sync", "Parameters": { "ClusterId.$": "$.ClusterId" }, "End": true}

以下には、インスタンスグループに合わせてクラスターをスケールアップまたはスケールダウンするTask 状態が含まれています。

"ModifyInstanceGroupByName": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceGroupByName", "Parameters": { "ClusterId": "j-1234567890123", "InstanceGroupName": "MyCoreGroup", "InstanceGroup": { "InstanceCount": 8 } }, "End": true}

以下には、インスタンスフリートに合わせてクラスターをスケールアップまたはスケールダウンするTask 状態が含まれています。

"ModifyInstanceFleetByName": { "Type": "Task", "Resource": "arn:aws::states:::elasticmapreduce:modifyInstanceFleetByName", "Parameters": { "ClusterId": "j-1234567890123", "InstanceFleetName": "MyCoreFleet", "InstanceFleet": { "TargetOnDemandCapacity": 8, "TargetSpotCapacity": 0 } }, "End": true}

For information on how to configure IAM when using Step Functions with other AWS services, see 統合サービスの IAM ポリシー (p. 264).

175

Page 183: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

Step Functions を使用して AWS CodeBuild を呼び出すStep Functions can control certain AWS services directly from the Amazon ステートメント言語. For moreinformation, see the following:

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)

AWS CodeBuild との AWS Step Functions サービスの統合により、Step Functions を使用してビルドのトリガー、停止、管理、およびビルドレポートの共有を行うことができます。Step Functions を使用すると、アプリケーションのソフトウェア変更を検証するための継続的統合パイプラインを設計および実行できます。

次の表に示すとおり、すべての API がすべての統合パターンをサポートしているわけではありません。

API リクエストレスポンス ジョブの実行 (.sync)

StartBuild ✓ ✓

StopBuild ✓  

BatchDeleteBuilds ✓  

BatchGetReports ✓  

サポートされている CodeBuild API および構文:

• StartBuild

• リクエストの構文• サポートされているパラメータ:

• projectName

• artifactsOverride

• buildspecOverride

• cacheOverride

• certificateOverride

• computeTypeOverride

• encryptionKeyOverride

• environmentTypeOverride

• environmentVariablesOverride

• gitCloneDepthOverride

• gitSubmodulesConfigOverride

• idempotencyToken

• imageOverride

• imagePullCredentialsTypeOverride

• insecureSslOverride

• logsConfigOverride

• privilegedModeOverride

• queuedTimeoutInMinutesOverride

• registryCredentialOverride

• reportBuildStatusOverride

176

Page 184: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

• secondaryArtifactsOverride

• secondarySourcesOverride

• secondarySourcesVersionOverride

• serviceRoleOverride

• sourceAuthOverride

• sourceLocationOverride

• sourceTypeOverride

• sourceVersion

• timeoutInMinutesOverride

• レスポンスの構文• StopBuild

• リクエストの構文• サポートされているパラメータ:

• id

• レスポンスの構文• BatchDeleteBuilds

• リクエストの構文• サポートされているパラメータ:

• ids

• レスポンスの構文• BatchGetReports

• リクエストの構文• サポートされているパラメータ:

• reportArn

• レスポンスの構文

Note

BatchDeleteBuilds には、JSONPath 再帰的降下 (..) 演算子を使用できます。これは配列を返し、次の例に示すように、Arn フィールドを StartBuild から複数形の Ids パラメータに変換できます。

"BatchDeleteBuilds": { "Type": "Task", "Resource": "arn:aws:states:::codebuild:batchDeleteBuilds", "Parameters": { "Ids.$": "$.Build..Arn" }, "Next": "MyNextState"},

統合サービスとして AWS Step Functions 実行を管理するStep Functions は、サービス統合として独自の API と統合します。これにより、Step Functions は実行中のタスク状態から直接ステートマシンの新しい実行を開始できます。新しいワークフローを構築するときに、ネストされたワークフロー実行 (p. 135)を使用して、メインワークフローの複雑さを軽減し、一般的なプロセスを再利用します。

詳細については、以下を参照してください。177

Page 185: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

• タスクからの実行の開始 (p. 135)• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)

サポートされている Step Functions API および構文:

• StartExecution

• リクエストの構文• サポートされているパラメータ

• input

• name

• stateMachineArn

• レスポンスの構文

以下には、別のステートマシンの実行を開始し、その完了を待機する Task 状態が含まれています。

{ "Type":"Task", "Resource":"arn:aws:states:::states:startExecution.sync:2", "Parameters":{ "Input":{ "Comment": "Hello world!" }, "StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld", "Name":"ExecutionName" }, "End":true}

以下には、別のステートマシンの実行を開始する Task 状態が含まれています。

{ "Type":"Task", "Resource":"arn:aws:states:::states:startExecution", "Parameters":{ "Input":{ "Comment": "Hello world!" }, "StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld", "Name":"ExecutionName" }, "End":true}

以下には、コールバック (p. 146)サービス統合パターンを実装する Task 状態が含まれています。

{ "Type":"Task", "Resource":"arn:aws:states:::states:startExecution.waitForTaskToken", "Parameters":{ "Input":{ "Comment": "Hello world!", "token.$": "$$.Task.Token" }, "StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld", "Name":"ExecutionName"

178

Page 186: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドサポートされる AWS サービス

}, "End":true}

ネストされたワークフロー実行を、それを開始した親実行に関連付けるには、コンテキストオブジェクト (p. 132)からプルされた実行 ID を含む特別な名前のパラメータを渡します。ネストされた実行を開始するときは、AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID という名前のパラメータを使用します。パラメータ名に .$ を追加し、$$.Execution.Id を使用してコンテキストオブジェクトのID を参照することで、実行 ID を渡します。詳細については、「コンテキストオブジェクトへのアクセス (p. 133)」を参照してください。

{ "Type":"Task", "Resource":"arn:aws:states:::states:startExecution.sync", "Parameters":{ "Input":{ "Comment": "Hello world!", "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id" }, "StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld", "Name":"ExecutionName" }, "End":true}

ネストされたステートマシンは、以下を返します。

リソース 出力

startExecution.sync 文字列

startExecution.sync:2 JSON

どちらもネストされたステートマシンが完了するのを待機しますが、異なる Output 形式を返します。たとえば、オブジェクト { "MyKey": "MyValue" } を返す Lambda 関数を作成すると、次のレスポンスが得られます。

startExecution.sync の場合:

{ <other fields> "Output": "{ \"MyKey\": \"MyValue\" }" }

startExecution.sync:2 の場合:

{ <other fields> "Output": { "MyKey": "MyValue" }}

For information on how to configure IAM when using Step Functions with other AWS services, see 統合サービスの IAM ポリシー (p. 264).

179

Page 187: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド読み込み整合性

Step Functions の読み込み整合性AWS Step Functions でのステートマシンの更新は、結果的に整合します。数秒以内のすべてのStartExecution 呼び出しでは、更新された定義と roleArn (IAM ロールの Amazon リソースネーム)が使用されます。UpdateStateMachine を呼び出したすぐ後に開始された実行では、前のステートマシン定義と roleArn が使用されることがあります。

詳細については、以下を参照してください。

• AWS Step Functions API リファレンス の「UpdateStateMachine」• 「Step Functions の開始方法 (p. 14)」の「ステートマシンを更新するには (p. 16)」

Step Functions のテンプレートStep Functions コンソールで、以下のいずれかのステートマシンテンプレートを選択すると、[Code (コード)] ペインに自動的に入力されます。各テンプレートは完全に機能し、独自のステートマシンの設計図として使用できます。

Note

テンプレートのいずれかを選択すると、[Code] ペインの内容が上書きされます。

• Hello world – Pass 状態を使用するステートマシン。• Wait state – Wait 状態を実行中のステートマシンに挿入するための、次のような方法を示すステートマ

シン。• 秒数待機する。• 絶対時間 (タイムスタンプ) 待機する。• Wait 状態の定義を指定する。• 状態の入力データを使用する。

• Retry failure – タスクの失敗後にタスクを再試行するステートマシン。この設計図は、複数の再試行とさまざまな障害タイプを処理する方法を示します。

• Parallel – 2 つのブランチを同時に実行する方法を示すステートマシン。• Catch failure – 主要なタスクの失敗後にさまざまなタスクを実行するステートマシン。この設計図は、

失敗のタイプに応じてさまざまなタスクを呼び出す方法を示しています。• Choice state – 選択を行うステートマシン。これは Task 状態のセットから Task 状態を実行するか、最

初の状態の完了後に Fail 状態を実行します。• Map 状態 – Map 状態を使用して配列のデータを動的に処理するステートマシン。

Step Functions のタグ付けAWS Step Functions は、ステートマシン (標準と Express の両方) とアクティビティのタグ付けをサポートしています。これにより、リソースに関連するコストを追跡して管理したり、AWS Identity and AccessManagement (IAM) ポリシーのセキュリティを向上させることができます。Step Functions リソースにタグ付けすると、それらを AWS リソースグループ で管理することができます。リソースグループ の詳細については、「AWS リソースグループユーザーガイド」を参照してください。

リソースのタグ付けに関連する制限を確認するには、「タグ付けに関連する制限 (p. 251)」を参照してください。

トピック

180

Page 188: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドコスト割り当てのタグ付け

• コスト割り当てのタグ付け (p. 181)• セキュリティのためのタグ付け (p. 181)• Step Functions コンソールでのタグの表示と管理 (p. 182)• Step Functions API アクションを使用してタグを管理する (p. 182)

コスト割り当てのタグ付けコスト割り当てのために Step Functions リソースを整理して識別するために、ステートマシンやアクティビティの目的を識別するメタデータタグを追加できます。これはリソースが多数ある場合に特に便利です。コスト配分タグを使用して AWS の請求書を整理し、自分のコスト構造を反映できます。そのためには、サインアップして AWS アカウントの請求書にタグキーおよび値を含めます。詳細については、AWSBilling and Cost Management ユーザーガイドの「月別コスト配分レポートの設定」を参照してください。

たとえば、次のようにコストセンターと Step Functions リソースの目的を表すタグを追加できます。

リソース キー 値

Cost Center 34567StateMachine1

Application Image processing

Cost Center 34567StateMachine2

Application Rekognition processing

Cost Center 12345Activity1

Application Legacy database

このタグ付けスキームを使用すると、関連するタスクを実行している 2 つのステートマシンを同じコストセンターでグループ化しながら、関連のないアクティビティに異なるコスト割り当てタグでタグ付けすることができます。

セキュリティのためのタグ付けIAM は、タグに基づくリソースへのアクセスの制御をサポートしています。タグに基づいてアクセスを制御するには、IAM ポリシーの条件要素でリソースタグに関する情報を提供します。

たとえば、キー environment および値 production のタグを含むすべての Step Functions リソースへのアクセスを制限できます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "states:TagResource", "states:DeleteActivity", "states:DeleteStateMachine", "states:StopExecution" ], "Resource": "*", "Condition": { "StringEquals": {"aws:ResourceTag/environment": "production"} }

181

Page 189: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド表示と管理

} ]}

詳細については、IAM ユーザーガイドの「タグを使用したアクセス制御」を参照してください。

Step Functions コンソールでのタグの表示と管理Step Functions を使用すると、Step Functions コンソールでステートマシンのタグを表示および管理できます。ステートマシンの [Details (詳細)] ページから、[Tags (タグ)] を選択します。ここでは、ステートマシンに関連付けられた既存のタグが表示されます。

Note

アクティビティのタグを管理するには、「Step Functions API アクションを使用してタグを管理する (p. 182)」を参照してください。

ステートマシンに関連付けられたタグを追加または削除するには、[Manage Tags (タグの管理)] ボタンを選択します。

1. ステートマシンの詳細ページを参照します。2. [Executions (実行)] と [Definition (定義)] の横にある [Tags (タグ)] を選択します。3. [Manage tags (タグの管理)] を選択します。

• 既存のタグを変更するには、[キー] と [値] フィールドを編集します。• 既存のタグを削除するには、[Remove tag (タグの削除)] を選択します。• 新しいタグを追加するには、[タグの追加] を選択し、[キー] と [値] を入力します。

4. [Save] を選択します。

Step Functions API アクションを使用してタグを管理するStep Functions API を使用してタグを管理するには、次の API アクションを使用します。

• ListTagsForResource

• TagResource

• UntagResource

AWS Step Functions Data Science SDK for PythonAWS Step Functions Data Science SDK は、データサイエンティストが Amazon SageMaker と StepFunctions を使用して機械学習モデルを処理および公開するワークフローを簡単に作成できるオープンソースライブラリです。AWS のサービスを個別にプロビジョニングおよび統合する必要なく、AWS インフラストラクチャを大規模に調整する Python の複数ステップの機械学習ワークフローを作成できます。

AWS Step FunctionsData Science SDK には、Step Functions ワークフローを作成して呼び出すことができる Python API が備わっています。これらのワークフローは、Python や Jupyter ノートブックで直接管理および実行できます。

AWS Step Functions Data Science SDK では、本番環境に対応したワークフローを Python で直接作成できるだけでなく、そのワークフローをコピーし、新しいオプションを試して、洗練されたワークフローを実稼働環境に配置することもできます。

182

Page 190: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドデータサイエンス SDK

AWS Step Functions Data Science SDK の詳細については、以下を参照してください。

• GitHub のプロジェクト• SDK ドキュメント• 以下のサンプルノートブック。これは Amazon SageMaker コンソールと関連する GitHub プロジェク

トの Jupyter ノートブックインスタンスで利用できます。• hello_world_workflow.ipynb

• machine_learning_workflow_abalone.ipynb

• training_pipeline_pytorch_mnist.ipynb

183

Page 191: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドバッチジョブの管理 (AWS Batch、Amazon SNS)

Step Functions のサンプルプロジェクト

AWS Step Functions コンソールで、以下のステートマシンサンプルプロジェクトのいずれかを選択すると、ステートマシンの [コード]、[ビジュアルワークフロー]、およびプロジェクトに関連するすべてのAWS リソースが自動的に作成されます。

各サンプルプロジェクトによって、完全に機能するステートマシンがプロビジョンされ、その動作に必要な関連リソースが作成されます。サンプルプロジェクトを作成すると、Step Functions では AWSCloudFormation を使用して、ステートマシンが参照する関連リソースが作成されます。

トピック• バッチジョブの管理 (AWS Batch、Amazon SNS) (p. 184)• コンテナタスクの管理 (Amazon ECS、Amazon SNS) (p. 187)• データレコードの転送 (Lambda、DynamoDB、Amazon SQS) (p. 191)• ジョブステータスのポーリング (Lambda、AWS Batch) (p. 194)• タスクタイマー (Lambda、Amazon SNS) (p. 197)• コールバックパターンの例 (Amazon SQS、Amazon SNS、Lambda) (p. 199)• Amazon EMR ジョブの管理 (p. 202)• ワークフロー内でワークフローを開始する (Step Functions、Lambda) (p. 207)• Map 状態を使用してデータを動的に処理する (p. 209)• 機械学習モデルのトレーニング (p. 214)• 機械学習モデルのチューニング (p. 219)• Amazon SQS からの大容量メッセージの処理 (Express ワークフロー) (p. 225)• 選択的チェックポイントの例 (Express ワークフロー) (p. 230)• AWS CodeBuild プロジェクトのビルド (CodeBuild、Amazon SNS) (p. 237)

バッチジョブの管理 (AWS Batch、Amazon SNS)このサンプルプロジェクトでは、AWS Batch ジョブを送信後、ジョブの結果 (成功または失敗) に基づき Amazon SNS 通知を送信する方法について説明します。このサンプルプロジェクトをデプロイすると、AWS Step Functions ステートマシン、AWS Batch ジョブ、および Amazon SNS トピックが作成されます。

このプロジェクトでは、Step Functions は、ステートマシンを使用して、AWS Batch ジョブを同期的に呼び出します。その後、ジョブが成功または失敗するまで待機し、ジョブの成功または失敗に関するメッセージを含む Amazon SNS トピックを送信します。

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。2. [Sample Projects (サンプルプロジェクト)]、[Manage a Batch Job (バッチジョブの管理)] の順に選択

します。

ステートマシン [Code] と [Visual Workflow] が表示されます。

184

Page 192: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド新しい実行の開始

3. [次へ] を選択します。

作成されるリソースを示す [Deploy resources (リソースのデプロイ)] ページが表示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• AWS Batch ジョブ• Amazon SNS トピック

4. [リソースのデプロイ] を選択します。

Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources (リソースのデプロイ)] ページが表示されている場合は、[スタック ID] リンクを開いて、プロビジョンされているリソースを表示することができます。

新しい実行の開始1. [New execution (新しい実行)] ページで、実行名を入力し (オプション)、[Start Execution (実行の開始)]

を選択します。2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. 必要に応じて、Step Functions の [ダッシュボード] 上にある新しく作成されたステートマシンに移動し、[New execution (新しい実行)] を選択します。

4. 実行が完了したら、[ビジュアルワークフロー] の状態を選択して、[ステップの詳細] の [入力] および[出力] を参照します。

ステートマシンのコード例このサンプルオブジェクトのステートマシンは、パラメータを直接リソースに渡すことで、AWS Batch および Amazon SNS と統合します。

185

Page 193: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドIAM 例

このステートマシンの例を参照して、Resource フィールドの Amazon リソースネーム (ARN) に接続し、Parameters をサービス API に渡すことで、Step Functions で AWS Batch と Amazon SNS を制御する方法を確認します。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

{ "Comment": "An example of the Amazon States Language for notification on an AWS Batch job completion", "StartAt": "Submit Batch Job", "TimeoutSeconds": 3600, "States": { "Submit Batch Job": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobName": "BatchJobNotification", "JobQueue": "arn:aws:batch:us-east-1:123456789012:job-queue/BatchJobQueue-7049d367474b4dd", "JobDefinition": "arn:aws:batch:us-east-1:123456789012:job-definition/BatchJobDefinition-74d55ec34c4643c:1" }, "Next": "Notify Success", "Catch": [ { "ErrorEquals": [ "States.ALL" ], "Next": "Notify Failure" } ] }, "Notify Success": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "Message": "Batch job submitted through Step Functions succeeded", "TopicArn": "arn:aws:sns:us-east-1:123456789012:batchjobnotificatiointemplate-SNSTopic-1J757CVBQ2KHM" }, "End": true }, "Notify Failure": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "Message": "Batch job submitted through Step Functions failed", "TopicArn": "arn:aws:sns:us-east-1:123456789012:batchjobnotificatiointemplate-SNSTopic-1J757CVBQ2KHM" }, "End": true } }}

IAM 例サンプルプロジェクトによって生成されたこのサンプルの AWS Identity and Access Management (IAM) ポリシーには、ステートマシンおよび関連リソースを実行するために必要な最小限の権限が付与されています。IAM ポリシーに必要なアクセス許可のみを含めることをお勧めします。

{ "Version": "2012-10-17",

186

Page 194: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドコンテナタスクの管理 (Amazon ECS、Amazon SNS)

"Statement": [ { "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:ap-northeast-1:123456789012:ManageBatchJob-SNSTopic-JHLYYG7AZPZI" ], "Effect": "Allow" }, { "Action": [ "batch:SubmitJob", "batch:DescribeJobs", "batch:TerminateJob" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:ap-northeast-1:123456789012:rule/StepFunctionsGetEventsForBatchJobsRule" ], "Effect": "Allow" } ]}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

コンテナタスクの管理 (Amazon ECS、AmazonSNS)

このサンプルプロジェクトでは、AWS Fargate タスクを実行後、ジョブの結果 (成功または失敗) に基づき Amazon SNS 通知を送信する方法について説明します。このサンプルプロジェクトをデプロイすると、AWS Step Functions ステートマシン、Fargate クラスター、および Amazon SNS トピックが作成されます。

このプロジェクトでは、Step Functions は、ステートマシンを使用して、Fargate タスクを同期的に呼び出します。その後、タスクが成功または失敗するまで待機し、ジョブの成功または失敗に関するメッセージを含む Amazon SNS トピックを送信します。

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。2. [Sample Projects (サンプルプロジェクト)]、[Manage a container task (コンテナタスクの管理)] の順に

選択します。

187

Page 195: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド新しい実行の開始

ステートマシン [Code] と [Visual Workflow] が表示されます。

3. [次へ] を選択します。

作成されるリソースを示す [Deploy resources (リソースのデプロイ)] ページが表示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• Fargate クラスター• Amazon SNS トピック

4. [リソースのデプロイ] を選択します。

Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources (リソースのデプロイ)] ページが表示されている場合は、[スタック ID] リンクを開いて、プロビジョンされているリソースを表示することができます。

新しい実行の開始1. [New execution (新しい実行)] ページで、実行名を入力し (オプション)、[Start Execution (実行の開始)]

を選択します。2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. 必要に応じて、Step Functions の [ダッシュボード] 上にある新しく作成されたステートマシンに移動し、[New execution (新しい実行)] を選択します。

4. 実行が完了したら、[ビジュアルワークフロー] の状態を選択して、[ステップの詳細] の [入力] および[出力] を参照します。

188

Page 196: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンのコード例

ステートマシンのコード例このサンプルプロジェクトのステートマシンは、パラメータを直接リソースに渡すことで、AWS Fargateおよび Amazon SNS と統合します。この例のステートマシンを参照して、Step Functions がどのようにステートマシンを使用して Fargate タスクを同期的に呼び出し、タスクの成功または失敗を待機して、ジョブが成功したか失敗したかどうかに関するメッセージを Amazon SNS トピックに送信するかご覧ください。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

{ "Comment": "An example of the Amazon States Language for notification on an AWS Fargate task completion", "StartAt": "Run Fargate Task", "TimeoutSeconds": 3600, "States": { "Run Fargate Task": { "Type": "Task", "Resource": "arn:aws:states:::ecs:runTask.sync", "Parameters": { "LaunchType": "FARGATE", "Cluster": "arn:aws:ecs:ap-northeast-1:123456789012:cluster/FargateTaskNotification-ECSCluster-VHLR20IF9IMP", "TaskDefinition": "arn:aws:ecs:ap-northeast-1:123456789012:task-definition/FargateTaskNotification-ECSTaskDefinition-13YOJT8Z2LY5Q:1", "NetworkConfiguration": { "AwsvpcConfiguration": { "Subnets": [ "subnet-07e1ad3abcfce6758", "subnet-04782e7f34ae3efdb" ], "AssignPublicIp": "ENABLED" } } }, "Next": "Notify Success", "Catch": [ { "ErrorEquals": [ "States.ALL" ], "Next": "Notify Failure" } ] }, "Notify Success": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "Message": "AWS Fargate Task started by Step Functions succeeded", "TopicArn": "arn:aws:sns:ap-northeast-1:123456789012:FargateTaskNotification-SNSTopic-1XYW5YD5V0M7C" }, "End": true }, "Notify Failure": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "Message": "AWS Fargate Task started by Step Functions failed", "TopicArn": "arn:aws:sns:ap-northeast-1:123456789012:FargateTaskNotification-SNSTopic-1XYW5YD5V0M7C" }, "End": true

189

Page 197: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドIAM 例

} }}

IAM 例サンプルプロジェクトによって生成されたこのサンプルの AWS Identity and Access Management (IAM) ポリシーには、ステートマシンおよび関連リソースを実行するために必要な最小限の権限が付与されています。ベストプラクティスとして、IAM ポリシーで必要なアクセス許可のみ付与することをお勧めします。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:ap-northeast-1:123456789012:FargateTaskNotification-SNSTopic-1XYW5YD5V0M7C" ], "Effect": "Allow" }, { "Action": [ "ecs:RunTask" ], "Resource": [ "arn:aws:ecs:ap-northeast-1:123456789012:task-definition/FargateTaskNotification-ECSTaskDefinition-13YOJT8Z2LY5Q:1" ], "Effect": "Allow" }, { "Action": [ "ecs:StopTask", "ecs:DescribeTasks" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:ap-northeast-1:123456789012:rule/StepFunctionsGetEventsForECSTaskRule" ], "Effect": "Allow" } ]}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

190

Page 198: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドデータレコードの転送

(Lambda、DynamoDB、Amazon SQS)

データレコードの転送(Lambda、DynamoDB、Amazon SQS)

このサンプルプロジェクトでは、値を Amazon DynamoDB テーブルから読み込み、AWS Step Functionsを使用して Amazon SQS に送信する方法について説明します。このサンプルプロジェクトをデプロイすると、Step Functions ステートマシン、DynamoDB テーブル、AWS Lambda 関数、および Amazon SQS トピックが作成されます。

このプロジェクトでは、Step Functions は、Lambda 関数を使用して DynamoDB テーブルを追加後、forループ処理で各エントリを読み込み、Amazon SQS に送信します。

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。2. [Sample Projects (サンプルプロジェクト)]、[Transfer Data Records (データレコードの転送)] を選択

します。

ステートマシン [Code] と [Visual Workflow] が表示されます。

Note

このステートマシンの [Code] セクションは、このサンプルプロジェクト用に作成されるAWS リソースを参照します。

3. [次へ] を選択します。

作成されるリソースを示す [Deploy resources (リソースのデプロイ)] ページが表示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• DynamoDB テーブルをシードするための Lambda 関数• Amazon SQS キュー• DynamoDB テーブル

191

Page 199: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド新しい実行の開始

4. [リソースのデプロイ] を選択します。Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources (リソースのデプロイ)] ページが表示されている場合は、[スタック ID] リンクを開いて、プロビジョンされているリソースを表示することができます。

新しい実行の開始1. [New execution (新しい実行)] ページで、実行名を入力し (オプション)、[Start Execution (実行の開始)]

を選択します。2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. 必要に応じて、Step Functions の [ダッシュボード] 上にある新しく作成されたステートマシンに移動し、[New execution (新しい実行)] を選択します。

4. 実行が完了したら、[ビジュアルワークフロー] の状態を選択して、[ステップの詳細] の [入力] および[出力] を参照します。

ステートマシンのコード例このサンプルオブジェクトのステートマシンは、パラメータを直接リソースに渡すことで、DynamoDB および Amazon SQS と統合します。

このステートマシンの例を参照して、Resource フィールドの Amazon リソースネーム (ARN) に接続し、Parameters をサービス API に渡すことで、Step Functions で DynamoDB と Amazon SQS を制御する方法を確認します。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

{ "Comment" : "An example of the Amazon States Language for reading messages from a DynamoDB table and sending them to SQS", "StartAt": "Seed the DynamoDB Table", "TimeoutSeconds": 3600, "States": { "Seed the DynamoDB Table": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:sqsconnector-SeedingFunction-T3U43VYDU5OQ", "ResultPath": "$.List", "Next": "For Loop Condition" }, "For Loop Condition": { "Type": "Choice", "Choices": [ { "Not": { "Variable": "$.List[0]",

192

Page 200: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドIAM 例

"StringEquals": "DONE" }, "Next": "Read Next Message from DynamoDB" } ], "Default": "Succeed" }, "Read Next Message from DynamoDB": { "Type": "Task", "Resource": "arn:aws:states:::dynamodb:getItem", "Parameters": { "TableName": "sqsconnector-DDBTable-1CAFOJWP8QD6I", "Key": { "MessageId": {"S.$": "$.List[0]"} } }, "ResultPath": "$.DynamoDB", "Next": "Send Message to SQS" }, "Send Message to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage", "Parameters": { "MessageBody.$": "$.DynamoDB.Item.Message.S", "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/sqsconnector-SQSQueue-QVGQBW134PWK" }, "ResultPath": "$.SQS", "Next": "Pop Element from List" }, "Pop Element from List": { "Type": "Pass", "Parameters": { "List.$": "$.List[1:]" }, "Next": "For Loop Condition" }, "Succeed": { "Type": "Succeed" } }}

パラメータを渡し、結果を管理する方法については、以下を参照してください。

• サービス API にパラメータを渡す (p. 150)• ResultPath (p. 124)

IAM 例サンプルプロジェクトによって生成されたこのサンプルの AWS Identity and Access Management (IAM) ポリシーには、ステートマシンおよび関連リソースを実行するために必要な最小限の権限が付与されています。ベストプラクティスとして、IAM ポリシーで必要なアクセス許可のみ付与することをお勧めします。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dynamodb:GetItem" ], "Resource": [

193

Page 201: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドジョブステータスのポーリング (Lambda、AWS Batch)

"arn:aws:dynamodb:ap-northeast-1:123456789012:table/TransferDataRecords-DDBTable-3I41R5L5EAGT" ], "Effect": "Allow" }, { "Action": [ "sqs:SendMessage" ], "Resource": [ "arn:aws:sqs:ap-northeast-1:123456789012:TransferDataRecords-SQSQueue-BKWXTS09LIW1" ], "Effect": "Allow" }, { "Action": [ "lambda:invokeFunction" ], "Resource": [ "arn:aws:lambda:ap-northeast-1:123456789012:function:TransferDataRecords-SeedingFunction-VN4KY2TPAZSR" ], "Effect": "Allow" } ]}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

ジョブステータスのポーリング (Lambda、AWSBatch)

このサンプルプロジェクトは、AWS Batch ジョブポーリングを作成します。このプロジェクトが実装するAWS Step Functions ステートマシンは、AWS Lambda を使用して、AWS Batch ジョブを確認する Wait状態ループを作成します。

このサンプルプロジェクトは、Step Functions ワークフローが AWS Batch ジョブを送信し、そのジョブが正常に完了するのを待つように、すべてのリソースを作成して設定します。

Note

また、Lambda 関数を使用せずに、このパターンを実装することもできます。AWS Batch の直接制御については、「サービスの AWS Step Functions との統合 (p. 143)」を参照してください。

このサンプルプロジェクトは、ステートマシン、2 つの Lambda 関数、AWS Batch キューを作成し、関連する IAM アクセス許可を設定します。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。2. [Sample Projects (サンプルプロジェクト)]、[Job Status Poller (ジョブステータスポーリング)] の順に

選択します。

194

Page 202: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド実行の開始

ステートマシン [Code] と [Visual Workflow] が表示されます。

Note

このステートマシンの [Code] セクションは、このサンプルプロジェクト用に作成されるAWS リソースを参照します。

3. [リソースの作成] を選択します。

[Create Project Resources (プロジェクトリソースの作成)] ページが表示されて、作成されるリソースが示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• SubmitJobLambda 関数• CheckJobLambda 関数• SampleJobQueue バッチジョブのキュー

Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Create Project Resources (プロジェクトリソースの作成)] ページで [Creatingresources (リソースの作成)] と表示中に、[Stack ID (スタック ID)] リンクを開いて、どのリソースがプロビジョンされているかを確認できます。

完了すると、[New execution (新しい実行)] ページが表示されて、以下のような入力例が示されます。

{ "jobName": "my-job", "jobDefinition": "arn:aws:batch:us-east-2:123456789012:job-definition/SampleJobDefinition-343f54b445d5312:1", "jobQueue": "arn:aws:batch:us-east-2:123456789012:job-queue/SampleJobQueue-4d9d696031e1449", "wait_time": 60}

実行の開始ステートマシンを作成した後、実行を開始できます。

195

Page 203: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド実行の開始

新しい実行を開始するには1. [New execution (新しい実行)] ページで、実行名を入力し (オプション)、[Start Execution (実行の開始)]

を選択します。2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. オプションで、Step Functions の [Dashboard (ダッシュボード)] で新しく作成されたステートマシンに移動し、[New execution (新しい実行)] を選択します。次に、新しく作成されたリソースの名前または Amazon リソースネーム (ARN) を使用して入力コードを入力できます。

たとえば、リソース名のみを使用した以前の実行の入力は、以下のようになります。

{ "jobName": "my-job", "jobDefinition": "SampleJobDefinition-343f54b445d5312", "jobQueue": "SampleJobQueue-4d9d696031e1449", "wait_time": 60}

Note

wait_time は、Wait 状態が 60 秒ごとにループするように命令します。4. [Start Execution] を選択します。

ステートマシンの新しい実行が開始され、実行中の実行が表示されている新しいページが表示されます。

5. (省略可能) [Execution Details] セクションで、[Info] を選択して [Execution Status] および [Started] と[Closed] のタイムスタンプを確認します。

6. AWS Batch ジョブの変更ステータスと実行のループ結果を表示するには、[Output] を選択します。

196

Page 204: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスクタイマー (Lambda、Amazon SNS)

タスクタイマー (Lambda、Amazon SNS)このサンプルプロジェクトは、タスクタイマーを作成します。Wait 状態を作成する AWS Step Functionsステートマシンを実装し、AWS Lambda 関数を使用して Amazon Simple Notification Service (AmazonSNS) 通知を送信します。Wait 状態は、トリガーが 1 単位の作業を実行するのを待機する状態タイプです。

Note

このサンプルプロジェクトでは、AWS Lambda 関数を実装して、Amazon Simple NotificationService (Amazon SNS) 通知を送信します。また、Amazon SNS 通知を Amazon ステートメント言語 から直接送信することもできます。「サービスの AWS Step Functions との統合 (p. 143)」を参照してください。

このサンプルプロジェクトは、ステートマシン、Lambda 関数、Amazon SNS トピックを作成し、関連する AWS Identity and Access Management (IAM) アクセス許可を設定します。[Task Timer (タスクタイマー)] サンプルプロジェクトで作成されるリソースの詳細については、以下を参照してください。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

• AWS CloudFormation ユーザーガイド• Amazon Simple Notification Service 開発者ガイド• AWS Lambda Developer Guide• IAM 入門ガイド

[Task Timer (タスクタイマー)] ステートマシンを作成し、すべてのリソースをプロビジョンするには

1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。

197

Page 205: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスクタイマー (Lambda、Amazon SNS)

2. [Sample Projects (サンプルプロジェクト)]、[Task Timer (タスクタイマー)] の順に選択します。

ステートマシン [Code] と [Visual Workflow] が表示されます。

Note

このステートマシンの [Code] セクションは、このサンプルプロジェクト用に作成されるAWS リソースを参照します。

3. [Create Sample Project] を選択します。

[Create Project Resources (プロジェクトリソースの作成)] ページが表示されて、作成されるリソースが示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• SendToSNS Lambda 関数• TaskTimerTopic Amazon SNS トピック

Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Create Project Resources (プロジェクトリソースの作成)] ページで [Creatingresources (リソースの作成)] と表示中に、[Stack ID (スタック ID)] リンクを開いて、どのリソースがプロビジョンされているかを確認できます。

完了すると、[New execution (新しい実行)] ページが表示されて、以下のような入力例が示されます。

{ "topic": "arn:aws:sns:us-east-2:123456789012:StepFunctionsSample-TaskTimer-517b8680-e0ad-07cf-feee-65aa5fc63ac0-SNSTopic-96RHT77RAKTS", "message": "HelloWorld", "timer_seconds": 10}

4. [Start Execution] を選択します。

ステートマシンの新しい実行が開始され、実行中の実行が表示されている新しいページが表示されます。

5. (省略可能) [Execution Details] セクションで、[Info] を選択して [Execution Status] および [Started] と[Closed] のタイムスタンプを確認します。

6. 実行の各ステップのステータス、入力、または出力を表示するには、[Visual workflow (ビジュアルワークフロー)] でステップを選択して、[Step details (ステップの詳細)] を確認します。

198

Page 206: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドコールバックパターンの例 (Amazon

SQS、Amazon SNS、Lambda)

コールバックパターンの例 (AmazonSQS、Amazon SNS、Lambda)

このサンプルプロジェクトは、AWS Step Functions をタスク実行中に一時停止して、タスク開始時に生成されたタスクトークンが外部プロセスから返されるまで待機するようにする方法を示します。

このサンプルプロジェクトがデプロイされて、実行が開始すると、次の手順が行われます。

1. Step Functions は Amazon Simple Queue Service (Amazon SQS) キューへのタスクトークンが含まれるメッセージを渡します。

2. 次に Step Functions は一時停止し、タスクトークンが返されるまで待機します。3. Amazon SQS キューは、同じタスクトークンを使用して SendTaskSuccess を呼び出す AWS Lambda

関数をトリガーします。4. タスクトークンを受信すると、ワークフローは続行します。5. "Notify Success" タスクは、コールバックが受信した Amazon Simple Notification Service (Amazon

SNS) メッセージを発行します。

Step Functions にコールバックパターンを実装する方法については、「タスクトークンのコールバックまで待機する (p. 146)」を参照してください。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。

199

Page 207: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンを作成してリ

ソースをプロビジョニングする

2. [Sample Projects (サンプルプロジェクト)] を選択し、[Callback Pattern Example (コールバックパターン例)] を選択します。

ステートマシン [Code] と [Visual Workflow] が表示されます。

3. [Create Sample Project] を選択します。

[Create Project Resources (プロジェクトリソースの作成)] ページが表示されて、作成されるリソースが示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• Amazon SQS メッセージキュー• Step Functions API アクション SendTaskSuccess を呼び出す Lambda 関数。• ワークフローを続行できるように、成功あるいは失敗を通知する Amazon SNS トピック。

Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Create Project Resources (プロジェクトリソースの作成)] ページで [Creatingresources (リソースの作成)] と表示中に、[Stack ID (スタック ID)] リンクを開いて、どのリソースがプロビジョンされているかを確認できます。

完了すると、[New execution (新しい実行)] ページが表示されます。4. (オプション) 実行名およびサンプル入力を入力します。

200

Page 208: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドLambda コールバックの例

5. [Start Execution] を選択します。

ステートマシンの新しい実行が開始され、実行中の実行が表示されている新しいページが表示されます。

6. Step Functions がどのようにワークフローを通して進行し、Amazon SQS からコールバックを受信しているかを確認するには、[Execution event history (実行イベント履歴)] のエントリを確認します。

Lambda コールバックの例このサンプルプロジェクトのコンポーネント間の連携方法については、AWS アカウントにデプロイされたリソースを参照してください。たとえば、次の Lambda 関数はタスクトークンを使用して Step Functionsを呼び出します。

console.log('Loading function');const aws = require('aws-sdk');

exports.lambda_handler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions();

201

Page 209: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon EMR ジョブの管理

for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken;

const params = { output: "\"Callback task completed successfully.\"", taskToken: taskToken };

console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`);

stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); }};

Amazon EMR ジョブの管理このサンプルプロジェクトでは、Amazon EMR および AWS Step Functions の統合のデモを行います。

Amazon EMR クラスターを作成し、複数のステップを追加し実行して、クラスターを終了する方法を示します。

Important

Amazon EMR には無料利用枠はありません。サンプルプロジェクトを実行すると、費用が発生します。価格情報は、Amazon EMR の料金表ページに記載されています。Amazon EMR サービス統合が利用できるかどうかは、Amazon EMR API が利用できるかどうかによります。このため、このサンプルプロジェクトが一部の AWS リージョンで正しく動作しない場合があります。特別なリージョンにおける制限については、Amazon EMR ドキュメントを参照してください。

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。2. [Sample Projects (サンプルプロジェクト)]、[Manage an EMR Job (EMR ジョブの管理)] の順に選択し

ます。

ステートマシン [Code] と [Visual Workflow] が表示されます。

202

Page 210: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド新しい実行の開始

3. [次へ] を選択します。

作成されるリソースを示す [Deploy resources (リソースのデプロイ)] ページが表示されます。このサンプルプロジェクトでは、リソースに Amazon S3 バケットが含まれます。

4. [リソースのデプロイ] を選択します。

Note

これらのリソースおよび関連する AWS Identity and Access Management (IAM) アクセス許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources (リソースのデプロイ)] ページが表示されている場合は、[スタック ID] リンクを開いて、プロビジョンされているリソースを表示することができます。

新しい実行の開始1. [New execution (新しい実行)] ページで、実行名を入力し (オプション)、[Start Execution (実行の開始)]

を選択します。2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. (省略可能) Step Functions の [ダッシュボード] 上にある新しく作成されたステートマシンに移動し、[新しい実行] を選択します。

4. 実行が完了したら、[ビジュアルワークフロー] の状態を選択して、[ステップの詳細] の [入力] および[出力] を参照します。

ステートマシンのコード例このサンプルオブジェクトのステートマシンはこれらのリソースにパラメータを直接渡すことで、Amazon EMR と統合します。このサンプルのステートマシンを参照して、Step Functions がどのようにステートマシンを使用して Amazon EMR タスクを同期的に呼び出し、タスクが成功または失敗するのを待機して、クラスターを終了するかをご確認ください。

203

Page 211: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンのコード例

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

{ "Comment": "An example of the Amazon States Language for running jobs on Amazon EMR", "StartAt": "Create an EMR cluster", "States": { "Create an EMR cluster": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::elasticmapreduce:createCluster.sync", "Parameters": { "Name": "ExampleCluster", "VisibleToAllUsers": true, "ReleaseLabel": "emr-5.26.0", "Applications": [ { "Name": "Hive" } ], "ServiceRole": "<EMR_SERVICE_ROLE>", "JobFlowRole": "<EMR_EC2_INSTANCE_PROFILE>", "LogUri": "s3://<EMR_LOG_S3_BUCKET>/logs/", "Instances": { "KeepJobFlowAliveWhenNoSteps": true, "InstanceFleets": [ { "Name": "MyMasterFleet", "InstanceFleetType": "MASTER", "TargetOnDemandCapacity": 1, "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge" } ] }, { "Name": "MyCoreFleet", "InstanceFleetType": "CORE", "TargetOnDemandCapacity": 1, "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge" } ] } ] } }, "ResultPath": "$.cluster", "Next": "Run first step" }, "Run first step": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::elasticmapreduce:addStep.sync", "Parameters": { "ClusterId.$": "$.cluster.ClusterId", "Step": { "Name": "My first EMR step", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": ["<COMMAND_ARGUMENTS>"] } } }, "Retry" : [ {

204

Page 212: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドIAM 例

"ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2.0 } ], "ResultPath": "$.firstStep", "Next": "Run second step" }, "Run second step": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::elasticmapreduce:addStep.sync", "Parameters": { "ClusterId.$": "$.cluster.ClusterId", "Step": { "Name": "My second EMR step", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": ["<COMMAND_ARGUMENTS>"] } } }, "Retry" : [ { "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2.0 } ], "ResultPath": "$.secondStep", "Next": "Terminate Cluster" }, "Terminate Cluster": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::elasticmapreduce:terminateCluster", "Parameters": { "ClusterId.$": "$.cluster.ClusterId" }, "End": true } }}

IAM 例サンプルプロジェクトによって生成されたこのサンプルの AWS Identity and Access Management (IAM) ポリシーには、ステートマシンおよび関連リソースを実行するために必要な最小限の権限が付与されています。ベストプラクティスとして、IAM ポリシーで必要なアクセス許可のみ付与することをお勧めします。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:RunJobFlow", "elasticmapreduce:DescribeCluster", "elasticmapreduce:TerminateJobFlows" ], "Resource": "*" },

205

Page 213: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドIAM 例

{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::123456789012:role/StepFunctionsSample-EMRJobManagement-EMRServiceRole-ANPAJ2UCCR6DPCEXAMPLE", "arn:aws:iam::123456789012:role/StepFunctionsSample-EMRJobManagementWJALRXUTNFEMI-ANPAJ2UCCR6DPCEXAMPLE-EMREc2InstanceProfile-1ANPAJ2UCCR6DPCEXAMPLE" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:sa-east-1:123456789012:rule/StepFunctionsGetEventForEMRRunJobFlowRule" ] } ]}

次のポリシーでは、addStep に十分なアクセス許可があることを確認します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:DescribeStep", "elasticmapreduce:CancelSteps" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:sa-east-1:123456789012:rule/StepFunctionsGetEventForEMRAddJobFlowStepsRule" ] } ]}}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

206

Page 214: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドワークフロー内でワークフローを

開始する (Step Functions、Lambda)

ワークフロー内でワークフローを開始する (StepFunctions、Lambda)

このサンプルプロジェクトは、AWS Step Functions ステートマシンを使用して他のステートマシンの実行を開始する方法を示しています。「タスク状態からワークフロー実行を開始する (p. 135)」を参照してください。

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。2. [サンプルプロジェクト] を選択し、[Start a Workflow Within a Workflow (ワークフロー内でワークフ

ローを開始)] を選択します。

ステートマシン [コード] と [ビジュアルワークフロー] が表示されます。

3. [次へ] を選択します。

作成されるリソースを示す [Deploy resources (リソースのデプロイ)] ページが表示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• 追加の Step Functions ステートマシン• コールバックの Lambda 関数

4. [リソースのデプロイ] を選択します。

Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources (リソースのデプロイ)] ページが表示されている場合は、[スタック ID] リンクを開いて、プロビジョンされているリソースを表示することができます。

新しい実行の開始1. [New execution (新しい実行)] ページで、実行名を入力し (オプション)、[Start Execution (実行の開始)]

を選択します。

207

Page 215: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンのコード例

2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでそのID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. 必要に応じて、Step Functions の [ダッシュボード] 上にある新しく作成されたステートマシンに移動し、[New execution (新しい実行)] を選択します。

4. 実行が完了したら、[ビジュアルワークフロー] の状態を選択して、[ステップの詳細] の [入力] および[出力] を参照します。

ステートマシンのコード例このサンプルプロジェクトのステートマシンは、パラメータを直接リソースに渡すことで、別のステートマシンおよび AWS Lambda と統合します。

このステートマシンの例を参照して、Step Functions が他のステートマシンの StartExecution API アクションを呼び出す方法を確認してください。他のステートマシンの 2 つのインスタンスを並行して起動します。1 つは ジョブを実行する (p. 146) パターンを使用し、もう 1 つは タスクトークンのコールバックまで待機する (p. 146) パターンを使用します。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

{ "Comment": "An example of combining workflows using a Step Functions StartExecution task state with various integration patterns.", "StartAt": "Start new workflow and continue", "States": { "Start new workflow and continue": { "Comment": "Start an execution of another Step Functions state machine and continue", "Type": "Task", "Resource": "arn:aws:states:::states:startExecution", "Parameters": { "StateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:NestingPatternAnotherStateMachine-HZ9gtgspmdun", "Input": { "NeedCallback": false, "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id" } }, "Next": "Start in parallel" }, "Start in parallel": { "Comment": "Start two executions of the same state machine in parallel", "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Start new workflow and wait for completion", "States": { "Start new workflow and wait for completion": { "Comment": "Start an execution of the same 'NestingPatternAnotherStateMachine' and wait for its completion", "Type": "Task", "Resource": "arn:aws:states:::states:startExecution.sync", "Parameters": {

208

Page 216: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドMap 状態を使用してデータを動的に処理する

"StateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:NestingPatternAnotherStateMachine-HZ9gtgspmdun", "Input": { "NeedCallback": false, "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id" } }, "OutputPath": "$.Output", "End": true } } }, { "StartAt": "Start new workflow and wait for callback", "States": { "Start new workflow and wait for callback": { "Comment": "Start an execution and wait for it to call back with a task token", "Type": "Task", "Resource": "arn:aws:states:::states:startExecution.waitForTaskToken", "Parameters": { "StateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:NestingPatternAnotherStateMachine-HZ9gtgspmdun", "Input": { "NeedCallback": true, "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id", "TaskToken.$": "$$.Task.Token" } }, "End": true } } } ] } }}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

Map 状態を使用してデータを動的に処理するこのサンプルプロジェクトでは、 Map 状態を使用した動的な並列処理を示します。このサンプルプロジェクトでは以下を作成します。

• 2 つの AWS Lambda 関数• Amazon Simple Queue Service (Amazon SQS) キュー• Amazon Simple Notification Service (Amazon SNS) トピック• Amazon DynamoDB テーブル• AWS Step Functions ステートマシン

このプロジェクトでは、Step Functions は AWS Lambda 関数を使用して Amazon SQS キューからメッセージをプルし、そのメッセージの JSON 配列を Map 状態に渡します。キューのメッセージごとに、ステートマシンはメッセージを DynamoDB に書き込み、他の Lambda 関数を呼び出して Amazon SQS からメッセージを削除し、Amazon SNS トピックにメッセージを発行します。

Map 状態と Step Functions サービス統合の詳細については、以下を参照してください。

209

Page 217: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンを作成してリソースをプロビジョニングする

• マップ (p. 113)• サービスの AWS Step Functions との統合 (p. 143)

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。2. [Sample Projects (サンプルプロジェクト)] を選択し、[Iterate steps with a Map state (Map 状態でス

テップを反復)] を選択します。

ステートマシン [コード] と [ビジュアルワークフロー] が表示されます。

3. [Next] を選択します。

作成されるリソースを示す [Deploy resources (リソースのデプロイ)] ページが表示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• Amazon SQS キュー• Amazon SNS トピック• DynamoDB テーブル• 2 つの Lambda 関数• Step Functions ステートマシン

210

Page 218: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon SNS トピックへの登録

4. [リソースのデプロイ] を選択します。

Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources (リソースのデプロイ)] ページが表示されている場合は、[スタック ID] リンクを開いて、プロビジョンされているリソースを表示することができます。

サンプルプロジェクトのリソースがデプロイされたら、ステートマシンの実行を開始する前に、AmazonSQS キューに項目を追加し、Amazon SNS トピックに登録する必要があります。

Amazon SNS トピックへの登録1. Amazon SNS コンソールを開きます。2. [トピック] を選択し、 Map 状態サンプルプロジェクトで作成されたトピックを選択します。

名前は MapSampleProj-SNSTopic-1CQO4HQ3IR1KN のようになります。3. [サブスクリプション] で、[サブスクリプションの作成] を選択します。

[サブスクリプションの作成] ページが表示され、トピックのトピック ARN が一覧表示されます。4. [プロトコル] で [E メール] を選択します。5. [エンドポイント] で、トピックにサブスクライブする E メールアドレスを入力します。6. [Create subscription] を選択します。

Note

サブスクリプションがアクティブになる前に、E メールでの確認が必要です。7. 関連するアカウントでサブスクリプション確認用 E メールを開き、[サブスクリプションを確認] する

ための URL を開きます。

[サブスクリプションを確認しました] ページが表示されます。

Amazon SQS キューにメッセージを追加する1. Amazon SQS コンソールを開きます。2. Map 状態のサンプルプロジェクトで作成されたキューを選択します。

名前は MapSampleProj-SQSQueue-1UDIC9VZDORN7 のようになります。3. [キュー操作] リストで、[メッセージの送信] を選択します。4. [メッセージの送信] ウィンドウで、メッセージ 入力し、[メッセージの送信] を選択します。5. [別メッセージの送信] を選択します。

Amazon SQS キューに複数のメッセージが追加されるまで、メッセージの入力を続けます。6. [Close] を選択します。

新しい実行の開始Note

Amazon SNS のキューは結果整合性があります。最良の結果を得るには、キューに入力してからステートマシンの実行を開始するまで数分待ちます。

211

Page 219: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンのコード例

1. Step Functions コンソールを開きます。2. [State machines (ステートマシン)] ページで、サンプルプロジェクトで作成された

MapStateStateMachine ステートマシンを選択し、[Start execution (実行の開始)] を選択します。3. [New execution (新しい実行)] ページで、実行名を入力し (オプション)、[Start Execution (実行の開始)]

を選択します。4. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

5. (省略可能) Step Functions の [ダッシュボード] 上にある新しく作成されたステートマシンに移動し、[新しい実行] を選択します。

6. 実行が完了したら、[ビジュアルワークフロー] の状態を選択して、[ステップの詳細] の [入力] および[出力] を参照します。

ステートマシンのコード例このサンプルオブジェクトのステートマシンは、Amazon SQS、Amazon SNS、および Lambda にパラメータを直接渡すことで、これらのリソースと統合します。

このステートマシンの例を参照し、Resource フィールドの Amazon リソースネーム (ARN) に接続してParameters をサービス API に渡すことで、Step Functions が Lambda、DynamoDB、および AmazonSNS を制御する方法を確認します。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

{ "Comment": "An example of the Amazon States Language for reading messages from an SQS queue and iteratively processing each message.", "StartAt": "Read messages from SQS Queue", "States": { "Read Messages from SQS Queue": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "MapSampleProj-ReadFromSQSQueueLambda-1MY3M63RMJVA9" }, "Next": "Are there messages to process?" }, "Are there messages to process?": { "Type": "Choice", "Choices": [ { "Variable": "$", "StringEquals": "No messages", "Next": "Finish" } ], "Default": "Process messages" }, "Process messages": { "Type": "Map", "Next": "Finish",

212

Page 220: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンのコード例

"ItemsPath": "$", "Parameters": { "MessageNumber.$": "$$.Map.Item.Index", "MessageDetails.$": "$$.Map.Item.Value" }, "Iterator": { "StartAt": "Write message to DynamoDB", "States": { "Write message to DynamoDB": { "Type": "Task", "Resource": "arn:aws:states:::dynamodb:putItem", "ResultPath": null, "Parameters": { "TableName": "MapSampleProj-DDBTable-YJDJ1MKIN6C5", "ReturnConsumedCapacity": "TOTAL", "Item": { "MessageId": { "S.$": "$.MessageDetails.MessageId" }, "Body": { "S.$": "$.MessageDetails.Body" } } }, "Next": "Remove message from SQS queue" }, "Remove message from SQS queue": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "InputPath": "$.MessageDetails", "ResultPath": null, "Parameters": { "FunctionName": "MapSampleProj-DeleteFromSQSQueueLambda-198J2839ZO5K2", "Payload": { "ReceiptHandle.$": "$.ReceiptHandle" } }, "Next": "Publish message to SNS topic" }, "Publish message to SNS topic": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "InputPath": "$.MessageDetails", "Parameters": { "Subject": "Message from Step Functions!", "Message.$": "$.Body", "TopicArn": "arn:aws:sns:us-east-1:012345678910:MapSampleProj-SNSTopic-1CQO4HQ3IR1KN" }, "End": true } } } }, "Finish": { "Type": "Succeed" } }}

213

Page 221: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドIAM 例

IAM 例サンプルプロジェクトによって生成されたこのサンプルの AWS Identity and Access Management (IAM) ポリシーには、ステートマシンおよび関連リソースを実行するために必要な最小限の権限が付与されています。IAM ポリシーに必要なアクセス許可のみを含めることをお勧めします。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-1:012345678901:function:MapSampleProj-ReadFromSQSQueueLambda-1MY3M63RMJVA9", "arn:aws:lambda:us-east-1:012345678901:function:MapSampleProj-DeleteFromSQSQueueLambda-198J2839ZO5K2" ], "Effect": "Allow" }, { "Action": [ "dynamodb:PutItem" ], "Resource": [ "arn:aws:dynamodb:us-east-1:012345678901:table/MapSampleProj-DDBTable-YJDJ1MKIN6C5" ], "Effect": "Allow" }, { "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:us-east-1:012345678901:MapSampleProj-SNSTopic-1CQO4HQ3IR1KN" ], "Effect": "Allow" } ]}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

機械学習モデルのトレーニングこのサンプルプロジェクトでは、Amazon SageMaker と AWS Step Functions を使用して機械学習モデルをトレーニングする方法とテストデータセットをバッチ変換する方法を示します。このサンプルプロジェクトでは以下を作成します。

• AWS Lambda 関数• Amazon Simple Storage Service (Amazon S3) バケット• AWS Step Functions ステートマシン• 関連する AWS Identity and Access Management (IAM) ロール

214

Page 222: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンを作成してリソースをプロビジョニングする

このプロジェクトでは、Step Functions は Lambda 関数を使用して Amazon S3 バケットにテストデータセットをシードします。次に、機械学習モデルをトレーニングし、Amazon SageMaker サービス統合 (p. 163)を使用してバッチ変換を実行します。

Amazon SageMaker と Step Functions のサービス統合の詳細については、以下を参照してください。

• サービスの AWS Step Functions との統合 (p. 143)• Step Functions を使用して Amazon SageMaker を管理する (p. 163)

Note

このサンプルプロジェクトでは、料金が発生する場合があります。AWS の新規ユーザーには、無料利用枠があります。この枠では、サービスを利用しても一定のレベル以下であれば無料です。AWS のコストと無料利用枠の詳細については、「AmazonSageMaker の料金」を参照してください。

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。2. [Sample Projects (サンプルプロジェクト)]、[Train a machine learning model (機械学習モデルのト

レーニング)] の順に選択します。

ステートマシン [コード] と [ビジュアルワークフロー] が表示されます。

3. [Next] を選択します。

作成されるリソースを示す [Deploy resources (リソースのデプロイ)] ページが表示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• Lambda 関数• Amazon S3: バケット

215

Page 223: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド新しい実行の開始

• Step Functions ステートマシン• 関連する IAM ロール

4. [リソースのデプロイ] を選択します。

Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources (リソースのデプロイ)] ページが表示されている場合は、[スタック ID] リンクを開いて、プロビジョンされているリソースを表示することができます。

新しい実行の開始1. Step Functions コンソールを開きます。2. [State machines (ステートマシン)] ページで、サンプルプロジェクトで作成された

TrainAndBatchTransformStateMachine ステートマシンを選択し、[Start execution (実行の開始)] を選択します。

3. [New execution (新しい実行)] ページで、実行名を入力し (オプション)、[Start Execution (実行の開始)]を選択します。

4. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでそのID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

5. (省略可能) Step Functions の [ダッシュボード] 上にある新しく作成されたステートマシンに移動し、[新しい実行] を選択します。

6. 実行が完了したら、[ビジュアルワークフロー] の状態を選択して、[ステップの詳細] の [入力] および[出力] を参照します。

ステートマシンのコード例このサンプルプロジェクトのステートマシンは、Amazon SageMaker と AWS Lambda にパラメータを直接渡すことによってこれらのリソースと統合し、トレーニングデータのソースと出力に Amazon S3 バケットを使用します。

このステートマシンの例を参照して、Step Functions が Lambda と Amazon SageMaker をどのように制御するかを確認します。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

{ "StartAt": "Generate dataset", "States": { "Generate dataset": { "Resource": "arn:aws:lambda:us-west-2:123456789012:function:TrainAndBatchTransform-SeedingFunction-17RNSOTG97HPV", "Type": "Task", "Next": "Train model (XGBoost)" },

216

Page 224: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンのコード例

"Train model (XGBoost)": { "Resource": "arn:aws:states:::sagemaker:createTrainingJob.sync", "Parameters": { "AlgorithmSpecification": { "TrainingImage": "433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest", "TrainingInputMode": "File" }, "OutputDataConfig": { "S3OutputPath": "s3://trainandbatchtransform-s3bucket-1jn1le6gadwfz/models" }, "StoppingCondition": { "MaxRuntimeInSeconds": 86400 }, "ResourceConfig": { "InstanceCount": 1, "InstanceType": "ml.m4.xlarge", "VolumeSizeInGB": 30 }, "RoleArn": "arn:aws:iam::123456789012:role/TrainAndBatchTransform-SageMakerAPIExecutionRole-Y9IX3DLF6EUO", "InputDataConfig": [ { "DataSource": { "S3DataSource": { "S3DataDistributionType": "ShardedByS3Key", "S3DataType": "S3Prefix", "S3Uri": "s3://trainandbatchtransform-s3bucket-1jn1le6gadwfz/csv/train.csv" } }, "ChannelName": "train", "ContentType": "text/csv" } ], "HyperParameters": { "objective": "reg:logistic", "eval_metric": "rmse", "num_round": "5" }, "TrainingJobName.$": "$$.Execution.Name" }, "Type": "Task", "Next": "Save Model" }, "Save Model": { "Parameters": { "PrimaryContainer": { "Image": "433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest", "Environment": {}, "ModelDataUrl.$": "$.ModelArtifacts.S3ModelArtifacts" }, "ExecutionRoleArn": "arn:aws:iam::123456789012:role/TrainAndBatchTransform-SageMakerAPIExecutionRole-Y9IX3DLF6EUO", "ModelName.$": "$.TrainingJobName" }, "Resource": "arn:aws:states:::sagemaker:createModel", "Type": "Task", "Next": "Batch transform" }, "Batch transform": { "Type": "Task", "Resource": "arn:aws:states:::sagemaker:createTransformJob.sync", "Parameters": { "ModelName.$": "$$.Execution.Name", "TransformInput": { "CompressionType": "None", "ContentType": "text/csv",

217

Page 225: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドIAM 例

"DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://trainandbatchtransform-s3bucket-1jn1le6gadwfz/csv/test.csv" } } }, "TransformOutput": { "S3OutputPath": "s3://trainandbatchtransform-s3bucket-1jn1le6gadwfz/output" }, "TransformResources": { "InstanceCount": 1, "InstanceType": "ml.m4.xlarge" }, "TransformJobName.$": "$$.Execution.Name" }, "End": true } }}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

IAM 例サンプルプロジェクトで生成されたこれらの AWS Identity and Access Management (IAM) ポリシーの例には、ステートマシンおよび関連リソースを実行するために必要な最小限の権限が含まれています。IAM ポリシーに必要なアクセス許可のみを含めることをお勧めします。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "cloudwatch:PutMetricData", "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:DescribeLogStreams", "s3:GetObject", "s3:PutObject", "s3:ListBucket", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*", "Effect": "Allow" } ]}

次のポリシーでは、Amazon S3 バケットにサンプルデータをシードすることを Lambda 関数に許可します。

{ "Version": "2012-10-17", "Statement": [ {

218

Page 226: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド機械学習モデルのチューニング

"Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::trainandbatchtransform-s3bucket-1jn1le6gadwfz/*", "Effect": "Allow" } ]}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

機械学習モデルのチューニングこのサンプルプロジェクトでは、Amazon SageMaker を使用して機械学習モデルのハイパーパラメータを調整し、テストデータセットをバッチ変換する方法を示します。このサンプルプロジェクトでは以下を作成します。

• 3 つの AWS Lambda 関数• Amazon Simple Storage Service (Amazon S3) バケット• AWS Step Functions ステートマシン• 関連する AWS Identity and Access Management (IAM) ロール

このプロジェクトでは、Step Functions は Lambda 関数を使用して Amazon S3 バケットにテストデータセットをシードします。次に、Amazon SageMaker サービス統合 (p. 163)を使用してハイパーパラメータチューニングジョブを作成します。次に、Lambda 関数を使用してデータパスの抽出、チューニングモデルの保存、モデル名の抽出を行い、バッチ変換ジョブを実行して Amazon SageMaker で推論を行います。

Amazon SageMaker と Step Functions のサービス統合の詳細については、以下を参照してください。

• サービスの AWS Step Functions との統合 (p. 143)• Step Functions を使用して Amazon SageMaker を管理する (p. 163)

Note

このサンプルプロジェクトでは、料金が発生する場合があります。AWS の新規ユーザーには、無料利用枠があります。この枠では、サービスを利用しても一定のレベル以下であれば無料です。AWS のコストと無料利用枠の詳細については、「AmazonSageMaker の料金」を参照してください。

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。2. [Sample Projects (サンプルプロジェクト)]、[Tune a Machine Learning model (機械学習モデルの

チューニング)] の順に選択します。

ステートマシン [コード] と [ビジュアルワークフロー] が表示されます。

219

Page 227: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド新しい実行の開始

3. [Next] を選択します。

作成されるリソースを示す [Deploy resources (リソースのデプロイ)] ページが表示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• 3 つの Lambda 関数• Amazon S3: バケット• Step Functions ステートマシン• 関連する IAM ロール

4. [リソースのデプロイ] を選択します。

Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources (リソースのデプロイ)] ページが表示されている場合は、[スタック ID] リンクを開いて、プロビジョンされているリソースを表示することができます。

新しい実行の開始1. Step Functions コンソールを開きます。2. [State machines (ステートマシン)] ページで、サンプルプロジェクトで作成された

HyperparamTuningAndBatchTransformStateMachine ステートマシンを選択し、[Start execution (実行の開始)] を選択します。

3. [New execution (新しい実行)] ページで、実行名を入力し (オプション)、[Start Execution (実行の開始)]を選択します。

4. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでそのID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

5. (省略可能) Step Functions の [ダッシュボード] 上にある新しく作成されたステートマシンに移動し、[新しい実行] を選択します。

6. 実行が完了したら、[ビジュアルワークフロー] の状態を選択して、[ステップの詳細] の [入力] および[出力] を参照します。

220

Page 228: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンのコード例

ステートマシンのコード例このサンプルプロジェクトのステートマシンは、Amazon SageMaker と AWS Lambda にパラメータを直接渡すことによってこれらのリソースと統合し、トレーニングデータのソースと出力に Amazon S3 バケットを使用します。

このステートマシンの例を参照して、Step Functions が Lambda と Amazon SageMaker をどのように制御するかを確認します。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

{ "StartAt": "Generate Training Dataset", "States": { "Generate Training Dataset": { "Resource": "arn:aws:lambda:us-west-2:012345678912:function:StepFunctionsSample-SageMa-LambdaForDataGeneration-1TF67BUE5A12U", "Type": "Task", "Next": "HyperparameterTuning (XGBoost)" }, "HyperparameterTuning (XGBoost)": { "Resource": "arn:aws:states:::sagemaker:createHyperParameterTuningJob.sync", "Parameters": { "HyperParameterTuningJobName.$": "$.body.jobName", "HyperParameterTuningJobConfig": { "Strategy": "Bayesian", "HyperParameterTuningJobObjective": { "Type": "Minimize", "MetricName": "validation:rmse" }, "ResourceLimits": { "MaxNumberOfTrainingJobs": 2, "MaxParallelTrainingJobs": 2 }, "ParameterRanges": { "ContinuousParameterRanges": [{ "Name": "alpha", "MinValue": "0", "MaxValue": "1000", "ScalingType": "Auto" }, { "Name": "gamma", "MinValue": "0", "MaxValue": "5", "ScalingType": "Auto" } ], "IntegerParameterRanges": [{ "Name": "max_delta_step", "MinValue": "0", "MaxValue": "10", "ScalingType": "Auto" }, { "Name": "max_depth", "MinValue": "0", "MaxValue": "10", "ScalingType": "Auto" } ]

221

Page 229: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンのコード例

} }, "TrainingJobDefinition": { "AlgorithmSpecification": { "TrainingImage": "433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest", "TrainingInputMode": "File" }, "OutputDataConfig": { "S3OutputPath": "s3://stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/models" }, "StoppingCondition": { "MaxRuntimeInSeconds": 86400 }, "ResourceConfig": { "InstanceCount": 1, "InstanceType": "ml.m4.xlarge", "VolumeSizeInGB": 30 }, "RoleArn": "arn:aws:iam::012345678912:role/StepFunctionsSample-SageM-SageMakerAPIExecutionRol-1MNH1VS5CGGOG", "InputDataConfig": [{ "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": "s3://stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/csv/train.csv" } }, "ChannelName": "train", "ContentType": "text/csv" }, { "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": "s3://stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/csv/validation.csv" } }, "ChannelName": "validation", "ContentType": "text/csv" }], "StaticHyperParameters": { "precision_dtype": "float32", "num_round": "2" } } }, "Type": "Task", "Next": "Extract Model Path" }, "Extract Model Path": { "Resource": "arn:aws:lambda:us-west-2:012345678912:function:StepFunctionsSample-SageM-LambdaToExtractModelPath-V0R37CVARUS9", "Type": "Task", "Next": "HyperparameterTuning - Save Model" }, "HyperparameterTuning - Save Model": { "Parameters": { "PrimaryContainer": { "Image": "433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest",

222

Page 230: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドIAM 例

"Environment": {}, "ModelDataUrl.$": "$.body.modelDataUrl" }, "ExecutionRoleArn": "arn:aws:iam::012345678912:role/StepFunctionsSample-SageM-SageMakerAPIExecutionRol-1MNH1VS5CGGOG", "ModelName.$": "$.body.bestTrainingJobName" }, "Resource": "arn:aws:states:::sagemaker:createModel", "Type": "Task", "Next": "Extract Model Name" }, "Extract Model Name": { "Resource": "arn:aws:lambda:us-west-2:012345678912:function:StepFunctionsSample-SageM-LambdaToExtractModelName-8FUOB30SM5EM", "Type": "Task", "Next": "Batch transform" }, "Batch transform": { "Type": "Task", "Resource": "arn:aws:states:::sagemaker:createTransformJob.sync", "Parameters": { "ModelName.$": "$.body.jobName", "TransformInput": { "CompressionType": "None", "ContentType": "text/csv", "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/csv/test.csv" } } }, "TransformOutput": { "S3OutputPath": "s3://stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/output" }, "TransformResources": { "InstanceCount": 1, "InstanceType": "ml.m4.xlarge" }, "TransformJobName.$": "$.body.jobName" }, "End": true } }}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

IAM 例サンプルプロジェクトで生成されたこれらの AWS Identity and Access Management (IAM) ポリシーの例には、ステートマシンおよび関連リソースを実行するために必要な最小限の権限が含まれています。IAM ポリシーに必要なアクセス許可のみを含めることをお勧めします。

次の IAM ポリシーはステートマシンにアタッチされ、必要なリソースである AmazonSageMaker、Lambda、および Amazon S3 にアクセスすることをステートマシンの実行に許可します。

{ "Version": "2012-10-17",

223

Page 231: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドIAM 例

"Statement": [ { "Action": [ "sagemaker:CreateHyperParameterTuningJob", "sagemaker:DescribeHyperParameterTuningJob", "sagemaker:StopHyperParameterTuningJob", "sagemaker:ListTags", "sagemaker:CreateModel", "sagemaker:CreateTransformJob", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-west-2:012345678912:function:StepFunctionsSample-SageMa-LambdaForDataGeneration-1TF67BUE5A12U", "arn:aws:lambda:us-west-2:012345678912:function:StepFunctionsSample-SageM-LambdaToExtractModelPath-V0R37CVARUS9", "arn:aws:lambda:us-west-2:012345678912:function:StepFunctionsSample-SageM-LambdaToExtractModelName-8FUOB30SM5EM" ], "Effect": "Allow" }, { "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:*:*:rule/StepFunctionsGetEventsForSageMakerTrainingJobsRule", "arn:aws:events:*:*:rule/StepFunctionsGetEventsForSageMakerTransformJobsRule", "arn:aws:events:*:*:rule/StepFunctionsGetEventsForSageMakerTuningJobsRule" ], "Effect": "Allow" } ]}

次の IAM ポリシーは、 HyperparameterTuning 状態の TrainingJobDefinition フィールドおよびHyperparameterTuning フィールドで参照されます。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "cloudwatch:PutMetricData", "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:DescribeLogStreams", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "sagemaker:DescribeHyperParameterTuningJob",

224

Page 232: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon SQS からの大容量メッセー

ジの処理 (Express ワークフロー)

"sagemaker:StopHyperParameterTuningJob", "sagemaker:ListTags" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/*", "Effect": "Allow" }, { "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f", "Effect": "Allow" } ]}

次の IAM ポリシーでは、Amazon S3 バケットにサンプルデータをシードすることを Lambda 関数に許可します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/*", "Effect": "Allow" } ]}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

Amazon SQS からの大容量メッセージの処理(Express ワークフロー)

このサンプルプロジェクトでは、AWS Step Functions Express ワークフローを使用して、Amazon SimpleQueue Service (Amazon SQS) などの大容量のイベントソースからのメッセージまたはデータを処理する方法を示します。Express ワークフローは非常に高いレートで開始できるため、大容量のイベント処理やストリーミングデータワークロードに最適です。

イベントソースからステートマシンを実行するために一般的に使用される 2 つの方法は次のとおりです。

• イベントソースがイベントを発行するたびにステートマシンの実行を開始するよう AmazonCloudWatch Events ルールを設定します。 詳細については「イベントでトリガーする CloudWatch イベントルールの作成」をご参照ください。

225

Page 233: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンを作成してリソースをプロビジョニングする

• イベントソースを Lambda 関数にマッピングし、ステートマシンを実行する関数コードを記述します。AWS Lambda 関数は、イベントソースがイベントを発行するたびに呼び出され、ステートマシンの実行が開始されます。詳細については、「Amazon SQS での AWS Lambda の使用」を参照してください。

このサンプルプロジェクトでは、2 番目の方法を使用して Amazon SQS キューがメッセージを送信するたびに実行を開始します。同様の設定を使用して、Amazon Simple Storage Service (Amazon S3)、AmazonDynamoDB、Amazon Kinesis などの他のイベントソースから Express ワークフローの実行をトリガーできます。

Express ワークフローと Step Functions サービス統合の詳細については、以下を参照してください。

• 標準ワークフローとExpress ワークフロー (p. 88)• サービスの AWS Step Functions との統合 (p. 143)• Express ワークフローのクォータ (p. 246)

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[ステートマシンの作成] を選択します。2. [サンプルプロジェクトを実行] を選択し、[Amazon SQS からの大容量メッセージを処理] を選択しま

す。

ステートマシン [Code] と [Visual Workflow] が表示されます。

3. [次へ] を選択します。

作成されるリソースを示す [Deploy resources (リソースのデプロイ)] ページが表示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• Step Functions ステートマシン• Amazon SQS キュー• Lambda 関数

226

Page 234: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドトリガーの実行

4. [リソースのデプロイ] を選択します。

Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources (リソースのデプロイ)] ページが表示されている場合は、[スタック ID] リンクを開いて、プロビジョンされているリソースを表示することができます。

トリガーの実行1. Amazon SQS コンソールを開きます。2. サンプルプロジェクトで作成されたキューを選択します。

名前は Example-SQSQueue-wJalrXUtnFEMI のようになっています。3. [キュー操作] リストで、[メッセージの送信] を選択します。4. コピーボタンを使用して次のメッセージをコピーし、[メッセージの送信] ウィンドウに入力して、

[メッセージの送信] を選択します。

Note

このサンプルメッセージでは、input: 行がページに合わせて改行されています。コピーボタンを使用するか、改行なしの 1 行として入力されていることを確認します。

{ "input": "QW5kIGxpa2UgdGhlIGJhc2VsZXNzIGZhYnJpYyBvZiB0aGlzIHZpc2lvbiwgVGhlIGNsb3VkLWNhcHBlZCB0b3dlcnMsIHRoZSBnb3JnZW 91cyBwYWxhY2VzLCBUaGUgc29sZW1uIHRlbXBsZXMsIHRoZSBncmVhdCBnbG9iZSBpdHNlbGbigJQgWWVhLCBhbGwgd2hpY2ggaXQgaW5o ZXJpdOKAlHNoYWxsIGRpc3NvbHZlLCBBbmQgbGlrZSB0aGlzIGluc3Vic3RhbnRpYWwgcGFnZWFudCBmYWRlZCwgTGVhdmUgbm90IGEgcm FjayBiZWhpbmQuIFdlIGFyZSBzdWNoIHN0dWZmIEFzIGRyZWFtcyBhcmUgbWFkZSBvbiwgYW5kIG91ciBsaXR0bGUgbGlmZSBJcyByb3Vu ZGVkIHdpdGggYSBzbGVlcC4gU2lyLCBJIGFtIHZleGVkLiBCZWFyIHdpdGggbXkgd2Vha25lc3MuIE15IG9sZCBicmFpbiBpcyB0cm91Ym xlZC4gQmUgbm90IGRpc3R1cmJlZCB3aXRoIG15IGluZmlybWl0eS4gSWYgeW91IGJlIHBsZWFzZWQsIHJldGlyZSBpbnRvIG15IGNlbGwg QW5kIHRoZXJlIHJlcG9zZS4gQSB0dXJuIG9yIHR3byBJ4oCZbGwgd2FsayBUbyBzdGlsbCBteSBiZWF0aW5nIG1pbmQu"}

5. [Close] を選択します。6. Step Functions コンソールを開きます。7. Amazon CloudWatch Logs ロググループに移動し、ログを調べます。ロググループの名前

は、example-ExpressLogGroup-wJalrXUtnFEMI のように表示されます。

Lambda 関数コードの例以下は、開始する Lambda 関数が AWS SDK を使用してステートマシンの実行を開始する方法を示すLambda 関数コードです。

import boto3

def lambda_handler(event, context): message_body = event['Records'][0]['body'] client = boto3.client('stepfunctions')

227

Page 235: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンのコード例

response = client.start_execution( stateMachineArn='${ExpressStateMachineArn}', input=message_body )

ステートマシンのコード例このサンプルプロジェクトの Express ワークフローは、テキスト処理用の Lambda 関数のセットで構成されています。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

{ "Comment": "An example of using Express workflows to run text processing for each message sent from an SQS queue.", "StartAt": "Decode base64 string", "States": { "Decode base64 string": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "<BASE64_DECODER_LAMBDA_FUNCTION_NAME>", "Payload.$": "$" }, "Next": "Generate statistics" }, "Generate statistics": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "<TEXT_STATS_GENERATING_LAMBDA_FUNCTION_NAME>", "Payload.$": "$" }, "Next": "Remove special characters" }, "Remove special characters": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "<STRING_CLEANING_LAMBDA_FUNCTION_NAME>", "Payload.$": "$" }, "Next": "Tokenize and count" }, "Tokenize and count": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "<TOKENIZING_AND_WORD_COUNTING_LAMBDA_FUNCTION_NAME>", "Payload.$": "$" }, "End": true } }}

228

Page 236: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドIAM 例

IAM 例サンプルプロジェクトによって生成されたこのサンプルの AWS Identity and Access Management (IAM) ポリシーには、ステートマシンおよび関連リソースを実行するために必要な最小限の権限が付与されています。IAM ポリシーに必要なアクセス許可のみを含めることをお勧めします。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-1:123456789012:function:example-Base64DecodeLambda-wJalrXUtnFEMI", "arn:aws:lambda:us-east-1:123456789012:function:example-StringCleanerLambda-je7MtGbClwBF", "arn:aws:lambda:us-east-1:123456789012:function:example-TokenizerCounterLambda-wJalrXUtnFEMI", "arn:aws:lambda:us-east-1:123456789012:function:example-GenerateStatsLambda-je7MtGbClwBF" ], "Effect": "Allow" } ]}

次のポリシーでは、CloudWatch Logs に十分なアクセス許可があることを確認します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogDelivery", "logs:GetLogDelivery", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:ListLogDeliveries", "logs:PutResourcePolicy", "logs:DescribeResourcePolicies", "logs:DescribeLogGroups" ], "Resource": [ "*" ], "Effect": "Allow" } ]}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

229

Page 237: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド選択的チェックポイントの例 (Express ワークフロー)

選択的チェックポイントの例 (Express ワークフロー)

このサンプルプロジェクトでは、選択的チェックポイントを行う模擬 e コマースワークフローを実行して、標準ワークフローと Express ワークフローを組み合わせる方法を示します。このサンプルプロジェクトをデプロイすると、標準ワークフローステートマシン、ネストされた Express ワークフローステートマシン、AWS Lambda 関数、Amazon Simple Queue Service (Amazon SQS) キュー、および AmazonSimple Notification Service (Amazon SNS) トピックが作成されます。

Express ワークフロー、ネストされたワークフロー、および Step Functions サービス統合の詳細については、以下を参照してください。

• 標準ワークフローとExpress ワークフロー (p. 88)• タスク状態からワークフロー実行を開始する (p. 135)• サービスの AWS Step Functions との統合 (p. 143)

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[ステートマシンの作成] を選択します。2. [サンプルプロジェクトの実行] を選択し、[選択的なチェックポイントの例] を選択します。

標準 ワークフローステートマシンの [コード] と [ビジュアルワークフロー] が表示されます。

サンプルプロジェクトがデプロイされると、ネストされた Express ワークフローのステートマシン[コード] と [ビジュアルワークフロー] を表示することができます。

3. [次へ] を選択します。

作成されるリソースを示す [Deploy resources (リソースのデプロイ)] ページが表示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• Step Functions ステートマシン

230

Page 238: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド新しい実行の開始

• Amazon SQS キュー• Lambda 関数

4. [リソースのデプロイ] を選択します。

Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources (リソースのデプロイ)] ページが表示されている場合は、[スタック ID] リンクを開いて、プロビジョンされているリソースを表示することができます。

サンプルプロジェクトのリソースがデプロイされたら、次の操作を行います。

新しい実行の開始1. Step Functions コンソールを開きます。2. [ステートマシン] ページで、サンプルプロジェクトで作成されたステートマシンを選択し、[実行の開

始] を選択します。3. [New execution (新しい実行)] ページで、実行名を入力し (オプション)、[Start Execution (実行の開始)]

を選択します。4. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

5. (省略可能) Step Functions の [ダッシュボード] 上にある新しく作成されたステートマシンに移動し、[実行の開始] を選択します。

6. 実行が完了したら、Step Functions コンソールを開くことができます。7. CloudWatch Logs ロググループに移動し、ログを調べます。ロググループの名前は、example-

ExpressLogGroup-wJalrXUtnFEMI のように表示されます。

親のステートマシンのコード例 (標準ワークフロー)このサンプルプロジェクトのステートマシンは Amazon SQS、Amazon SNS、および Step FunctionsExpress ワークフローと統合されています。

このサンプルステートマシンを参照して、Step Functions が Amazon SQS および Amazon SNS からの入力を処理する方法 を確認し、ネストされた Express ワークフローステートマシンを使用してバックエンドシステムを更新します。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

{ "Comment": "An example of combining standard and express workflows to run a mock e-commerce workflow that does selective checkpointing.", "StartAt": "Approve Order Request", "States": { "Approve Order Request": { "Type": "Task",

231

Page 239: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド親のステートマシンのコード例 (標準ワークフロー)

"Resource": "arn:<PARTITION>:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "<SQS_QUEUE_URL>", "MessageBody": { "MessageTitle": "Order Request received. Pausing workflow to wait for manual approval. ", "TaskToken.$": "$$.Task.Token" } }, "Next": "Notify Order Success", "Catch": [ { "ErrorEquals": [ "States.ALL" ], "Next": "Notify Order Failure" } ] }, "Notify Order Success": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::sns:publish", "Parameters": { "Message": "Order has been approved. Resuming workflow.", "TopicArn": "<SNS_ARN>" }, "Next": "Process Payment" }, "Notify Order Failure": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::sns:publish", "Parameters": { "Message": "Order not approved. Order failed.", "TopicArn": "<SNS_ARN>" }, "End": true }, "Process Payment": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "<SQS_QUEUE_URL>", "MessageBody": { "MessageTitle": "Payment sent to third-party for processing. Pausing workflow to wait for response.", "TaskToken.$": "$$.Task.Token" } }, "Next": "Notify Payment Success", "Catch": [ { "ErrorEquals": [ "States.ALL" ], "Next": "Notify Payment Failure" } ] }, "Notify Payment Success": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::sns:publish", "Parameters": { "Message": "Payment processing succeeded. Resuming workflow.", "TopicArn": "<SNS_ARN>" }, "Next": "Workflow to Update Backend Systems"

232

Page 240: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド親ステートマシンの IAM ロールの例

}, "Notify Payment Failure": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::sns:publish", "Parameters": { "Message": "Payment processing failed.", "TopicArn": "<SNS_ARN>" }, "End": true }, "Workflow to Update Backend Systems": { "Comment": "Starting an execution of an Express workflow to handle backend updates. Express workflows are fast and cost-effective for steps where checkpointing isn't required.", "Type": "Task", "Resource": "arn:<PARTITION>:states:::states:startExecution.sync", "Parameters": { "StateMachineArn": "<UPDATE_DATABASE_EXPRESS_STATE_MACHINE_ARN>", "Input": { "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id" } }, "Next": "Ship the Package" }, "Ship the Package": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::sns:publish", "Parameters": { "Message": "Order and payment received, database is updated and the package is ready to ship.", "TopicArn": "<SNS_ARN>" }, "End": true } }}

親ステートマシンの IAM ロールの例サンプルプロジェクトで生成されたこれらの AWS Identity and Access Management (IAM) ポリシーの例には、ステートマシンおよび関連リソースを実行するために必要な最小限の権限が含まれています。IAM ポリシーに必要なアクセス許可のみを含めることをお勧めします。

Amazon SNS ポリシー:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:us-east-1:123456789012:Checkpoint-SNSTopic-wJalrXUtnFEMI", "Effect": "Allow" } ]}

Amazon SQS ポリシー:

{

233

Page 241: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドネストされたステートマシン (Express ワー

クフロー) のステートマシンコードの例

"Version": "2012-10-17", "Statement": [ { "Action": [ "sqs:SendMessage" ], "Resource": "arn:aws:sqs:us-east-1:123456789012:Checkpoint-SQSQueue-je7MtGbClwBF", "Effect": "Allow" } ]}

状態実行ポリシー:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "states:StartExecution", "states:DescribeExecution", "states:StopExecution" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForStepFunctionsExecutionRule", "Effect": "Allow" } ]}

ネストされたステートマシン (Express ワークフロー)のステートマシンコードの例このサンプルプロジェクトのステートマシンは、親ステートマシンから呼び出されたときにバックエンド情報を更新します。

このサンプルステートマシンを参照して、Step Functions が模擬 e コマースバックエンドシステムのさまざまなコンポーネントを更新する方法を確認します。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

234

Page 242: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドネストされたステートマシン (Express ワー

クフロー) のステートマシンコードの例

{ "StartAt": "Update Order History", "States": { "Update Order History": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "Checkpoint-UpdateDatabaseLambdaFunction-wJalrXUtnFEMI", "Payload": { "Message": "Update order history." } }, "Next": "Update Data Warehouse" }, "Update Data Warehouse": { "Type" : "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "Checkpoint-UpdateDatabaseLambdaFunction-wJalrXUtnFEMI", "Payload": { "Message": "Update data warehouse." } }, "Next": "Update Customer Profile" }, "Update Customer Profile": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "Checkpoint-UpdateDatabaseLambdaFunction-wJalrXUtnFEMI", "Payload": { "Message": "Update customer profile." } }, "Next": "Update Inventory" }, "Update Inventory": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke",

235

Page 243: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド子ステートマシンの IAM ロールの例

"Parameters": { "FunctionName": "Checkpoint-UpdateDatabaseLambdaFunction-wJalrXUtnFEMI", "Payload": { "Message": "Update inventory." } }, "End": true } }}

子ステートマシンの IAM ロールの例サンプルプロジェクトによって生成されたこのサンプルの AWS Identity and Access Management (IAM) ポリシーには、ステートマシンおよび関連リソースを実行するために必要な最小限の権限が付与されています。IAM ポリシーに必要なアクセス許可のみを含めることをお勧めします。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-1:123456789012:function:Example-UpdateDatabaseLambdaFunction-wJalrXUtnFEMI" ], "Effect": "Allow" } ]}

次のポリシーでは、CloudWatch Logs に十分なアクセス許可があることを確認します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogDelivery", "logs:GetLogDelivery", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:ListLogDeliveries", "logs:PutResourcePolicy", "logs:DescribeResourcePolicies", "logs:DescribeLogGroups" ], "Resource": [ "*" ], "Effect": "Allow" } ]}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

236

Page 244: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAWS CodeBuild プロジェクトの

ビルド (CodeBuild、Amazon SNS)

AWS CodeBuild プロジェクトのビルド(CodeBuild、Amazon SNS)

このサンプルプロジェクトは、AWS Step Functions を使用して AWS CodeBuild プロジェクトを構築し、テストを実行して、Amazon SNS 通知を送信する方法を示しています。

ステートマシンを作成してリソースをプロビジョニングする1. Step Functions コンソールを開き、[ステートマシンの作成] を選択します。2. [サンプルプロジェクト] を選択し、[Start a CodeBuild build (CodeBuild ビルドの開始)] を選択しま

す。

ステートマシン [コード] と [ビジュアルワークフロー] が表示されます。

3. [Next] を選択します。

作成されるリソースを示す [Deploy resources (リソースのデプロイ)] ページが表示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

• CodeBuild プロジェクト• Amazon SNS トピック

4. [リソースのデプロイ] を選択します。

237

Page 245: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド新しい実行の開始

Note

これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources (リソースのデプロイ)] ページが表示されている場合は、[スタック ID] リンクを開いて、プロビジョンされているリソースを表示することができます。

新しい実行の開始1. [New execution (新しい実行)] ページで、実行名を入力し (オプション)、[Start Execution (実行の開始)]

を選択します。2. (オプション)実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその

ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatchでは使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

3. (省略可能) Step Functions の [ダッシュボード] 上にある新しく作成されたステートマシンに移動し、[実行の開始] を選択します。

4. 実行が完了したら、[ビジュアルワークフロー] の状態を選択して、[ステップの詳細] の [入力] および[出力] を参照します。

ステートマシンのコード例このサンプルプロジェクトのステートマシンは CodeBuild および Amazon SNS と統合されています。

この例のステートマシンを参照して、Step Functions がステートマシンを使用して CodeBuild プロジェクトを構築し、ジョブが成功したか失敗したかについてのメッセージを含む Amazon SNS トピックを送信する方法を確認してください。

Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

{ "Comment": "An example of using CodeBuild to run tests, get test results and send a notification.", "StartAt": "Trigger CodeBuild Build", "States": { "Trigger CodeBuild Build": { "Type": "Task", "Resource": "arn:aws:states:::codebuild:startBuild.sync", "Parameters": { "ProjectName": "CodeBuildProject-Dtw1jBhEYGDf" }, "Next": "Get Test Results" }, "Get Test Results": { "Type": "Task", "Resource": "arn:aws:states:::codebuild:batchGetReports", "Parameters": { "ReportArns.$": "$.Build.ReportArns" }, "Next": "All Tests Passed?"

238

Page 246: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンのコード例

}, "All Tests Passed?": { "Type": "Choice", "Choices": [ { "Variable": "$.Reports[0].Status", "StringEquals": "SUCCEEDED", "Next": "Notify Success" } ], "Default": "Notify Failure" }, "Notify Success": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "Message": "CodeBuild build tests succeeded", "TopicArn": "arn:aws:sns:sa-east-1:123456789012:StepFunctionsSample-CodeBuildExecution3da9ead6-bc1f-4441-99ac-591c140019c4-SNSTopic-EVYLVNGW85JP" }, "End": true }, "Notify Failure": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "Message": "CodeBuild build tests failed", "TopicArn": "arn:aws:sns:sa-east-1:123456789012:StepFunctionsSample-CodeBuildExecution3da9ead6-bc1f-4441-99ac-591c140019c4-SNSTopic-EVYLVNGW85JP" }, "End": true } }}

他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAMポリシー (p. 264)」を参照してください。

239

Page 247: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタイムアウトを使用して実行のスタックを回避する

Step Functions のベストプラクティス

AWS Step Functions ワークフローを実装するための以下のベストプラクティスを使用すると、実装のパフォーマンスを最適化できます。

トピック• タイムアウトを使用して実行のスタックを回避する (p. 240)• 大きいペイロードを渡す代わりに ARN を使用する (p. 240)• 履歴のクォータに到達しないようにする (p. 241)• Lambda サービス例外の処理 (p. 241)• アクティビティタスクポーリング時のレイテンシーを回避する (p. 242)• 標準ワークフローまたは Express ワークフローの選択 (p. 243)

タイムアウトを使用して実行のスタックを回避するデフォルトでは、Amazon ステートメント言語 はステートマシンの定義にタイムアウトを設定しません。明示的なタイムアウトが設定されていないと、Step Functions は多くの場合、アクティビティワーカーからのレスポンスでしか、タスクが完了したことを知ることができません。エラーが発生した場合、TimeoutSeconds が指定されていないと、実行は、返されることのないレスポンスを待ち続けるため、スタックします。

実行のスタックを回避するには、ステートマシンでタスクを作成するときに、適切なタイムアウトを指定します。次に例を示します。

"ActivityState": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:HelloWorld", "TimeoutSeconds": 300, "HeartbeatSeconds": 60, "Next": "NextState"}

詳細については、Amazon ステートメント言語 ドキュメントの「タスク (p. 94)」を参照してください。

大きいペイロードを渡す代わりに ARN を使用する状態間でデータの大きいペイロードを渡す実行を終了できます。状態間で渡すデータが 32 KB を超える場合、Amazon Simple Storage Service (Amazon S3) を使用してデータを保存し、raw データの代わりにAmazon リソースネーム (ARN) を渡します。または、実行時に小さいペイロードを渡すように実装を調整します。

たとえば、ステートマシンは以下の例のように入力を AWS Lambda 関数に渡すことができます。

240

Page 248: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド履歴のクォータに到達しないようにする

{ "StartAt":"Invoke Lambda function", "States":{ "Invoke Lambda function":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke", "Parameters":{ "FunctionName":"arn:aws:lambda:us-east-2:123456789012:function:MyFunctionName", "Payload":{ "Input.$":"$" } }, "End":true } }}

大量のデータを入力で渡すのではなく、そのデータを Amazon S3 バケットに保存し、そのバケットの ARN を Payload パラメータで渡します。Lambda 関数はその ARN を使用してデータに直接アクセスできます。以下に示しているステートマシン実行の入力例では、データが Amazon S3 バケット内のdata.json に保存されています。

{ "Data": "arn:aws:s3:::MyBucket/data.json"}

詳細については、以下を参照してください。

• 標準ワークフローのクォータ (p. 244)• Amazon Simple Storage Service 開発者ガイド• Amazon リソースネーム (ARN)

履歴のクォータに到達しないようにするAWS Step Functions の実行履歴には、25,000 エントリのハードクォータがあります。長時間の実行で、このクォータに達するのを避けるには、AWS Lambda 関数を使用するパターンを実装します。この関数は、ステートマシンの新しい実行を開始して、複数のワークフロー実行で進行中の作業を分割できます。

詳細については、「新しい実行としての続行 (p. 60)」のチュートリアルを参照してください。

Lambda サービス例外の処理AWS Lambda では、サービスエラーが発生することがあります。この場合、Lambda を呼び出すと、ServiceException、AWSLambdaException、または SdkClientException などの 500 エラーが生じます。ベストプラクティスとしては、Lambda 関数を呼び出す Retry、あるいはエラーを Catchするために、ステートマシンでのこのような例外を事前に処理します。

Lambda エラーは、Lambda.ErrorName として報告されます。Lambda サービス例外エラーを再試行するには、次の Retry コードを使用します。

"Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException"],

241

Page 249: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドアクティビティタスクポーリング時のレイテンシーを回避する

"IntervalSeconds": 2, "MaxAttempts": 6, "BackoffRate": 2} ]

Note

Lambda で処理されないエラーは、エラー出力で Lambda.Unknown と表示されます。このようなエラーには、メモリ不足や関数タイムアウトが含まれます。これらのエラーを処理するには、Lambda.Unknown、States.ALL、または States.TaskFailed で一致できます。Lambda での呼び出しが最大数に達すると、Lambda.TooManyRequestsException というエラーになります。Lambda の Handled および Unhandled エラーの詳細については、AWSLambda Developer Guideの「FunctionError」を参照してください。

詳細については、以下を参照してください。

• エラー後の再試行 (p. 137)• Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)• Lambda 呼び出しエラー

アクティビティタスクポーリング時のレイテンシーを回避する

GetActivityTask API は、taskToken を 1 回のみ提供するように設計されています。アクティビティワーカーと通信している間に taskToken がドロップされた場合、GetActivityTask がタイムアウトするまで、レスポンスの待機のため複数の GetActivityTask リクエストが 60 秒ブロックされます。

レスポンス待ちのポーリングが少数しかない場合、ブロックされたリクエストの後ろにすべてのリクエストが追加され、停止する可能性があります。ただし、各アクティビティ Amazon リソースネーム (ARN) に多数の未処理のポーリングがあり、リクエストの一部が待機中のままになる場合、taskToken を取得して処理を実行するリクエストがさらにたくさんあります。

本番稼働用システムでは、それぞれのアクティビティ ARN の各時点で少なくとも 100 のオープンポーリングを推奨します。1 つのポーリングがブロックされ、それらのポーリングの一部がその後ろに並んでいる場合、GetActivityTask のリクエストがブロックされている間に処理を実行するための taskTokenを受け取るさらに多くのリクエストがあります。

タスクのポーリング時に、これらのレイテンシーの問題を回避する方法。

• アクティビティワーカーの実装の作業とは別のスレッドとしてポーラーを実装します。• 各時点でのアクティビティ ARN あたり、少なくとも 100 のオープンポーリングが必要です。

Note

ARN あたり 100 のオープンポーリングにスケーリングすると、コストが高くなる可能性があります。たとえば、ARN あたり 100 の Lambda 関数でポーリングする場合、1 つの Lambda 関数で 100 のポーリングスレッドを実行するよりも 100 倍コストが高くなります。レイテンシーを短縮しながらコストを最小限に抑えるには、非同期 I/O を使用する言語により、ワーカーごとに複数のポーリングスレッドを実装します。ポーラースレッドとワークスレッドが異なるアクティビティワーカーの例については、「Ruby のサンプルアクティビティワーカー (p. 100)」を参照してください。

アクティビティおよびアクティビティワーカーの詳細については、「アクティビティ (p. 98)」を参照してください。

242

Page 250: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド標準ワークフローまたは Express ワークフローの選択

標準ワークフローまたは Express ワークフローの選択

AWS Step Functions では、デフォルトのワークフロータイプとして標準ワークフローが提供されるとともに、Express ワークフローを選択するオプションがあります。

長時間実行され、耐久性が高く、監査可能なワークフローが必要な場合は、標準ワークフローを選択できます。または、大量のイベント処理ワークロードの場合に Express Workflow を選択できます。ステートマシンの実行の動作は、選択した Type によって異なります。ステートマシンが作成された後は、選択したType を変更することはできません。

標準ワークフローと Express ワークフローの違いの詳細については、「標準ワークフローとExpress ワークフロー (p. 88)」を参照してください。

243

Page 251: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド標準ワークフローのクォータ

クォータAWS Step Functions では特定のステートマシンのパラメータサイズにクォータが設定されます。たとえば、特定の期間中に実行する API アクションの数や、定義できるステートマシンの数などです。これらのクォータは、正しく設定されていないステートマシンによりシステムのすべてのリソースが消費されないようにするために設計されていますが、その多くはハードクォータではありません。

Note

ステートマシン実行の特定のステージまたはアクティビティの実行に長い時間がかかる場合は、タイムアウトイベントを発生させるようにステートマシンのタイムアウトを設定できます。

一部のクォータは標準ワークフローと Express ワークフローで同一です。以下に示します。異なるクォータは「標準ワークフローのクォータ (p. 244)」および「Express ワークフローのクォータ (p. 246)」に記載されています。

トピック• 標準ワークフローのクォータ (p. 244)• Express ワークフローのクォータ (p. 246)• 一般的なクォータ (p. 248)• アカウントに関連するクォータ (p. 249)• API アクションのスロットリングに関連するクォータ (p. 249)• タグ付けに関連する制限 (p. 251)• クォータ引き上げのリクエスト (p. 252)

標準ワークフローのクォータAWS Step Functions では特定のステートマシンのパラメータサイズにクォータが設定されます。たとえば、特定の期間中に実行する API アクションの数や、定義できるステートマシンの数などです。これらのクォータは、正しく設定されていないステートマシンによりシステムのすべてのリソースが消費されないようにするために設計されていますが、その多くはハードクォータではありません。

Note

ステートマシン実行の特定のステージまたはアクティビティの実行に長い時間がかかる場合は、タイムアウトイベントを発生させるようにステートマシンのタイムアウトを設定できます。

トピック• ステートマシンの実行に関連するクォータ (p. 244)• タスクの実行に関連するクォータ (p. 245)• API アクションのスロットリングに関連するクォータ (p. 245)• 状態のスロットリングに関連するクォータ (p. 246)• クォータ引き上げのリクエスト (p. 246)

ステートマシンの実行に関連するクォータ

Quota 説明

最大実行時間 1 年.実行が 1 年の最大時間を超える場合、States.Timeout エラーで失敗し、ExecutionsTimedOut CloudWatch メトリクスを出力します。

244

Page 252: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタスクの実行に関連するクォータ

Quota 説明

実行履歴の最大サイズ 25,000 イベント。実行履歴がこのクォータに達すると実行は失敗します。これを回避するには、「履歴のクォータに到達しないようにする (p. 241)」を参照してください。

最大実行アイドル時間 1 年 (最大実行時間によって制限されます)

実行履歴の最大保持期間

90 日間.この期間後は、実行履歴の取得や表示はできません。Step Functionsが保持するクローズした実行の数にはこれ以上のクォータはありません。

タスクの実行に関連するクォータ

Quota 説明

最大タスク実行時間 1 年 (最大実行時間によって制限されます)

Step Functions がキューにタスクを保持する最大時間

1 年 (最大実行時間によって制限されます)

Amazon リソースネーム (ARN) あたりの最大アクティビティポーラー

ARN あたりに GetActivityTask を呼び出すポーラー数: 1,000このクォータを超えるとこのエラーが表示されます。「アクティビティタスクで同時にポーリングするワーカーの最大数に達しました」

タスク、状態、実行の最大の入力または結果データサイズ

32,768 文字.このクォータにより、タスクのスケジュール、状態の入力、または実行の開始時に、タスク (アクティビティまたは Lambda 関数)、状態、または実行結果データに影響があります。

API アクションのスロットリングに関連するクォータ一部の Step Functions API アクションは、サービスの帯域幅を維持するため、トークンのバケットスキームを使用してスロットリングされます。

Note

スロットリングクォータは 1 アカウント、AWS リージョンあたりです。AWS Step Functions によって、任意の時点でバケットサイズと補充レートの両方が上昇する可能性があります。コストを抑制するために、これらのスロットリングレートに依存しないでください。

米国東部(バージニア北部)、米国西部 (オレゴン)、および 欧州 (アイルランド)のクォータ

API 名 バケットサイズ 補充レート/秒

StartExecution 1,300 300

245

Page 253: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド状態のスロットリングに関連するクォータ

他のすべてのリージョンのクォータ

API 名 バケットサイズ 補充レート/秒

StartExecution 800 150

状態のスロットリングに関連するクォータStep Functions 状態の移行は、サービスの帯域幅を維持するため、トークンのバケットスキームを使用してスロットリングされます。

Note

StateTransition サービスメトリクスのスロットリングは、Amazon CloudWatch でExecutionThrottled として報告されます。詳細については、「ExecutionThrottledCloudWatch メトリクス (p. 291)」を参照してください。

サービスメトリクス バケットサイズ 補充レート/秒

StateTransition — 米国東部(バージニア北部) では、米国西部 (オレゴン) および 欧州 (アイルランド)

5,000 1,500

StateTransition — その他のすべてのリージョン

800 500

クォータ引き上げのリクエストAWS マネジメントコンソール の [サポートセンター] ページを使用して、リージョンごとに AWS StepFunctions から提供されるリソースのクォータの引き上げをリクエストします。詳細については、AWSGeneral Referenceの「クォータの引き上げをリクエストするには」を参照してください。

Express ワークフローのクォータAWS Step Functions では特定のステートマシンのパラメータサイズにクォータが設定されます。たとえば、特定の期間中に実行する API アクションの数や、定義できるステートマシンの数などです。これらのクォータは、正しく設定されていないステートマシンによりシステムのすべてのリソースが消費されないようにするために設計されていますが、その多くはハードクォータではありません。

Note

ステートマシン実行の特定のステージに長い時間がかかる場合は、タイムアウトイベントを発生させるようにステートマシンのタイムアウトを設定できます。

トピック• ステートマシンの実行に関連するクォータ (p. 247)• タスクの実行に関連するクォータ (p. 247)• API アクションのスロットリングに関連するクォータ (p. 247)• 状態のスロットリングに関連するクォータ (p. 248)• クォータ引き上げのリクエスト (p. 246)

246

Page 254: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドステートマシンの実行に関連するクォータ

ステートマシンの実行に関連するクォータ

Quota 説明

最大実行時間 5 分。実行が 5 分の最大時間を超える場合、States.Timeout エラーで失敗し、ExecutionsTimedOut CloudWatch メトリクスを出力します。

実行履歴の最大サイズ 無制限。

最大実行アイドル時間 5 分 (最大実行時間によって制約される)

実行履歴の最大保持期間

実行履歴を表示するには、Amazon CloudWatch Logs ロギングを設定する必要があります。詳細については, CloudWatch Logs を使用したロギング (p. 305).

タスクの実行に関連するクォータ

Quota 説明

最大タスク実行時間 5 分 (最大実行時間によって制約される)

Step Functions がキューにタスクを保持する最大時間

5 分 (最大実行時間によって制約される)

Amazon リソースネーム (ARN) あたりの最大アクティビティポーラー

Express ワークフローには適用されません。

タスク、状態、実行の最大の入力または結果データサイズ

32,768 文字.このクォータにより、タスク、状態または実行結果データ、およびタスクのスケジュール、状態の入力、実行の開始時の入力データに影響があります。

API アクションのスロットリングに関連するクォータ一部の Step Functions API アクションは、サービスの帯域幅を維持するため、トークンのバケットスキームを使用してスロットリングされます。

Note

スロットリングクォータは 1 アカウント、AWS リージョンあたりです。AWS Step Functions によって、任意の時点でバケットサイズと補充レートの両方が上昇する可能性があります。コストを抑制するために、これらのスロットリングレートに依存しないでください。

StartExecution のクォータ - すべてのリージョン

API 名 バケットサイズ 補充レート/秒

StartExecution 6,000 6,000

247

Page 255: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド状態のスロットリングに関連するクォータ

状態のスロットリングに関連するクォータStep Functions 状態の移行は、サービスの帯域幅を維持するため、トークンのバケットスキームを使用してスロットリングされます。

Note

StateTransition サービスメトリクスのスロットリングは、Amazon CloudWatch でExecutionThrottled として報告されます。詳細については、「ExecutionThrottledCloudWatch メトリクス (p. 291)」を参照してください。

サービスメトリクス バケットサイズ 補充レート/秒

StateTransition — すべてのリージョン

無制限 無制限

クォータ引き上げのリクエストAWS マネジメントコンソール の [サポートセンター] ページを使用して、リージョンごとに AWS StepFunctions から提供されるリソースのクォータの引き上げをリクエストします。詳細については、AWSGeneral Referenceの「クォータの引き上げをリクエストするには」を参照してください。

一般的なクォータ

Quota 説明

Step Functions での名前 ステートマシン、実行、およびアクティビティ名の長さは 1~80 文字で、アカウントと AWS リージョンに対して一意である必要があります。また、次の文字を含めることはできません。

• 空白• ワイルドカード文字 (? *)• 括弧 (< > { } [ ])• 特殊文字 (: ; , \ | ^ ~ $ # % & ` ")• 制御文字 (\\u0000 - \\u001f or \\u007f - \\u009f)

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatch では使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

248

Page 256: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドアカウントに関連するクォータ

アカウントに関連するクォータQuota 説明

登録済みアクティビティの最大数 10,000

登録済みステートマシンの最大数 10,000

API アクションの最大数 頻繁でないスパイクを超えてアプリケーションが非常に短期間に大量の API アクションを実行した場合、アプリケーションはスロットリングされることがあります。

最大リクエストサイズ リクエストあたり 1 MB。これは Step FunctionsAPI リクエストあたりの合計データサイズで、リクエストヘッダーおよびその他すべての関連するリクエストデータを含みます。

アカウントあたりの最大オープン実行数 AWS アカウントあたり 1,000,000 回の実行。これを超えると、ExecutionLimitExceeded エラーが発生します。Express ワークフローには適用されません。

API アクションのスロットリングに関連するクォータ

一部の Step Functions API アクションは、サービスの帯域幅を維持するため、トークンのバケットスキームを使用してスロットリングされます。

Note

スロットリングクォータは 1 アカウント、AWS リージョンあたりです。AWS Step Functions によって、任意の時点でバケットサイズと補充レートの両方が上昇する可能性があります。コストを抑制するために、これらのスロットリングレートに依存しないでください。

米国東部(バージニア北部)、米国西部 (オレゴン)、および 欧州 (アイルランド)のクォータ

API 名 バケットサイズ 補充レート/秒

CreateActivity 100 1

CreateStateMachine 100 1

DeleteActivity 100 1

DeleteStateMachine 100 1

DescribeActivity 200 1

DescribeExecution 300 15

249

Page 257: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド他のすべてのリージョンのクォータ

API 名 バケットサイズ 補充レート/秒

DescribeStateMachine 200 20

DescribeStateMachineForExecution200 1

GetActivityTask 3,000 500

GetExecutionHistory 400 20

ListActivities 100 10

ListExecutions 200 5

ListStateMachines 100 5

ListTagsForResource 100 1

SendTaskFailure 3,000 500

SendTaskHeartbeat 3,000 500

SendTaskSuccess 3,000 500

標準ワークフロー固有のクォータについては、「標準ワークフローのクォータ (p. 244)」を参照してください

StartExecution

Express ワークフロー固有のクォータについては、「Express ワークフローのクォータ (p. 246)」を参照してください

StopExecution 1,000 200

TagResource 200 1

UntagResource 200 1

UpdateStateMachine 100 1

他のすべてのリージョンのクォータ

API 名 バケットサイズ 補充レート/秒

CreateActivity 100 1

CreateStateMachine 100 1

DeleteActivity 100 1

DeleteStateMachine 100 1

DescribeActivity 200 1

DescribeExecution 250 10

DescribeStateMachine 200 20

DescribeStateMachineForExecution200 1

GetActivityTask 1,500 300

250

Page 258: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタグ付けに関連する制限

API 名 バケットサイズ 補充レート/秒

GetExecutionHistory 400 20

ListActivities 100 5

ListExecutions 100 2

ListStateMachines 100 5

ListTagsForResource 100 1

SendTaskFailure 1,500 300

SendTaskHeartbeat 1,500 300

SendTaskSuccess 1,500 300

標準ワークフロー固有のクォータについては、「標準ワークフローのクォータ (p. 244)」を参照してください

StartExecution

Express ワークフロー固有のクォータについては、「Express ワークフローのクォータ (p. 246)」を参照してください

StopExecution 500 25

TagResource 200 1

UntagResource 200 1

UpdateStateMachine 200 1

タグ付けに関連する制限Step Functions リソースにタグを付ける場合は、次の制限に注意してください。

Note

タグ付けの制限は、他のクォータと違って増やすことはできません。

制限 説明

リソースあたりのタグの最大数 50

キーの最大長 UTF-8 で 128 文字の Unicode 文字

値の最大長 UTF-8 で 256 文字の Unicode 文字

プレフィックスの制限 タグの名前または値に aws: プレフィックスは使用しないでください。このプレフィックスは AWS用に予約されています。このプレフィックスが含まれるタグの名前または値は編集または削除できません。このプレフィックスの付いたタグは、リソースあたりのタグ数のクォータにカウントされません。

文字の制限 タグに使用できるのは、Unicode 文字、数字、空白、または _ . : / = + - @ のみです。

251

Page 259: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドクォータ引き上げのリクエスト

クォータ引き上げのリクエストAWS マネジメントコンソール の [サポートセンター] ページを使用して、リージョンごとに AWS StepFunctions から提供されるリソースのクォータの引き上げをリクエストします。詳細については、AWSGeneral Referenceの「クォータの引き上げをリクエストするには」を参照してください。

252

Page 260: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドデータ保護

AWS Step Functions でのセキュリティ

このセクションでは、AWS Step Functions のセキュリティと認証について説明します。

トピック• AWS Step Functions でのデータ保護 (p. 253)• AWS Step Functions での Identity and Access Management (p. 254)• AWS Step Functions でのログ記録とモニタリング (p. 289)• AWS Step Functions のコンプライアンス検証 (p. 308)• AWS Step Functions での耐障害性 (p. 308)• AWS Step Functions でのインフラストラクチャセキュリティ (p. 309)• AWS Step Functions での設定と脆弱性の分析 (p. 309)

Step Functions は IAM を使用して、AWS の他の サービスとリソースへのアクセスを制御します。IAM の仕組みの概要については、IAM ユーザーガイドの「アクセス管理の概要」を参照してください。セキュリティ認証情報の概要については、アマゾン ウェブ サービス全般のリファレンスの「AWS セキュリティ認証情報」を参照してください。

AWS Step Functions でのデータ保護AWS Step Functions は、データ保護の規制やガイドラインを含む AWS 責任共有モデルに準拠しています。AWS は、AWS のすべてのサービスを実行するグローバルなインフラストラクチャを保護する責任を担います。また、AWS は、カスタマーコンテンツおよび個人データを取り扱うためのセキュリティ構成の統制など、このインフラストラクチャ上でホストされるデータ管理を維持します。データコントローラーまたはデータプロセッサとして機能する、AWS のお客様および APN パートナーは、AWS クラウドに保存された個人データに対する責任を担います。

データ保護目的の場合、AWS アカウント認証情報を保護して IAM (AWS Identity and AccessManagement) で個々のユーザーアカウントをセットアップし、そのユーザーに各自の職務を果たすために必要なアクセス許可のみが付与されるようにすることをお勧めします。また、以下の方法でデータを保護することをお勧めします。

• 各アカウントで多要素認証 (MFA) を使用します。• SSL/TLS を使用して AWS リソースと通信します。

• AWS CloudTrail で API とユーザーアクティビティログをセットアップします。• AWS 暗号化ソリューションを、AWS サービス内のすべてのデフォルトのセキュリティ管理と一緒に使

用します。• Amazon Macie などの高度なマネージドセキュリティサービスを使用します。これにより、Amazon S3

に保存される個人データの検出と保護が支援されます。

顧客のアカウント番号などの機密の識別情報は、[名前] フィールドなどの自由形式のフィールドに配置しないことを強くお勧めします。これは、コンソール、API、AWS CLI、または AWS SDK で StepFunctions または他の AWS サービスを使用する場合も同様です。Step Functions または他のサービスに入力したデータはすべて、診断ログの内容として取得される可能性があります。外部サーバーへの URL を指定するときは、そのサーバーへのリクエストを検証するための認証情報を URL に含めないでください。

253

Page 261: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド暗号化

データ保護の詳細については、AWS セキュリティブログのブログ投稿「AWS の責任共有モデルとGDPR」を参照してください。AWS Step Functions は AWS 管理の CMK を作成して、お客様に代わって使用します。CMK の詳細については、AWS Key Management Service Developer Guide の「カスタマーマスターキー (CMK)」を参照してください。

AWS Step Functions での暗号化保管時の暗号化Step Functions は、保管中のデータを常に暗号化します。AWS Step Functions のデータは、透過的なサーバー側の暗号化を使用して保存時に暗号化されます。これは、機密データの保護における負担と複雑な作業を減らすのに役立ちます。保管時に暗号化することで、セキュリティを重視したアプリケーションを構築して、暗号化のコンプライアンスと規制の要件を満たすことができます。

転送時の暗号化Step Functions は、サービスと他の統合された AWS のサービス間で転送中のデータを暗号化します(「サービスの AWS Step Functions との統合 (p. 143)」を参照)。Step Functions と統合サービス間を通過するすべてのデータは、Transport layer Security (TLS) を使用して暗号化されています。

AWS Step Functions での Identity and AccessManagement

AWS Step Functions へのアクセスには、AWS がリクエストの認証に使用できる認証情報が必要です。これらの認証情報には、他の AWS リソースからのイベントデータの取得などの AWS リソースへのアクセス権限が必要です。以下のセクションでは、AWS Identity and Access Management (IAM) と StepFunctions を使用して、リソースにアクセスできるユーザーを制御することで、リソースをセキュリティで保護する方法について詳しく説明します。

• 認証 (p. 254)• アクセスコントロール (p. 255)

認証AWS には、次のタイプのアイデンティティでアクセスできます。

• AWS アカウントのルートユーザー – AWSにサインアップするときは、アカウントに関連付けられた Eメールアドレスとパスワードを指定します。これらは ルート認証情報であり、これらの情報を使用すると、すべての AWS リソースへの完全なアクセスが可能になります。

Important

セキュリティ上の理由から、アカウントへの完全なアクセス権限を持つ管理者 (IAM ユーザー)を作成するためにのみ、ルート認証情報を使用することをお勧めします。その後、この管理者を使用して、制限されたアクセス権限を持つ他の IAM ユーザーとロールを作成できます。詳細については、「IAM のベストプラクティス」および 「IAM ユーザーガイド」の「管理者のユーザーおよびグループの作成」を参照してください。

• IAM ユーザー – IAM ユーザーは、特定のカスタム権限 (たとえば、Step Functions でターゲットにイベントデータを送信するアクセス権限) を持つアカウント内の ID です。IAM のユーザー名とパスワードを使用して、AWS マネジメントコンソール、AWS ディスカッションフォーラム、AWS Support Centerなどのセキュリティ保護された AWS ウェブページにサインインできます。

 

254

Page 262: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドアクセスコントロール

ユーザー名とパスワードに加えて、各ユーザーのアクセスキーを生成することもできます。いくつかのSDK の 1 つまたは AWS Command Line Interface (AWS CLI) を使ってプログラムで AWS サービスにアクセスするときに、これらのキーを使用できます。SDK と AWS CLI ツールでは、アクセスキーを使用してリクエストが暗号で署名されます。AWS ツールを使用しない場合は、リクエストに自分で署名する必要があります。Step Functions supports では、署名バージョン 4 がサポートされています。これは、インバウンド API リクエストを認証するためのプロトコルです。リクエストの認証の詳細については、「アマゾン ウェブ サービス全般のリファレンス」の「署名バージョン 4 署名プロセス」を参照してください。

 • IAM ロール – IAM ロールは、特定のアクセス許可を持ち、アカウントで作成できる、もう 1 つの IAM ア

イデンティティです。これは IAM ユーザーに似ていますが、特定のユーザーに関連付けられていません。IAM ロールでは、AWS のサービスおよびリソースにアクセスできる一時的なアクセスキーを取得することができます。IAM ロールと一時的な認証情報は、次の状況で役立ちます。

 • フェデレーティッドユーザーアクセス – IAM ユーザーを作成するのではなく、AWS Directory

Service、エンタープライズユーザーディレクトリ、またはウェブアイデンティティプロバイダー(IdP) の既存のアイデンティティを使用することもできます。このようなユーザーはフェデレーティッドユーザーと呼ばれます。AWS では、ID プロバイダーを通じてアクセスがリクエストされたとき、フェデレーティッドユーザーにロールを割り当てます。フェデレーティッドユーザーの詳細については、IAM ユーザーガイドの「フェデレーティッドユーザーとロール」を参照してください。

 • クロスアカウントアクセス – アカウントの IAM ロールを使用して、アカウントのリソースにアクセス

するための権限を別のアカウントに付与することができます。この例については、『IAM ユーザーガイド』の「チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任」を参照してください。

 • AWS のサービスのアクセス – アカウントで IAM ロールを使用して、アカウントのリソースにアクセ

スするために AWS のサービスに必要なアクセス権限を付与できます。たとえば、Amazon Redshiftがお客様に代わって Amazon S3 バケットにアクセスし、バケットに保存されたデータを AmazonRedshift クラスターにロードすることを許可するロールを作成できます。詳細については、『IAMユーザーガイド』の「AWS サービスにアクセス権限を委任するロールの作成」を参照してください。

 • Amazon EC2 で実行されるアプリケーション – インスタンスで実行し、AWS API リクエストを作成

するアプリケーションで使用されるアクセスキーを EC2 インスタンス内に保存する代わりに、IAMロールを使用して、これらのアプリケーション用の一時認証情報を管理できます。AWS ロールをEC2 インスタンスに割り当て、そのすべてのアプリケーションで使用できるようにするには、インスタンスにアタッチされたインスタンスプロファイルを作成します。インスタンスプロファイルにはロールが含まれ、EC2 インスタンスで実行されるプログラムは一時認証情報を取得することができます。詳細については、『IAM ユーザーガイド』の「Amazon EC2 上のアプリケーションに対するロールの使用」を参照してください。

アクセスコントロール有効な認証情報があればリクエストを認証できますが、アクセス許可がなければ Step Functions リソースの作成やアクセスはできません。たとえば、Step Functions ルールに関連付けられた AWSLambda、Amazon Simple Notification Service (Amazon SNS)、および Amazon Simple Queue Service(Amazon SQS) のターゲットを呼び出すにはアクセス許可が必要です。

以下のセクションでは、Step Functions のアクセス許可を管理する方法について説明します。最初に概要のセクションを読むことをお勧めします。

255

Page 263: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドアクセス管理の概要

• Step Functions リソースに対するアクセス許可の管理の概要 (p. 256)• AWS Step Functions と IAM の連携 (p. 259)• 管理者以外のユーザー用の詳細な IAM アクセス許可の作成 (p. 260)• Step Functions の Amazon VPC エンドポイント (p. 262)• 統合サービスの IAM ポリシー (p. 264)

Step Functions リソースに対するアクセス許可の管理の概要すべての AWS リソースは AWS アカウントによって所有され、リソースの作成またはアクセスは、アクセス権限のポリシーによって管理されます。アカウント管理者は、アクセス権限ポリシーを IAM アイデンティティ (ユーザー、グループ、ロール) にアタッチできます。一部のサービス (AWS Lambda など) でもリソースにアクセス権限ポリシーをアタッチできます。

Note

アカウント管理者 (または管理者 IAM ユーザー) は、管理者権限を持つユーザーです。詳細については、『IAM ユーザーガイド』の「IAM のベストプラクティス」を参照してください。

アクセス権限を付与する場合、アクセス権限を取得するユーザー、取得するアクセス権限の対象となるリソース、およびそれらのリソースに対して許可される特定のアクションを決定します。

トピック• Step Functions リソースおよびオペレーション (p. 256)• リソース所有権について (p. 257)• リソースへのアクセスの管理 (p. 257)• ポリシー要素の指定 : アクション、効果、プリンシパル (p. 258)• ポリシーでの条件の指定 (p. 259)

Step Functions リソースおよびオペレーションStep Functions の場合、プライマリリソースはルールです。Step Functions は、プライマリリソースと併用できるその他のリソース (イベントなど) をサポートしています。これらはサブリソースと呼ばれます。これらのリソースとサブリソースには、一意の Amazon リソースネーム (ARN) が関連付けられています。ARN の詳細については、アマゾン ウェブ サービス全般のリファレンスの「Amazon リソースネーム(ARN) と AWSAWS サービスの名前空間」を参照してください。

リソースタイプ ARN 形式

ルール arn:aws:events:region:account:rule/[event-bus-name]/rule-name

イベントバス arn:aws:events:region:account:event-bus/event-bus-name

すべての Step Functionsリソース

arn:aws:events:*

指定されたリージョンの指定されたアカウントが所有するすべての StepFunctions リソース

arn:aws:events:region:account:*

256

Page 264: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドアクセス管理の概要

Note

AWS のほとんどのサービスでは、ARN 内のコロン (:) またはスラッシュ (/) は同じ文字として扱われます。ただし、Step Functions では、イベントパターンおよびルールで完全一致を使用します。イベントパターンの作成時に正しい ARN 文字を使用して、一致させるイベント内の ARN 構文とそれらの文字が一致するようにしてください。

たとえば、以下のように ARN を使用して、ステートメント内で特定のルール (myRule) を指定できます。

"Resource": "arn:aws:events:us-east-1:123456789012:rule/myRule"

また、以下のようにアスタリスク (*) ワイルドカードを使用し、特定のアカウントに属するすべてのルールを指定することもできます。

"Resource": "arn:aws:events:us-east-1:123456789012:rule/*"

すべてのリソースを指定する場合、または特定の API アクションが ARN をサポートしていない場合は、以下のように Resource 要素内でアスタリスク(*) ワイルドカードを使用します。

"Resource": "*"

一部の Step Functions API アクションは複数のリソースを受け入れます (つまり、PutTargets)。1 つのステートメントで複数のリソースを指定するには、次のように ARN をカンマで区切ります。

"Resource": ["arn1", "arn2"]

リソース所有権についてアカウントは、誰がリソースを作成したかにかかわらず、アカウントで作成されたリソースを所有します。具体的には、リソース所有者は、リソースの作成リクエストを認証するプリンシパルエンティティ(アカウントルートユーザー、IAM ユーザー、または IAM ロール) のアカウントです。以下の例では、このしくみを示しています。

• アカウントのルートユーザーの認証情報を使用してルールを作成すると、アカウントは Step Functionsリソースの所有者になります。

• アカウントに IAM ユーザーを作成し、そのユーザーに Step Functions リソースを作成するアクセス許可を付与すると、そのユーザーは Step Functions リソースを作成できます。ただし、ユーザーが属するアカウントが Step Functions リソースの所有者になります。

• Step Functions リソースを作成するアクセス許可を持つアカウントに IAM ロールを作成すると、そのロールを引き受けることができるすべてのユーザーが Step Functions リソースを作成できます。そのロールが属するアカウントが、Step Functions リソースの所有者になります。

リソースへのアクセスの管理アクセスポリシーでは、誰が何にアクセスできるかを記述します。以下のセクションで、アクセス権限のポリシーを作成するために使用可能なオプションについて説明します。

Note

このセクションでは、Step Functions のコンテキストでの IAM の使用について説明します。これは、IAM サービスに関する詳細情報を取得できません。完全な IAM ドキュメントについては、『IAM ユーザーガイド』の「IAM とは」を参照してくださいIAM ポリシー構文の詳細および説明については、『IAM ユーザーガイド』の「IAM ポリシーリファレンス」を参照してください。

IAM アイデンティティにアタッチされたポリシーはアイデンティティベースのポリシー (IAM ポリシー) と呼ばれ、リソースにアタッチされたポリシーはリソースベースのポリシーと呼ばれます。Step Functions

257

Page 265: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドアクセス管理の概要

は、アイデンティティベースのポリシー (IAM ポリシー) とリソースベースのポリシーの両方をサポートしています。

トピック• アイデンティティベースのポリシー (IAM ポリシー) (p. 258)• リソースベースのポリシー (IAM ポリシー) (p. 258)

アイデンティティベースのポリシー (IAM ポリシー)

ポリシーを IAM アイデンティティにアタッチできます。たとえば、次の操作を実行できます。

• アカウントのユーザーまたはグループにアクセス権限ポリシーをアタッチする– Amazon CloudWatchコンソールのルールを表示するアクセス権限を付与するために、ユーザーが所属するユーザーまたはグループにアクセス許可のポリシーをアタッチできます。

• アクセス権限ポリシーをロールにアタッチする (クロスアカウントのアクセス権限を付与する) – アイデンティティベースのアクセス権限ポリシーを IAM ロールにアタッチして、クロスアカウントのアクセス権限を付与することができます。たとえば、アカウント A の管理者は、次のように別のアカウント (アカウント B など) または AWS サービスにクロスアカウントアクセス権限を付与するロールを作成できます。1. アカウント A の管理者は、IAM ロールを作成して、アカウント A のリソースへのアクセスを許可す

るアクセス権限ポリシーをそのロールにアタッチします。2. アカウント A の管理者は、アカウント B をそのロールを引き受けるプリンシパルとして識別する

ロールに、信頼ポリシーをアタッチします。3. アカウント B の管理者は、アカウント B のユーザーにロールを引き受ける権限を委任できるように

なります。これにより、アカウント B のユーザーにアカウント A のリソースの作成とアクセスが許可されます。ロールを引き受けるために必要なアクセス権限を AWS のサービスに付与するには、信頼ポリシー内のプリンシパルも、AWS のサービスのプリンシパルとなることができます。

IAM を使用したアクセス権限の委任の詳細については、IAM ユーザーガイド の「アクセス管理」を参照してください。

お客様のアカウントのユーザーがアクセスを許可される呼び出しとリソースを制限する IAM ポリシーを作成し、IAM ユーザーにそれらのポリシーをアタッチできます。IAM ロールを作成する方法と、StepFunctions の IAM ポリシーステートメントの例を活用する方法の詳細については、「Step Functions リソースに対するアクセス許可の管理の概要 (p. 256)」を参照してください。

リソースベースのポリシー (IAM ポリシー)

ルールが Step Functions でトリガーされると、このルールに関連付けられているすべてのターゲットが呼び出されます。呼び出しとは、AWS Lambda 関数を呼び出し、イベントを Amazon SNS トピックにパブリッシュして、Amazon Kinesis ストリームに中継することです。Step Functions が、ユーザー所有のリソースに対して API コールを行うには、適切なアクセス許可が必要です。Lambda、Amazon SNS、および Amazon SQS のリソースの場合、Step Functions はリソースベースのポリシーに依存します。Kinesisストリームの場合、Step Functions は IAM ロールに依存します。

IAM ロールの作成方法と、Step Functions でリソースベースのポリシーステートメント例の活用方法に関する詳細については、「」を参照してください

ポリシー要素の指定 : アクション、効果、プリンシパル以下は、基本的なポリシーの要素です。

• リソース – Amazon リソースネーム (ARN) を使用して、ポリシーを適用するリソースを識別します。詳細については、「Step Functions リソースおよびオペレーション (p. 256)」を参照してください。

258

Page 266: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAWS Step Functions と IAM の連携

• アクション – アクションのキーワードを使用して、許可または拒否するリソースオペレーションを識別します。たとえば、events:Describe 権限は、Describe オペレーションの実行をユーザーに許可します。

• 効果 – ユーザーが特定のアクションをリクエストする際の効果 (許可または拒否) を指定します。リソースへのアクセスを明示的に許可していない場合、アクセスは暗黙的に拒否されます。また、明示的にリソースへのアクセスを拒否すると、別のポリシーによってアクセスが許可されている場合でも、ユーザーはそのリソースにアクセスできなくなります。

• プリンシパル – アイデンティティベースのポリシー (IAM ポリシー) で、ポリシーがアタッチされているユーザーが黙示的なプリンシパルとなります。リソースベースのポリシーでは、権限 (リソースベースのポリシーにのみ適用) を受け取りたいユーザー、アカウント、サービス、またはその他のエンティティを指定します。

IAM ポリシーの構文と説明についての詳細については、IAM ユーザーガイド の「IAM JSON ポリシーのリファレンス」を参照してください。

ポリシーでの条件の指定アクセス権限を付与するとき、アクセスポリシー言語を使用して、ポリシーが有効になる必要がある条件を指定できます。たとえば、特定の日付の後にのみ適用されるポリシーが必要になる場合があります。ポリシー言語での条件の指定の詳細については、IAM ユーザーガイド の「条件」を参照してください。

条件を表すには、あらかじめ定義された条件キーを使用します。AWS 全体の条件キーと Step Functions固有のキーがあり、必要に応じて使用できます。AWS 全体のキーの詳細なリストについては、IAM ユーザーガイドの「条件に利用可能なキー」を参照してください。

AWS Step Functions と IAM の連携AWS Step Functions はコードの実行と AWS リソースへのアクセス (AWS Lambda 関数の呼び出しなど)が可能です。セキュリティを維持するために、IAM ロールを使用して Step Functions にこれらのリソースへのアクセスを許可する必要があります。

このガイドの「Step Functions のチュートリアル (p. 18)」で、ステートマシンを作成した AWS リージョンで有効な自動生成 IAM ロールを利用できます。ステートマシン独自の IAM ロールを作成するには、このセクションのステップに従います。

この例では、Lambda 関数を呼び出すアクセス許可を持つ IAM ロールを作成します。

Step Functions 向けのロールを作成する1. IAM コンソールにサインインし、[ロール]、[ロールの作成] の順に選択します。2. [信頼されたエンティティの種類を選択] ページの [AWS のサービス] で、リストから [Step Functions]

を選択し、[Next: Permissions (次へ: アクセス許可)] を選択します。3. [Attached permissions policy] ページで、[Next: Review] を選択します。4. [Review (レビュー)] ページで、[ロール名] に StepFunctionsLambdaRole と入力し、[ロールの作

成] を選択します。

ロールのリストで、IAM ロールが表示されます。

IAM アクセス許可とポリシーの詳細については、IAM ユーザーガイドの「アクセス管理」を参照してください。

インラインポリシーをアタッチするStep Functions では、タスク状態の他のサービスを直接管理します。制御する必要があるサービスの APIアクションに Step Functions からアクセスできるように、インラインポリシーをアタッチします。

259

Page 267: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド管理者以外のユーザー用の詳細な IAM アクセス許可の作成

1. [IAM コンソール] を開いて [ロール] を選択し、Step Functions ロールを検索したら、そのロールを選択します。

2. [インラインポリシーの追加] を選択します。3. ロールのポリシーを作成するには、[ビジュアルエディタ] または [JSON] タブを使用します。

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「サービスの AWS StepFunctions との統合 (p. 143)」を参照してください。

Note

Step Functions コンソールで作成された IAM ポリシーの例については、「統合サービスの IAM ポリシー (p. 264)」を参照してください。

管理者以外のユーザー用の詳細な IAM アクセス許可の作成IAM のReadOnly などのデフォルトの管理ポリシーは、すべてのタイプの AWS Step Functions アクセス許可を網羅しているとは限りません。このセクションでは、これらのさまざまなタイプのアクセス許可について説明し、設定例を示します。

Step Functions には、4 つのカテゴリのアクセス許可があります。ユーザーに許可するアクセスに応じて、これらのカテゴリのアクセス許可を使用してアクセスを制御できます。

サービスレベルのアクセス許可 (p. 260)

特定のリソースで動作しない API コンポーネントに適用されます。ステートマシンレベルのアクセス許可 (p. 261)

特定のステートマシンで動作するすべての API コンポーネントに適用されます。実行レベルのアクセス許可 (p. 261)

特定の実行で動作するすべての API コンポーネントに適用されます。アクティビティレベルのアクセス許可 (p. 262)

特定のアクティビティまたはその特定のインスタンスで動作するすべての API コンポーネントに適用されます。

サービスレベルのアクセス許可このアクセス許可レベルは、特定のリソースで動作しないすべての API アクションに適用されます。たとえば、CreateStateMachine、CreateActivity、ListStateMachines、ListActivities に適用されます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:ListStateMachines", "states:ListActivities", "states:CreateStateMachine", "states:CreateActivity" ], "Resource": [ "arn:aws:states:*:*:*"

260

Page 268: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド管理者以外のユーザー用の詳細な IAM アクセス許可の作成

] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam:::role/my-execution-role" ] } ]}

ステートマシンレベルのアクセス許可このアクセス許可レベルは、特定のステートマシンで動作するすべての API アクションに適用されます。これらの API オペレーションには、DeleteStateMachine、DescribeStateMachine、StartExecution、ListExecutions などのリクエストの一部として、ステートマシンの Amazon リソースネーム (ARN) が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:DescribeStateMachine", "states:StartExecution", "states:DeleteStateMachine", "states:ListExecutions", "states:UpdateStateMachine" ], "Resource": [ "arn:aws:states:*:*:stateMachine:StateMachinePrefix*" ] } ]}

実行レベルのアクセス許可このアクセス許可レベルは、特定の実行で動作するすべての API アクションに適用されます。これらのAPI オペレーションには、DescribeExecution、GetExecutionHistory、StopExecution などのリクエストの一部として、実行の ARN が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:DescribeExecution", "states:DescribeStateMachineForExecution", "states:GetExecutionHistory", "states:StopExecution" ], "Resource": [ "arn:aws:states:*:*:execution:*:ExecutionPrefix*" ] }

261

Page 269: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドVPC エンドポイント

]}

アクティビティレベルのアクセス許可このアクセス許可レベルは、特定のアクティビティまたはその特定のインスタンスで動作するすべての API アクションに適用されます。これらの API オペレーションには、DeleteActivity、DescribeActivity、GetActivityTask、SendTaskSuccess、SendTaskFailure、SendTaskHeartbeatなどのリクエストの一部として、アクティビティの ARN またはインスタンスのトークンが必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:DescribeActivity", "states:DeleteActivity", "states:GetActivityTask", "states:SendTaskSuccess", "states:SendTaskFailure", "states:SendTaskHeartbeat" ], "Resource": [ "arn:aws:states:*:*:activity:ActivityPrefix*" ] } ]}

Step Functions の Amazon VPC エンドポイントAmazon Virtual Private Cloud (Amazon VPC) を使用して AWS リソースをホストする場合は、AmazonVPC と AWS Step Functions の間にプライベート接続を確立できます。パブリックインターネットと交差せずに、この Step Functions ワークフローとの接続を使用できます。

Amazon VPC を使用すると、カスタム仮想ネットワークで AWS リソースを起動できます。VPC を使用して、IP アドレス範囲、サブネット、ルートテーブル、ネットワークゲートウェイなどのネットワーク設定を制御できます。VPC の詳細については、「Amazon VPC ユーザーガイド」を参照してください。

Amazon VPC を Step Functions に接続するには、まず、他の AWS のサービスに VPC を接続できる、インターフェイス VPC エンドポイントを定義する必要があります。このエンドポイントを使用すると、インターネットゲートウェイやネットワークアドレス変換 (NAT) インスタンス、または VPN 接続を必要とせずに、信頼性の高いスケーラブルな方法で接続できるようになります。詳細については、Amazon VPCユーザーガイド の「インターフェイス VPC エンドポイント (AWS PrivateLink)」を参照してください。

エンドポイントの作成AWS マネジメントコンソール、AWS Command Line Interface (AWS CLI)、AWS SDK、AWS StepFunctions API、または AWS CloudFormation を使用して、VPC に AWS Step Functions エンドポイントを作成できます。

Amazon VPC コンソールまたは AWS CLI を使用してエンドポイントを作成および設定する方法については、Amazon VPC ユーザーガイドの「インターフェイスエンドポイントの作成」を参照してください。

Note

エンドポイントを作成するとき、VPC の接続先のサービスとして Step Functions を指定します。Amazon VPC コンソールで、このサービス名は選択した AWS リージョンによって異なりま

262

Page 270: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドVPC エンドポイント

す。たとえば、米国東部 (バージニア北部) を選択した場合、サービス名は com.amazonaws.us-east-1.statesになります。

AWS CloudFormation を使用してエンドポイントを作成および設定する方法については、AWSCloudFormation ユーザーガイドの「AWS::EC2::VPCEndpoint」リソースを参照してください。

Amazon VPC エンドポイントポリシーStep Functions への接続アクセスを制御するには、Amazon VPC エンドポイントの作成中に AWS Identityand Access Management (IAM) エンドポイントポリシーをアタッチします。複数のエンドポイントポリシーをアタッチすることで、複雑な IAM ルールを作成できます。詳細については、以下のトピックを参照してください。

• Step Functions 用 Amazon Virtual Private Cloud エンドポイントポリシー (p. 263)• 管理者以外のユーザー用の詳細な IAM アクセス許可の作成 (p. 260)• VPC エンドポイントによるサービスのアクセスコントロール

Step Functions 用 Amazon Virtual Private Cloud エンドポイントポリシーStep Functions 用 Amazon VPC エンドポイントポリシーを作成できます。このポリシーでは以下を指定します。

• アクションを実行できるプリンシパル。• 実行可能なアクション。• このアクションを実行できるリソース。

次の例は、1 人の IAM ユーザーにステートマシンの作成を許可し、すべての IAM ユーザーがステートマシンを削除するアクセス許可を拒否する Amazon VPC エンドポイントポリシーを示しています。このサンプルポリシーでは、すべての IAM ユーザーに実行アクセス許可も付与されます。

{ "Version": "2012-10-17", "Statement": [ { "Action": "*Execution", "Resource": "*", "Effect": "Allow", "Principal": "*" }, { "Action": "states:CreateStateMachine", "Resource": "*", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam:123456789012:user/MyUser" } } { "Action": "states:DeleteStateMachine", "Resource": "*", "Effect": "Deny", "Principal": "*" } ]}

263

Page 271: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

エンドポイントポリシーの作成の詳細については、以下を参照してください。

• 管理者以外のユーザー用の詳細な IAM アクセス許可の作成 (p. 260)• VPC エンドポイントによるサービスのアクセスコントロール

統合サービスの IAM ポリシーAWS Step Functions コンソールでステートマシンを作成すると、ステートマシンの定義で使用されるリソースに基づき、Step Functions によって、AWS Identity and Access Management (IAM) ポリシーが生成されます。

以下の例では、ステートマシンの定義に基づき、Step Functions で IAM ポリシーが生成される様子を示します。サンプルコードの項目 (例: [[resourceName]]) は、ステートマシンの定義に表示されている静的リソースに置き換えられています。複数の静的リソースがある場合は、それぞれの IAM ロールにエントリが存在します。

動的と静的リソース静的リソースは、ステートマシンのタスク状態で直接定義されます。タスク状態で直接呼び出す API アクションに関する情報を含めると、Step Functions はそのリソースのみの IAM ロールを作成します。

動的リソースは、状態入力に渡され、Path を使用してアクセスされるリソースです (パス (p. 120) 参照)。動的リソースをタスクに渡す場合、Step Functions は "Resource": "*" を指定する権限の高いポリシーを作成します。

リクエストレスポンスとジョブの実行または IAM ポリシーのコールバックの待機ジョブの実行 (p. 145)パターンまたはコールバックの待機 (p. 145)パターン (末尾が .sync または.waitForTaskToken) を使用する接続の場合、接続されたサービスの API アクションからのレスポンスをモニタリングおよび受信するには、追加のアクセス許可が必要です。関連ポリシーには、非同期接続サービスよりも権限の高いアクセス許可が必要です。同期接続の詳細については、「サービス統合パターン (p. 145)」を参照してください。

Note

これらのテンプレートは、Step Functions が IAM ポリシーを作成する仕組みを理解するため、または他の AWS サービスと連携して Step Functions の IAM ポリシーを手動で作成する方法の例として確認してください。Step Functions サービス統合の詳細については、「サービスの AWSStep Functions との統合 (p. 143)」を参照してください。

トピック• AWS Lambda (p. 265)• AWS Batch (p. 265)• Amazon DynamoDB (p. 266)• Amazon ECS/AWS Fargate (p. 267)• Amazon Simple Notification Service (p. 269)• Amazon Simple Queue Service (p. 269)• AWS Glue (p. 270)• Amazon SageMaker (p. 271)• Amazon EMR (p. 278)• AWS CodeBuild (p. 283)

264

Page 272: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

• AWS Step Functions (p. 287)• アクティビティまたはタスクなし (p. 288)

AWS LambdaAWS Step Functions は、ステートマシンの定義に基づいて IAM ポリシーを生成します。function1 とfunction2 を呼び出す 2 つの AWS Lambda タスク状態を持つステートマシンの場合、この 2 つの関数のlambda:Invoke アクセス許可を含むポリシーを使用する必要があります。

これを次の例で示します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:[[region]]:[[accountId]]:function:[[function1]]", "arn:aws:lambda:[[region]]:[[accountId]]:function:[[function2]]" ] } ]}

AWS BatchThese example templates show how AWS Step Functions generates IAM policies based on the resourcesin your state machine definition. For more information, see:

• 統合サービスの IAM ポリシー (p. 264)• サービス統合パターン (p. 145)

AWS Batch では、リソースレベルのアクセスコントロールはサポートされていません。"Resource":"*" を使用する必要があります。

Run a Job (.sync)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "batch:SubmitJob", "batch:DescribeJobs", "batch:TerminateJob" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "events:PutTargets",

265

Page 273: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

"events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventsForBatchJobsRule" ] } ]}

Request Response and Callback (.waitForTaskToken)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "batch:SubmitJob" ], "Resource": "*" } ]}

Amazon DynamoDBThese example templates show how AWS Step Functions generates IAM policies based on the resourcesin your state machine definition. For more information, see:

• 統合サービスの IAM ポリシー (p. 264)• サービス統合パターン (p. 145)

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem" ], "Resource": [ "arn:aws:dynamodb:[[region]]:[[accountId]]:table/[[tableName]]" ] } ]}

動的リソース

{

266

Page 274: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem" ], "Resource": "*" } ]}

Amazon ECS/AWS FargateThese example templates show how AWS Step Functions generates IAM policies based on the resourcesin your state machine definition. For more information, see:

• 統合サービスの IAM ポリシー (p. 264)• サービス統合パターン (p. 145)

TaskId の値は、タスクが送信されるまで不明なため、Step Functions は、権限の高い "Resource":"*" ポリシーを作成します。

Note

"*" IAM ポリシーに関係なく、Step Functions によって開始した Amazon Elastic ContainerService (Amazon ECS) タスクのみ停止することができます。

Run a Job (.sync)

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunTask" ], "Resource": [ "arn:aws:ecs:[[region]]:[[accountId]]:task-definition/[[taskDefinition]]" ] }, { "Effect": "Allow", "Action": [ "ecs:StopTask", "ecs:DescribeTasks" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule",

267

Page 275: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

"events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventsForECSTaskRule" ] } ]}

動的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunTask", "ecs:StopTask", "ecs:DescribeTasks" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventsForECSTaskRule" ] } ]}

Request Response and Callback (.waitForTaskToken)

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunTask" ], "Resource": [ "arn:aws:ecs:[[region]]:[[accountId]]:task-definition/[[taskDefinition]]" ] } ]}

動的リソース

268

Page 276: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunTask" ], "Resource": "*" } ]}

Amazon Simple Notification ServiceThese example templates show how AWS Step Functions generates IAM policies based on the resourcesin your state machine definition. For more information, see:

• 統合サービスの IAM ポリシー (p. 264)• サービス統合パターン (p. 145)

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:[[region]]:[[accountId]]:[[topicName]]" ] } ]}

パスに基づくリソース、またはTargetArn または PhoneNumber に発行する

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "*" } ]}

Amazon Simple Queue ServiceThese example templates show how AWS Step Functions generates IAM policies based on the resourcesin your state machine definition. For more information, see:

269

Page 277: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

• 統合サービスの IAM ポリシー (p. 264)• サービス統合パターン (p. 145)

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:SendMessage" ], "Resource": [ "arn:aws:sqs:[[region]]:[[accountId]]:[[queueName]]" ] } ]}

動的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:SendMessage" ], "Resource": "*" } ]}

AWS GlueThese example templates show how AWS Step Functions generates IAM policies based on the resourcesin your state machine definition. For more information, see:

• 統合サービスの IAM ポリシー (p. 264)• サービス統合パターン (p. 145)

AWS Glue には、リソースベースのコントロールはありません。

Run a Job (.sync)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:StartJobRun", "glue:GetJobRun", "glue:GetJobRuns", "glue:BatchStopJobRun"

270

Page 278: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

], "Resource": "*" } ]}

Request Response and Callback (.waitForTaskToken)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:StartJobRun" ], "Resource": "*" } ]}

Amazon SageMakerThese example templates show how AWS Step Functions generates IAM policies based on the resourcesin your state machine definition. For more information, see:

• 統合サービスの IAM ポリシー (p. 264)• サービス統合パターン (p. 145)

Note

これらの例では、[[roleArn]] は、Amazon SageMaker がモデルアーティファクトおよびDocker イメージにアクセスして、ML コンピューティングインスタンスのデプロイ、またはバッチ変換ジョブに使用する IAM ロールの Amazon リソースネーム (ARN) を参照します。詳細については、「Amazon SageMaker ロール」を参照してください。

トピック• CreateTrainingJob (p. 271)• CreateTransformJob (p. 274)

CreateTrainingJob

静的リソース

Run a Job (.sync)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:DescribeTrainingJob", "sagemaker:StopTrainingJob" ],

271

Page 279: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

"Resource": [ "arn:aws:sagemaker:[[region]]:[[accountId]]:training-job/[[trainingJobName]]*" ] }, { "Effect": "Allow", "Action": [ "sagemaker:ListTags" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "[[roleArn]]" ], "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventsForSageMakerTrainingJobsRule" ] } ]}

Request Response and Callback (.waitForTaskToken)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob" ], "Resource": [ "arn:aws:sagemaker:[[region]]:[[accountId]]:training-job/[[trainingJobName]]*" ] }, { "Effect": "Allow", "Action": [ "sagemaker:ListTags" ], "Resource": [ "*" ]

272

Page 280: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

}, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "[[roleArn]]" ], "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } } ]}

動的リソース

.sync or .waitForTaskToken

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:DescribeTrainingJob", "sagemaker:StopTrainingJob" ], "Resource": [ "arn:aws:sagemaker:[[region]]:[[accountId]]:training-job/*" ] }, { "Effect": "Allow", "Action": [ "sagemaker:ListTags" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "[[roleArn]]" ], "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } }, { "Effect": "Allow", "Action": [

273

Page 281: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

"events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventsForSageMakerTrainingJobsRule" ] } ]}

Request Response and Callback (.waitForTaskToken)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob" ], "Resource": [ "arn:aws:sagemaker:[[region]]:[[accountId]]:training-job/*" ] }, { "Effect": "Allow", "Action": [ "sagemaker:ListTags" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "[[roleArn]]" ], "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } } ]}

CreateTransformJob

Note

Amazon SageMaker と統合するステートマシンを作成しても、AWS Step Functions によって、CreateTransformJob のポリシーが自動的に作成されることはありません。次のいずれかの IAM の例のに基づいて、作成されたロールにインラインポリシーをアタッチする必要があります。

静的リソース

274

Page 282: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

Run a Job (.sync)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreateTransformJob", "sagemaker:DescribeTransformJob", "sagemaker:StopTransformJob" ], "Resource": [ "arn:aws:sagemaker:[[region]]:[[accountId]]:transform-job/[[transformJobName]]*" ] }, { "Effect": "Allow", "Action": [ "sagemaker:ListTags" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "[[roleArn]]" ], "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventsForSageMakerTransformJobsRule" ] } ]}

Request Response and Callback (.waitForTaskToken)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [

275

Page 283: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

"sagemaker:CreateTransformJob" ], "Resource": [ "arn:aws:sagemaker:[[region]]:[[accountId]]:transform-job/[[transformJobName]]*" ] }, { "Effect": "Allow", "Action": [ "sagemaker:ListTags" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "[[roleArn]]" ], "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } } ]}

動的リソース

Run a Job (.sync)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreateTransformJob", "sagemaker:DescribeTransformJob", "sagemaker:StopTransformJob" ], "Resource": [ "arn:aws:sagemaker:[[region]]:[[accountId]]:transform-job/*" ] }, { "Effect": "Allow", "Action": [ "sagemaker:ListTags" ], "Resource": [ "*" ] }, { "Effect": "Allow",

276

Page 284: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

"Action": [ "iam:PassRole" ], "Resource": [ "[[roleArn]]" ], "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventsForSageMakerTransformJobsRule" ] } ]}

Request Response and Callback (.waitForTaskToken)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreateTransformJob" ], "Resource": [ "arn:aws:sagemaker:[[region]]:[[accountId]]:transform-job/*" ] }, { "Effect": "Allow", "Action": [ "sagemaker:ListTags" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "[[roleArn]]" ], "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } }

277

Page 285: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

]}

Amazon EMRThese example templates show how AWS Step Functions generates IAM policies based on the resourcesin your state machine definition. For more information, see:

• 統合サービスの IAM ポリシー (p. 264)• サービス統合パターン (p. 145)

addStep

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:DescribeStep", "elasticmapreduce:CancelSteps" ], "Resource": [ "arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventForEMRAddJobFlowStepsRule" ] } ]}

動的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:DescribeStep", "elasticmapreduce:CancelSteps" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" },

278

Page 286: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

{ "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventForEMRAddJobFlowStepsRule" ] } ]}

cancelStep

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:CancelSteps", "Resource": [ "arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]" ] } ]}

動的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:CancelSteps", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ]}

createCluster

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:RunJobFlow", "elasticmapreduce:DescribeCluster", "elasticmapreduce:TerminateJobFlows" ], "Resource": "*" },

279

Page 287: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::{{account}}:role/[[roleName]]" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventForEMRRunJobFlowRule" ] } ]}

setClusterTerminationProtection

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:SetTerminationProtection", "Resource": [ "arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]" ] } ]}

動的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:SetTerminationProtection", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ]}

modifyInstanceFleetByName

静的リソース

{ "Version": "2012-10-17",

280

Page 288: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

"Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceFleet", "elasticmapreduce:ListInstanceFleets" ], "Resource": [ "arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]" ] } ]}

動的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceFleet", "elasticmapreduce:ListInstanceFleets" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ]}

modifyInstanceGroupByName

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceGroups", "elasticmapreduce:ListInstanceGroups" ], "Resource": [ "arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]" ] } ]}

動的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceGroups", "elasticmapreduce:ListInstanceGroups" ],

281

Page 289: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

"Resource": "*" } ]}

terminateCluster

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:TerminateJobFlows", "elasticmapreduce:DescribeCluster" ], "Resource": [ "arn:aws:elasticmapreduce:[[region]]:[[accountId]]:cluster/[[clusterId]]" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventForEMRTerminateJobFlowsRule" ] } ]}

動的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:TerminateJobFlows", "elasticmapreduce:DescribeCluster" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventForEMRTerminateJobFlowsRule" ] } ]

282

Page 290: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

}

AWS CodeBuildThese example templates show how AWS Step Functions generates IAM policies based on the resourcesin your state machine definition. For more information, see:

• 統合サービスの IAM ポリシー (p. 264)• サービス統合パターン (p. 145)

リソース:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:sa-east-1:123456789012:StepFunctionsSample-CodeBuildExecution1111-2222-3333-wJalrXUtnFEMI-SNSTopic-bPxRfiCYEXAMPLEKEY" ], "Effect": "Allow" }, { "Action": [ "codebuild:StartBuild", "codebuild:StopBuild", "codebuild:BatchGetBuilds", "codebuild:BatchGetReports" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:sa-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildRule" ], "Effect": "Allow" } ]}

StartBuild

静的リソース

Run a Job (.sync)

{ "Version": "2012-10-17", "Statement": [ {

283

Page 291: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

"Effect": "Allow", "Action": [ "codebuild:StartBuild", "codebuild:StopBuild", "codebuild:BatchGetBuilds" ], "Resource": [ "arn:aws:codebuild:[[region]]:[[accountId]]:project/[[projectName]]" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventForCodeBuildStartBuildRule" ] } ]}

Request Response

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StartBuild" ], "Resource": [ "arn:aws:codebuild:[[region]]:[[accountId]]:project/[[projectName]]" ] } ]}

動的リソース

Run a Job (.sync)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StartBuild", "codebuild:StopBuild", "codebuild:BatchGetBuilds" ], "Resource": [ "arn:aws:codebuild:[[region]]:*:project/*" ] },

284

Page 292: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

{ "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventForCodeBuildStartBuildRule" ] } ]}

Request Response

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StartBuild" ], "Resource": [ "arn:aws:codebuild:[[region]]:*:project/*" ] } ]}

StopBuild

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StopBuild" ], "Resource": [ "arn:aws:codebuild:[[region]]:[[accountId]]:project/[[projectName]]" ] } ]}

動的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StopBuild"

285

Page 293: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

], "Resource": [ "arn:aws:codebuild:[[region]]:*:project/*" ] } ]}

BatchDeleteBuilds

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:BatchDeleteBuilds" ], "Resource": [ "arn:aws:codebuild:[[region]]:[[accountId]]:project/[[projectName]]" ] } ]}

動的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:BatchDeleteBuilds" ], "Resource": [ "arn:aws:codebuild:[[region]]:*:project/*" ] } ]}

BatchGetReports

静的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:BatchGetReports" ], "Resource": [ "arn:aws:codebuild:[[region]]:[[accountId]]:report-group/[[reportName]]" ] } ]

286

Page 294: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

}

動的リソース

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:BatchGetReports" ], "Resource": [ "arn:aws:codebuild:[[region]]:*:report-group/*" ] } ]}

AWS Step Functions1 つのネストされたワークフロー実行を呼び出す StartExecution ステートマシンの場合は、そのステートマシンへのアクセス許可を制限する IAM ポリシーを使用します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:[[region]]:[[accountId]]:stateMachine:[[stateMachineName]]" ] } ]}

詳細については、以下を参照してください。

• サービス統合 (p. 143)• サービス API にパラメータを渡す (p. 150)• AWS Step Functions (p. 177)

Synchronous

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:[[region]]:[[accountId]]:stateMachine:[[stateMachineName]]"

287

Page 295: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド統合サービスの IAM ポリシー

] }, { "Effect": "Allow", "Action": [ "states:DescribeExecution", "states:StopExecution" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventsForStepFunctionsExecutionRule" ] } ]}

Asynchronous

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:[[region]]:[[accountId]]:stateMachine:[[stateMachineName]]" ] } ]}

ネストされたワークフロー実行の詳細については、「タスク状態からワークフロー実行を開始する (p. 135)」を参照してください。

アクティビティまたはタスクなしActivity タスクのみを持つステートマシン、またはタスクをまったく持たないステートマシンでは、すべてのアクションとリソースへのアクセスを拒否する IAM ポリシーを使用します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "*", "Resource": "*" } ]}

288

Page 296: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドタグベースのポリシー

Activity タスクの使用の詳細については、「アクティビティ (p. 98)」を参照してください。

タグベースのポリシーStep Functions はタグベースのポリシーをサポートしています。たとえば、キー environment および値production のタグを含むすべての Step Functions リソースへのアクセスを制限できます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "states:TagResource", "states:UntagResource", "states:DeleteActivity", "states:DeleteStateMachine", "states:StopExecution" ], "Resource": "*", "Condition": { "StringEquals": {"aws:ResourceTag/environment": "production"} } } ]}

このポリシーでは、ステートマシンまたはアクティビティを削除する機能、実行を停止する機能、およびenvironment/production としてタグ付けされているすべてのリソースに対してタグを追加または削除する機能を Deny (拒否) します。

タグ付けの詳細については、以下を参照してください。

• Step Functions のタグ付け (p. 180)• IAM タグを使用したアクセスの制御

AWS Step Functions でのログ記録とモニタリングこのセクションでは、AWS Step Functions でのログ記録とモニタリングについて説明します。

トピック• CloudWatch を使用して Step Functions をモニタリングする (p. 289)• Step Functions の実行ステータスの変更のための CloudWatch イベント (p. 297)• AWS CloudTrail を使用した Step Functions のログ記録 (p. 301)• CloudWatch Logs を使用したロギング (p. 305)

CloudWatch を使用して Step Functions をモニタリングするモニタリングは、AWS Step Functions と AWS ソリューションの信頼性、可用性、パフォーマンスを維持する上で重要な部分です。マルチポイント障害をより簡単にデバッグできるように、使用する AWS サービスからモニタリングデータを収集する必要があります。ただし、Step Functions のモニタリングを開始する前に、以下の質問に回答するモニタリング計画を作成する必要があります。

289

Page 297: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon CloudWatch のメトリクス

• どのような目的でモニタリングしますか?• モニタリングの対象となるリソースとは ?• どのくらいの頻度でこれらのリソースをモニタリングしますか?• 使用するモニタリングツールは?• 誰がモニタリングタスクを実行しますか?• 誰が問題が発生したときに通知を受け取りますか?

次のステップでは、通常の Step Functions パフォーマンスのベースラインを環境に確立します。これを行うには、さまざまな時間帯に、さまざまな負荷条件でパフォーマンスを測定します。Step Functions をモニタリングするには、モニタリングデータの履歴を保存することを検討します。このデータを、最新のパフォーマンスデータと比較するベースラインとして使用し、通常のパフォーマンスのパターンやパフォーマンスの異常を検出して、問題への対応を検討することができます。

たとえば、Step Functions を使用すると、ハートビートのタイムアウトが原因で失敗したアクティビティや AWS Lambda タスクの数をモニタリングできます。パフォーマンスが確立したベースラインを下回った場合、ハートビート間隔を変更する必要が生じることがあります。

ベースラインを確立するには、少なくとも、次のメトリクスをモニタリングする必要があります。

• ActivitiesStarted

• ActivitiesTimedOut

• ExecutionsStarted

• ExecutionsTimedOut

• LambdaFunctionsStarted

• LambdaFunctionsTimedOut

以下のセクションでは、Step Functions が Amazon CloudWatch に提供するメトリクスについて説明します。これらのメトリクスを使用してステートマシンおよびアクティビティを追跡し、しきい値のアラームを設定できます。メトリクスは、AWS マネジメントコンソール を使用して表示できます。

トピック• 時間間隔を報告するメトリクス (p. 290)• カウントを報告するメトリクス (p. 291)• 実行メトリクス (p. 291)• アクティビティのメトリクス (p. 291)• Lambda 関数メトリクス (p. 292)• サービス統合メトリクス (p. 292)• サービスメトリクス (p. 293)• API のメトリクス (p. 293)• Step Functions メトリクスを表示する (p. 294)• Step Functions のアラームを設定する (p. 295)

時間間隔を報告するメトリクスStep Functions CloudWatch メトリックスの一部は時間間隔であり、常にミリ秒単位で測定されます。これらのメトリクスは通常、ステートマシン、アクティビティ、Lambda 関数タイムアウトを設定できる実行段階に対応しており、わかりやすい名前が付いています。

たとえば、ActivityRunTime メトリクスは、アクティビティが実行を開始してから完了するまでの時間を測定します。同じ期間のタイムアウト値を設定できます。

290

Page 298: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon CloudWatch のメトリクス

CloudWatch コンソールでは、時間間隔メトリクスの表示統計として [average (平均)] を選択した場合に最良の結果になります。

カウントを報告するメトリクス一部の Step Functions CloudWatch メトリクスは、結果をカウントとして報告します。たとえば、ExecutionsFailed はステートマシンの実行が失敗した回数を記録します。

CloudWatch コンソールでは、カウントメトリクスの表示統計として [sum (合計)] を選択した場合に最良の結果になります。

実行メトリクスAWS/States 名前空間には、以下の Step Functions 実行のメトリクスが含まれます。

メトリクス 説明

ExecutionTime 実行の開始時点から終了時点までの間隔 (ミリ秒単位)。

ExecutionThrottled 調整済みの StateEntered イベントと再試行回数。これはStateTransition のスロットリングに関連しています。詳細については、AWS Step Functions 開発者ガイドの「状態のスロットリングに関連するクォータ」を参照してください。

ExecutionsAborted 中断または終了された実行の数。

ExecutionsFailed 失敗した実行の数。

ExecutionsStarted 開始された実行の数。

ExecutionsSucceeded 正常に完了した実行の数。

ExecutionsTimedOut 何らかの理由でタイムアウトした実行の数。

Step Functions 実行メトリクスのディメンション

ディメンション 説明

StateMachineArn 当該の実行に関するステートマシンの Amazon リソースネーム(ARN)。

アクティビティのメトリクスAWS/States 名前空間には、以下の Step Functions アクティビティのメトリクスが含まれます。

メトリクス 説明

ActivityRunTime アクティビティの開始時点から終了時点までの間隔 (ミリ秒単位)。

ActivityScheduleTime アクティビティがスケジュール状態に留まる間隔 (ミリ秒単位)。

ActivityTime アクティビティがスケジュールされてから終了するまでの間隔 (ミリ秒単位)。

ActivitiesFailed 失敗したアクティビティの数。

291

Page 299: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon CloudWatch のメトリクス

メトリクス 説明

ActivitiesHeartbeatTimedOutハートビートタイムアウトが原因でタイムアウトしたアクティビティの数。

ActivitiesScheduled スケジュールされたアクティビティの数。

ActivitiesStarted 開始されたアクティビティの数。

ActivitiesSucceeded 正常に完了したアクティビティの数。

ActivitiesTimedOut 終了時にタイムアウトしたアクティビティの数。

Step Functions アクティビティメトリクスのディメンション

ディメンション 説明

ActivityArn アクティビティの ARN。

Lambda 関数メトリクスAWS/States 名前空間には、Step Functions Lambda 関数のための以下のメトリクスが含まれます。

メトリクス 説明

LambdaFunctionRunTime Lambda 関数の開始時点から終了時点までの間隔 (ミリ秒単位)。

LambdaFunctionScheduleTime Lambda 関数がスケジュール状態に留まる間隔 (ミリ秒単位)。

LambdaFunctionTime Lambda 関数がスケジュールされた時点から終了する時点までの間隔 (ミリ秒単位)。

LambdaFunctionsFailed 失敗した Lambda 関数の数。

LambdaFunctionsScheduled スケジュールされた Lambda 関数の数。

LambdaFunctionsStarted 開始された Lambda 関数の数。

LambdaFunctionsSucceeded 正常に完了した Lambda 関数の数。

LambdaFunctionsTimedOut 終了時にタイムアウトした Lambda 関数の数。

Step Functions Lambda 関数メトリクスのディメンション

ディメンション 説明

LambdaFunctionArn Lambda 関数の ARN。

サービス統合メトリクスAWS/States 名前空間には、Step Functions サービス統合に対する次のメトリクスが含まれます。詳細については、「サービスの AWS Step Functions との統合 (p. 143)」を参照してください。

292

Page 300: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon CloudWatch のメトリクス

メトリクス 説明

ServiceIntegrationRunTime サービスタスクの開始時点から終了時点までの間隔 (ミリ秒単位)。

ServiceIntegrationScheduleTimeサービスタスクがスケジュール状態に留まる間隔 (ミリ秒単位)。

ServiceIntegrationTime サービスタスクがスケジュールされてから終了するまでの間隔 (ミリ秒単位)。

ServiceIntegrationsFailed 失敗したサービスタスクの数。

ServiceIntegrationsScheduledスケジュールされたサービスタスクの数。

ServiceIntegrationsStarted 開始したサービスタスクの数。

ServiceIntegrationsSucceeded正常に完了したサービスタスクの数。

ServiceIntegrationsTimedOut終了時にタイムアウトしたサービスタスクの数。

Step Functions のサービス統合メトリクスのディメンション

ディメンション 説明

ServiceIntegrationResourceArn統合されたサービスのリソースの ARN。

サービスメトリクスAWS/States 名前空間には、Step Functions サービスの次のメトリクスが含まれます。

メトリクス 説明

ThrottledEvents スロットルされたリクエストの数。

ProvisionedBucketSize 1 秒あたりに利用できるリクエストの数。

ProvisionedRefillRate バケットで許可される 1 秒あたりのリクエストの数。

ConsumedCapacity 1 秒あたりのリクエストの数。

Step Functions サービスメトリクスのディメンション

ディメンション 説明

StateTransition データをフィルタリングして状態遷移メトリクスを表示します。

API のメトリクスAWS/States 名前空間には、Step Functions API の次のメトリクスが含まれます。

メトリクス 説明

ThrottledEvents スロットルされたリクエストの数。

293

Page 301: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon CloudWatch のメトリクス

メトリクス 説明

ProvisionedBucketSize 1 秒あたりに利用できるリクエストの数。

ProvisionedRefillRate バケットで許可される 1 秒あたりのリクエストの数。

ConsumedCapacity 1 秒あたりのリクエストの数。

Step Functions API メトリクスのディメンション

ディメンション 説明

APIName 指定された API 名の API にデータをフィルタリングします。

Step Functions メトリクスを表示する1. AWS マネジメントコンソール にサインインして、CloudWatch コンソールを開きます。2. [メトリクス] を選択し、[All Metrics (すべてのメトリクス)] タブで、[States (状態)] を選択します。

最近実行した場合、最大 3 タイプのメトリクスが表示されます。

• 実行メトリクス• アクティビティ関数メトリクス• Lambda 関数メトリクス

3. メトリクスタイプを選択してメトリクスのリストを表示します。

294

Page 302: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon CloudWatch のメトリクス

• メトリクスを [Metric Name] または [StateMachineArn] によって並べ替えるには、列見出しを使用します。

• メトリクスのグラフを表示するには、リストでメトリクスの横にあるボックスをオンにします。グラフパラメータは、グラフビューの上にある時間範囲コントロールを使用して変更できます。

相対値または絶対値 (日時を指定) を使用してカスタム時間範囲を選択できます。ドロップダウンリストを使用して値を線、積み上げ領域、または数字 (値) として表示することもできます。

• グラフの詳細を表示するには、グラフの下に表示されるメトリクス色コードにマウスカーソルを合わせます。

メトリクスの詳細が表示されます。

CloudWatch メトリクスの操作方法の詳細については、Amazon CloudWatch ユーザーガイドの「AmazonCloudWatch メトリクスの使用」を参照してください。

Step Functions のアラームを設定するAmazon CloudWatch アラームを使用してアクションを実行することができます。たとえば、アラームのしきい値に到達するのがいつかわかっている場合、StateMachinesFailed メトリクスが一定のしきい値を超えたときに Amazon SNS トピックに通知を送信したり、メールを送信したりするようにアラームを設定できます。

メトリクスにアラームを設定するには

1. AWS マネジメントコンソール にサインインして、CloudWatch コンソールを開きます。2. [メトリクス] を選択し、[All Metrics (すべてのメトリクス)] タブで、[States (状態)] を選択します。

295

Page 303: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon CloudWatch のメトリクス

最近実行した場合、最大 3 タイプのメトリクスが表示されます。

• 実行メトリクス• アクティビティ関数メトリクス• Lambda 関数メトリクス

3. メトリクスタイプを選択してメトリクスのリストを表示します。

4. メトリクスを選択し、[グラフ化したメトリクス] を選択します。5. リストのメトリクスの横にある を選択します。

[Create Alarm (アラームの作成)] ページが表示されます。

296

Page 304: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon CloudWatch イベント

6. [Alarm threshold (アラームしきい値)] と [Actions (アクション)] に値を入力し、[Create Alarm (アラームの作成)] を選択します。

CloudWatch アラームの設定方法および使用方法の詳細については、Amazon CloudWatch ユーザーガイドの「Amazon CloudWatch アラームの作成」を参照してください。

Step Functions の実行ステータスの変更のためのCloudWatch イベントAmazon CloudWatch Events は、AWS リソースの状態の変更に対応できるようにする AWS のサービスです。AWS Step Functions は 2 つの方法により CloudWatch イベント で使用できます。

実行ステータスが変更されたときに、CloudWatch イベント を放出するよう Step Functions を設定できます。これにより、DescribeExecution API を使用して継続的にポーリングすることなく、ワークフローをモニタリングできます。ステートマシンの実行の変更に基づいて、CloudWatch イベント ターゲットを使用して新しいステートマシンの実行を開始する、AWS Lambda 関数を呼び出す、Amazon SimpleNotification Service (Amazon SNS) トピックにメッセージを発行するなどの操作を実行できます。

Step Functions ステートマシンを CloudWatch イベント のターゲットとして設定することもできます。これにより、他の AWS サービスからのイベントに応答して、Step Functions ワークフローの実行をトリガーできます。

詳細については、「Amazon CloudWatch Events ユーザーガイド」を参照してください。

トピック

297

Page 305: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon CloudWatch イベント

• Step Functions イベントの例 (p. 298)• CloudWatch イベント コンソールでの CloudWatch イベント ターゲットへの Step Functions イベント

のルーティング (p. 300)

Step Functions イベントの例以下は、CloudWatch イベント への Step Functions 送信イベントの例です。

トピック• 実行の開始 (p. 298)• 実行の成功 (p. 298)• 実行の失敗 (p. 299)• 実行のタイムアウト (p. 299)• 実行の中止 (p. 300)

いずれの場合も、イベントデータの detail セクションに、DescribeExecution API と同じ情報が含まれています。status フィールドは、イベント送信時の実行ステータス (放出されたイベントに応じてRUNNING、SUCCEEDED、FAILED、TIMED_OUT、ABORTED のいずれか) を示します。

実行の開始

{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "012345678912", "time": "2019-02-26T19:42:21Z", "region": "us-east-1", "resources": [ "arn:aws:states:us-east-1:012345678912:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-1:012345678912:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-1:012345678912:stateMachine:state-machine", "name": "execution-name", "status": "RUNNING", "startDate": 1551225271984, "stopDate": null, "input": "{}", "output": null }}

実行の成功

{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "012345678912", "time": "2019-02-26T19:42:21Z", "region": "us-east-1", "resources": [

298

Page 306: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon CloudWatch イベント

"arn:aws:states:us-east-1:012345678912:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-1:012345678912:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-1:012345678912:stateMachine:state-machine", "name": "execution-name", "status": "SUCCEEDED", "startDate": 1547148840101, "stopDate": 1547148840122, "input": "{}", "output": "\"Hello World!\"" }}

実行の失敗

{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "012345678912", "time": "2019-02-26T19:42:21Z", "region": "us-east-1", "resources": [ "arn:aws:states:us-east-1:012345678912:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-1:012345678912:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-1:012345678912:stateMachine:state-machine", "name": "execution-name", "status": "FAILED", "startDate": 1551225146847, "stopDate": 1551225151881, "input": "{}", "output": null }}

実行のタイムアウト

{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "012345678912", "time": "2019-02-26T19:42:21Z", "region": "us-east-1", "resources": [ "arn:aws:states:us-east-1:012345678912:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-1:012345678912:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-1:012345678912:stateMachine:state-machine", "name": "execution-name", "status": "TIMED_OUT",

299

Page 307: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAmazon CloudWatch イベント

"startDate": 1551224926156, "stopDate": 1551224927157, "input": "{}", "output": null }}

実行の中止

{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "012345678912", "time": "2019-02-26T19:42:21Z", "region": "us-east-1", "resources": [ "arn:aws:states:us-east-1:012345678912:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-1:012345678912:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-1:012345678912:stateMachine:state-machine", "name": "execution-name", "status": "ABORTED", "startDate": 1551225014968, "stopDate": 1551225017576, "input": "{}", "output": null }}

CloudWatch イベント コンソールでの CloudWatch イベントターゲットへの Step Functions イベントのルーティング1. ステートマシンの [Details (詳細)] ページで、[Actions (アクション)]、[Create CloudWatch event rule

(CloudWatch イベントルールの作成)] の順に選択します。

または、CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。ナビゲーションペインで、[イベント]、[ルール] を選択します。

2. [ルールの作成] を選択します。3. [イベントソース] で、[イベントパターン] が選択されていることを確認します。4. [Service Name (サービス名)] で、[Step Functions] を選択します。5. [Event Type (イベントタイプ)] で、[Step Functions Execution Status Change (Step Functions の実行

ステータスの変更)] を選択します。6. 必要に応じて、特定のステータス、ステートマシンの Amazon リソースネーム (ARN)、または実行

ARN を設定します。

300

Page 308: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAWS CloudTrail を使用した Step Functions のログ記録

7. [ターゲット] で、[ターゲットの追加] を選択し、リストからターゲットを選択します。たとえば、Lambda 関数を起動したり、Step Functions ステートマシンの実行を開始したりできます。

8. 特定のターゲットの詳細情報を追加します。9. [詳細の設定] を選択します。[ルールの詳細を設定する] ページで、ルールの [名前] と [説明] を入力し

ます。10. [ルールの作成] を選択します。

AWS CloudTrail を使用した Step Functions のログ記録Step Functions は AWS CloudTrail と統合されています。このサービスは、Step Functions 内でユーザーやロール、または AWS のサービスによって実行されたアクションを記録するサービスです。CloudTrailは、Step Functions コンソールからのコールや、Step Functions API へのコード呼び出しを含む、StepFunctions のすべての API コールをイベントとしてキャプチャします。

証跡を作成する場合は、Step Functions のイベントなど、Amazon Simple Storage Service (Amazon S3)バケットへの CloudTrail イベントの継続的デリバリーを有効にすることができます。証跡を設定しない場合でも、CloudTrail コンソールの [Event history (イベント履歴)] で最新のイベントを表示できます。

CloudTrail によって収集された情報を使用して、リクエストの作成元の IP アドレス、リクエストの実行者、リクエストの実行日時などの詳細を調べて、Step Functions に対してどのようなリクエストが行われたかを判断できます。

CloudTrail の詳細については、「AWS CloudTrail User Guide」を参照してください。

CloudTrail 内の Step Functions 情報CloudTrail は、アカウント作成時に AWS アカウントで有効になります。Step Functions でアクティビティが発生すると、そのアクティビティは [Event history (イベント履歴)] の AWS の他のサービスのイベントとともに CloudTrail イベントに記録されます。

最近のイベントは、AWS アカウントで表示、検索、ダウンロードできます。詳細については、「CloudTrail イベント履歴でのイベントの表示」を参照してください。

Step Functionsのイベントなど、AWS アカウントのイベントの継続的な記録については、証跡を作成します。証跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで証跡を作成するときに、証跡がすべての AWS リージョンに適用されます。証跡では、AWSパーティションのすべてのリージョンからのイベントがログに記録され、指定した Amazon S3 バケットにログファイルが配信されます。さらに、より詳細な分析や CloudTrail ログで収集されたデータに基づいた行動を実行するように他の AWS のサービスを設定できます。

詳細については、以下を参照してください。

• 証跡を作成するための概要• CloudTrail でサポートされるサービスと統合• CloudTrail の Amazon SNS 通知の設定• 「複数のリージョンから CloudTrail ログファイルを受け取る」と「複数のアカウントから CloudTrail ロ

グファイルを受け取る」

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。この ID 情報は以下のことを確認するのに役立ちます。

• リクエストが、ルートと IAM ユーザー認証情報のどちらを使用して送信されたか

301

Page 309: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAWS CloudTrail を使用した Step Functions のログ記録

• リクエストが、ロールとフェデレーティッドユーザーのどちらの一時的なセキュリティ認証情報を使用して送信されたか

• リクエストが、別の AWS サービスによって送信されたかどうか

詳細については、「CloudTrail userIdentity 要素」を参照してください。

例: Step Functions ログファイルエントリ証跡は、指定した Amazon S3 バケットにイベントをログファイルとして配信できる設定です。CloudTrailログファイルには、1 つ以上のログエントリが含まれます。イベントは任意の送信元からの単一のリクエストを表し、リクエストされたアクション、アクションの日時、リクエストのパラメータなどに関する情報が含まれます。CloudTrail ログファイルは、パブリック API コールの順序付けられたスタックトレースではないため、特定の順序では表示されません。

CreateActivity以下の例は、CreateActivity アクションを実行する CloudTrail ログエントリを示しています。

{ "eventVersion": "1.04", "userIdentity": { "type": "IAMUser", "principalId": "AIDAJYDLDBVBI4EXAMPLE", "arn": "arn:aws:iam::123456789012:user/test-user", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "test-user" }, "eventTime": "2016-10-28T01:17:56Z", "eventSource": "states.amazonaws.com", "eventName": "CreateActivity", "awsRegion": "us-east-1", "sourceIPAddress": "10.61.88.189", "userAgent": "Coral/Netty", "requestParameters": { "name": "OtherActivityPrefix.2016-10-27-18-16-56.894c791e-2ced-4cf4-8523-376469410c25" }, "responseElements": { "activityArn": "arn:aws:states:us-east-1:123456789012:activity:OtherActivityPrefix.2016-10-27-18-16-56.894c791e-2ced-4cf4-8523-376469410c25", "creationDate": "Oct 28, 2016 1:17:56 AM" }, "requestID": "37c67602-9cac-11e6-aed5-5b57d226e9ef", "eventID": "dc3becef-d06d-49bf-bc93-9b76b5f00774", "eventType": "AwsApiCall", "recipientAccountId": "123456789012"}

CreateStateMachine以下の例は、CreateStateMachine アクションを実行する CloudTrail ログエントリを示しています。

{ "eventVersion": "1.04", "userIdentity": { "type": "IAMUser", "principalId": "AIDAJYDLDBVBI4EXAMPLE", "arn": "arn:aws:iam::123456789012:user/test-user", "accountId": "123456789012",

302

Page 310: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAWS CloudTrail を使用した Step Functions のログ記録

"accessKeyId": "AKIAJL5C75K4ZEXAMPLE", "userName": "test-user" }, "eventTime": "2016-10-28T01:18:07Z", "eventSource": "states.amazonaws.com", "eventName": "CreateStateMachine", "awsRegion": "us-east-1", "sourceIPAddress": "10.61.88.189", "userAgent": "Coral/Netty", "requestParameters": { "name": "testUser.2016-10-27-18-17-06.bd144e18-0437-476e-9bb", "roleArn": "arn:aws:iam::123456789012:role/graphene/tests/graphene-execution-role", "definition": "{ \"StartAt\": \"SinglePass\", \"States\": { \"SinglePass\": { \"Type\": \"Pass\", \"End\": true } }}" }, "responseElements": { "stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:testUser.2016-10-27-18-17-06.bd144e18-0437-476e-9bb", "creationDate": "Oct 28, 2016 1:18:07 AM" }, "requestID": "3da6370c-9cac-11e6-aed5-5b57d226e9ef", "eventID": "84a0441d-fa06-4691-a60a-aab9e46d689c", "eventType": "AwsApiCall", "recipientAccountId": "123456789012"}

DeleteActivity

以下の例は、DeleteActivity アクションを実行する CloudTrail ログエントリを示しています。

{ "eventVersion": "1.04", "userIdentity": { "type": "IAMUser", "principalId": "AIDAJYDLDBVBI4EXAMPLE", "arn": "arn:aws:iam::123456789012:user/test-user", "accountId": "123456789012", "accessKeyId": "AKIAJL5C75K4ZEXAMPLE", "userName": "test-user" }, "eventTime": "2016-10-28T01:18:27Z", "eventSource": "states.amazonaws.com", "eventName": "DeleteActivity", "awsRegion": "us-east-1", "sourceIPAddress": "10.61.88.189", "userAgent": "Coral/Netty", "requestParameters": { "activityArn": "arn:aws:states:us-east-1:123456789012:activity:testUser.2016-10-27-18-11-35.f017c391-9363-481a-be2e-" }, "responseElements": null, "requestID": "490374ea-9cac-11e6-aed5-5b57d226e9ef", "eventID": "e5eb9a3d-13bc-4fa1-9531-232d1914d263", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }

DeleteStateMachine

以下の例は、DeleteStateMachine アクションを実行する CloudTrail ログエントリを示しています。

{

303

Page 311: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドAWS CloudTrail を使用した Step Functions のログ記録

"eventVersion": "1.04", "userIdentity": { "type": "IAMUser", "principalId": "AIDAJABK5MNKNAEXAMPLE", "arn": "arn:aws:iam::123456789012:user/graphene/tests/test-user", "accountId": "123456789012", "accessKeyId": "AKIAJA2ELRVCPEXAMPLE", "userName": "test-user" }, "eventTime": "2016-10-28T01:17:37Z", "eventSource": "states.amazonaws.com", "eventName": "DeleteStateMachine", "awsRegion": "us-east-1", "sourceIPAddress": "10.61.88.189", "userAgent": "Coral/Netty", "errorCode": "AccessDenied", "errorMessage": "User: arn:aws:iam::123456789012:user/graphene/tests/test-user is not authorized to perform: states:DeleteStateMachine on resource: arn:aws:states:us-east-1:123456789012:stateMachine:testUser.2016-10-27-18-16-38.ec6e261f-1323-4555-9fa", "requestParameters": null, "responseElements": null, "requestID": "2cf23f3c-9cac-11e6-aed5-5b57d226e9ef", "eventID": "4a622d5c-e9cf-4051-90f2-4cdb69792cd8", "eventType": "AwsApiCall", "recipientAccountId": "123456789012"}

StartExecution以下の例は、StartExecution アクションを実行する CloudTrail ログエントリを示しています。

{ "eventVersion": "1.04", "userIdentity": { "type": "IAMUser", "principalId": "AIDAJYDLDBVBI4EXAMPLE", "arn": "arn:aws:iam::123456789012:user/test-user", "accountId": "123456789012", "accessKeyId": "AKIAJL5C75K4ZEXAMPLE", "userName": "test-user" }, "eventTime": "2016-10-28T01:17:25Z", "eventSource": "states.amazonaws.com", "eventName": "StartExecution", "awsRegion": "us-east-1", "sourceIPAddress": "10.61.88.189", "userAgent": "Coral/Netty", "requestParameters": { "input": "{}", "stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:testUser.2016-10-27-18-16-26.482bea32-560f-4a36-bd", "name": "testUser.2016-10-27-18-16-26.6e229586-3698-4ce5-8d" }, "responseElements": { "startDate": "Oct 28, 2016 1:17:25 AM", "executionArn": "arn:aws:states:us-east-1:123456789012:execution:testUser.2016-10-27-18-16-26.482bea32-560f-4a36-bd:testUser.2016-10-27-18-16-26.6e229586-3698-4ce5-8d" }, "requestID": "264c6f08-9cac-11e6-aed5-5b57d226e9ef", "eventID": "30a20c8e-a3a1-4b07-9139-cd9cd73b5eb8", "eventType": "AwsApiCall", "recipientAccountId": "123456789012"}

304

Page 312: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドCloudWatch Logs を使用したロギング

StopExecution

以下の例は、StopExecution アクションを実行する CloudTrail ログエントリを示しています。

{ "eventVersion": "1.04", "userIdentity": { "type": "IAMUser", "principalId": "AIDAJYDLDBVBI4EXAMPLE", "arn": "arn:aws:iam::123456789012:user/test-user", "accountId": "123456789012", "accessKeyId": "AKIAJL5C75K4ZEXAMPLE", "userName": "test-user" }, "eventTime": "2016-10-28T01:18:20Z", "eventSource": "states.amazonaws.com", "eventName": "StopExecution", "awsRegion": "us-east-1", "sourceIPAddress": "10.61.88.189", "userAgent": "Coral/Netty", "requestParameters": { "executionArn": "arn:aws:states:us-east-1:123456789012:execution:testUser.2016-10-27-18-17-00.337b3344-83:testUser.2016-10-27-18-17-00.3a0801c5-37" }, "responseElements": { "stopDate": "Oct 28, 2016 1:18:20 AM" }, "requestID": "4567625b-9cac-11e6-aed5-5b57d226e9ef", "eventID": "e658c743-c537-459a-aea7-dafb83c18c53", "eventType": "AwsApiCall", "recipientAccountId": "123456789012"}

CloudWatch Logs を使用したロギング標準ワークフローでは AWS Step Functions に実行履歴が記録されますが、オプションで AmazonCloudWatch Logs へのロギングを設定することもできます。

Express ワークフローは、標準ワークフローとは異なり AWS Step Functions に実行履歴を記録しません。Express ワークフローの実行履歴と結果を表示するには、Amazon CloudWatch Logs へのロギングを設定する必要があります。ログを発行しても、実行がブロックまたは遅くなることはありません。

Note

ロギングを設定する場合、CloudWatch Logs 料金が適用されます。

ロギングの設定Step Functions コンソールを使用して標準ワークフローを作成する場合、CloudWatch Logs へのロギングを有効にするようには設定されません。Step Functions コンソールを使用して作成された ExpressWorkflow は、デフォルトで CloudWatch Logs へのロギングを有効にするように設定されます。

Express ワークフローでは、Step Functions は CloudWatch Logs に必要な AWS Identity and AccessManagement (IAM) ポリシーを持つロールを作成できます。API、CLI、または AWS CloudFormation を使用して標準ワークフローまたは Express ワークフローを作成する場合、Step Functions ではデフォルトでロギングが有効にならず、またロールに必要なアクセス許可があることを確認する必要があります。

コンソールから開始された各実行について、Step Functions は CloudWatch Logs へのリンクを提供します。このリンクには、その実行に固有のログイベントを取得するための正しいフィルターが設定されています。

305

Page 313: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドCloudWatch Logs を使用したロギング

ログを構成するには、CreateStateMachine または UpdateStateMachine を使用するときにLoggingConfiguration パラメータを渡すことができます。CloudWatch Logs Insights を使用すると、CloudWatch Logs でデータをさらに分析できます。詳細については、「CloudWatch Logs Insights を使用したログデータの分析」を参照してください。

IAM にログを記録するための CloudWatch Logs ポリシーCloudWatch Logs にロギングするための適切な権限を持つ IAM ロールを設定する必要もあります。以下は、アクセス許可を設定するために使用できるポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:GetLogDelivery", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:ListLogDeliveries", "logs:PutResourcePolicy", "logs:DescribeResourcePolicies", "logs:DescribeLogGroups" ], "Resource": "*" } ]}

ログレベルOFF、ALL、ERROR、または FATAL のいずれかを選択します。OFF に設定すると、イベントタイプはログに記録されません。ALL に設定すると、すべてのイベントタイプがログに記録されます。ERROR およびFATAL については、次の表を参照してください。

イベントタイプ All ERROR FATAL OFF

ChoiceStateEntered ✓      

ChoiceStateExited ✓      

ExecutionAborted ✓ ✓ ✓  

ExecutionFailed ✓ ✓ ✓  

ExecutionStarted ✓      

ExecutionSucceeded✓      

ExecutionTimedOut ✓ ✓ ✓  

FailStateEntered ✓   ✓  

LambdaFunctionFailed✓ ✓    

LambdaFunctionScheduled✓      

LambdaFunctionScheduleFailed✓ ✓    

LambdaFunctionStarted✓      

306

Page 314: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドCloudWatch Logs を使用したロギング

イベントタイプ All ERROR FATAL OFF

LambdaFunctionStartFailed✓ ✓    

LambdaFunctionSucceeded✓      

LambdaFunctionTimedOut✓ ✓    

MapIterationAborted ✓ ✓    

MapIterationFailed ✓ ✓    

MapIterationStarted ✓      

MapIterationSucceeded✓      

MapStateAborted ✓ ✓    

MapStateEntered ✓      

MapStateExited ✓      

MapStateFailed ✓ ✓    

MapStateStarted ✓      

MapStateSucceeded ✓      

ParallelStateAborted ✓ ✓    

ParallelStateEntered ✓      

ParallelStateExited ✓      

ParallelStateFailed ✓ ✓    

ParallelStateStarted ✓      

ParallelStateSucceeded✓      

PassStateEntered ✓      

PassStateExited ✓      

SucceedStateEntered✓      

SucceedStateExited ✓      

TaskFailed ✓ ✓    

TaskScheduled ✓      

TaskStarted ✓      

TaskStartFailed ✓ ✓    

TaskStateAborted ✓ ✓    

TaskStateEntered ✓      

TaskStateExited ✓      

TaskSubmitFailed ✓ ✓    

307

Page 315: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドコンプライアンス検証

イベントタイプ All ERROR FATAL OFF

TaskSubmitted ✓      

TaskSucceeded ✓      

TaskTimedOut ✓ ✓    

WaitStateAborted ✓ ✓    

WaitStateEntered ✓      

WaitStateExited ✓      

AWS Step Functions のコンプライアンス検証サードパーティーの監査者は、さまざまな AWS コンプライアンスプログラムの一環としてAWS Step Functions のセキュリティとコンプライアンスを評価します。このプログラムには、SOC、PCI、FedRAMP、HIPAA などがあります。

特定のコンプライアンスプログラムの範囲内にある AWS のサービスのリストについては、「コンプライアンスプログラムによる AWS 対象範囲内のサービス」を参照してください。一般的な情報については、「AWS コンプライアンスプログラム」を参照してください。

サードパーティーの監査レポートをダウンロードするには、AWS Artifact を使用します。詳細については、「AWS Artifact でレポートをダウンロードする」を参照してください。

Step Functions を使用する際のお客様のコンプライアンス責任は、データの機密性、企業のコンプライアンス目的、適用法規によって決まります。AWS は、コンプライアンスに役立つ以下のリソースを提供しています。

• セキュリティおよびコンプライアンスのクイックスタートガイド – これらのデプロイガイドでは、アーキテクチャ上の考慮事項について説明し、セキュリティとコンプライアンスに重点を置いたベースライン環境を AWS でデプロイするための手順を説明します。

• HIPAA のセキュリティとコンプライアンスに関するホワイトペーパーを作成する – このホワイトペーパーでは、企業が AWS を使用して HIPAA 準拠のアプリケーションを作成する方法について説明します。

• AWS コンプライアンスのリソース – このワークブックおよびガイドのコレクションは、お客様の業界や場所に適用される場合があります。

• AWS Config 開発者ガイドの「ルールでのリソースの評価」– AWS Config サービスでは、リソース設定が社内のプラクティス、業界のガイドライン、規制にどの程度適合しているかを評価します。

• AWS Security Hub – この AWS サービスでは、AWS 内のセキュリティ状態を包括的に表示しており、セキュリティ業界の標準およびベストプラクティスへの準拠を確認するのに役立ちます。

AWS Step Functions での耐障害性AWS のグローバルインフラストラクチャは AWS リージョンとアベイラビリティーゾーンを中心として構築されます。AWS リージョンには、低レイテンシー、高いスループット、そして高度の冗長ネットワークで接続されている複数の物理的に独立・隔離されたアベイラビリティーゾーンがあります。アベイラビリティーゾーンでは、ゾーン間で中断することなく自動的にフェイルオーバーするアプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーンは、従来の単一または複数のデータセンターインフラストラクチャよりも可用性、耐障害性、および拡張性が優れています。

AWS リージョンとアベイラビリティーゾーンの詳細については、「AWS グローバルインフラストラクチャ」を参照してください。

308

Page 316: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイドインフラストラクチャセキュリティ

Step Functions では、AWS グローバルインフラストラクチャに加えて、データの耐障害性とバックアップのニーズに対応できるように複数の機能を提供しています。

AWS Step Functions でのインフラストラクチャセキュリティ

マネージド型サービスとしての AWS Step Functions は、ホワイトペーパー「Amazon Web Services: セキュリティプロセスの概要」に記載されている AWS グローバルネットワークセキュリティの手順で保護されています。

AWS が公開している API コールを使用して、ネットワーク経由で Step Functions にアクセスします。クライアントで Transport Layer Security (TLS) 1.0 以降がサポートされている必要があります。TLS 1.2 以降が推奨されています。また、Ephemeral Diffie-Hellman (DHE) や Elliptic Curve Ephemeral Diffie-Hellman(ECDHE) などの Perfect Forward Secrecy (PFS) を使用した暗号スイートもクライアントでサポートされている必要があります。これらのモードは、Java 7 以降など、最近のほとんどのシステムでサポートされています。

また、リクエストは、アクセスキー ID と、IAM プリンシパルに関連付けられているシークレットのアクセスキーを使用して署名する必要があります。または、AWS Security Token Service (AWS STS) を使用して、一時的なセキュリティ認証情報を生成し、リクエストに署名することもできます。

これらの API オペレーションは任意のネットワークの場所から呼び出すことができますが、StepFunctions ではリソースベースのアクセスポリシーがサポートされているため、ソース IP アドレスに基づく制限を含めることができます。また、Step Functions ポリシーを使用して、特定の Amazon VirtualPrivate Cloud (Amazon VPC) エンドポイントまたは特定の VPC からのアクセスを制御することもできます。これにより、実質的に AWS ネットワーク内の特定の VPC からの特定の Step Functions リソースへのネットワークアクセスが分離されます。

AWS Step Functions での設定と脆弱性の分析設定および IT 管理は、AWS とお客様の間で共有される責任です。詳細については、AWS 責任共有モデルを参照してください。

309

Page 317: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

関連情報次の表は、本サービスを利用する際に役立つと思われる関連リソースの一覧です。

リソース 説明

AWS Step Functions API リファレンス API アクション、パラメータ、データ型に関する説明と、サービスから返されるエラーのリスト。

AWS Step Functions コマンドラインリファレンス AWS Step Functions で使用できる AWS CLI コマンドの説明。

Step Functions の製品情報 Step Functions に関する情報のメインのウェブページ。

ディスカッションフォーラム Step Functions と AWS の他のサービスに関する技術的な質疑応答の場である開発者向けのコミュニティフォーラム。

AWS プレミアムサポート情報 1 対 1 での迅速な対応を行うサポートチャネルである AWS プレミアムサポートに関する情報のメインウェブページです。プレミアムサポートは、AWS インフラストラクチャサービスでのアプリケーションの構築および実行を支援します。

310

Page 318: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

ドキュメント履歴このセクションでは、AWS Step Functions 開発者ガイドの主な変更点を一覧表示します。

変更 説明 変更日

新機能 AWS Step Functions が AWS サーバーレスアプリケーションモデル でサポートされ、ワークフローのオーケストレーションをサーバーレスアプリケーションに簡単に統合できるようになりました。詳細については、以下のトピックを参照してください。

• ???• AWS::Serverless::StateMachine• AWS SAM ポリシーテンプレート

2020 年 5月 27 日

新機能 AWS Step Functions が、Step Functions の実行をネストするための新しい同期呼び出しを導入しました。新しい呼び出しarn:aws:states:::states:startExecution.sync:2は、JSON オブジェクトを返します。元の呼び出しarn:aws:states:::states:startExecution.sync は引き続きサポートされ、JSON のエスケープされた文字列を返します。詳細については、以下のトピックを参照してください。

• 統合サービスとして AWS Step Functions 実行を管理する (p. 177)

2020 年 5月 19 日

新機能 AWS Step Functions は AWS CodeBuild と統合するようになりました。詳細については、以下のトピックを参照してください。

• サービスの AWS Step Functions との統合 (p. 143)• Step Functions を使用して AWS CodeBuild を呼び出す (p. 176)• Step Functions でサポートされる AWS サービス統合 (p. 152)

2020 年 5月 5 日

更新 標準ワークフローで Amazon CloudWatch Logs へのロギングを設定できるようになりました。詳細については、以下のトピックを参照してください。

• CloudWatch Logs を使用したロギング (p. 305)

2020 年 2月 25 日

新機能 AWS Step Functions は、Amazon Virtual Private Cloud (VPC) から直接パブリック IP アドレスを必要とせずにアクセスできるようになりました。詳細については、以下のトピックを参照してください。

• Step Functions の Amazon VPC エンドポイント (p. 262)

2019 年 12月 23 日

新機能 Express ワークフローは新しいワークフロータイプで、IoT データの取り込み、ストリーミングデータ処理と変換、モバイルアプリケーションのバックエンドなど、大容量のイベント処理ワークロードに適しています。

詳細については、次の新規および更新されたトピックを参照してください。

• 標準ワークフローとExpress ワークフロー (p. 88)• 最低 1 回のワークフロー実行 (p. 89)

• Step Functions の開始方法 (p. 14)• サービスの AWS Step Functions との統合 (p. 143)

• Step Functions でサポートされる AWS サービス統合 (p. 152)

2019 年 12月 3 日

311

Page 319: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

変更 説明 変更日• Amazon SQS からの大容量メッセージの処理 (Express ワークフ

ロー) (p. 225)• 選択的チェックポイントの例 (Express ワークフロー) (p. 230)• クォータ (p. 244)

• 標準ワークフローのクォータ (p. 244)• Express ワークフローのクォータ (p. 246)

• CloudWatch Logs を使用したロギング (p. 305)• AWS Step Functions API リファレンス

• CreateStateMachine• UpdateStateMachine• DescribeStateMachine• DescribeStateMachineForExecution• StopExecution• DescribeExecution• GetExecutionHistory• ListExecutions• ListStateMachines• StartExecution• CloudWatchLogsLogGroup• LogDestination• LoggingConfiguration

新機能 AWS Step Functions は Amazon EMR と統合するようになりました。詳細については、以下のトピックを参照してください。

• サービスの AWS Step Functions との統合 (p. 143)• Step Functions を使用して Amazon EMR を呼び出す (p. 169)• Step Functions でサポートされる AWS サービス統合 (p. 152)

2019 年 11月 19 日

更新 AWS Step Functions が、AWS Step Functions Data Science SDK をリリースしました。詳細については、以下を参照してください。

• GitHub のプロジェクト• SDK ドキュメント• 以下のサンプルノートブック。これは Amazon SageMaker コンソールと関

連する GitHub プロジェクトで利用できます。• hello_world_workflow.ipynb

• machine_learning_workflow_abalone.ipynb

• training_pipeline_pytorch_mnist.ipynb

2019 年 11月 7 日

更新 Step Functions で Amazon SageMaker 用の追加の API アクションがサポートされ、機能のデモンストレーション用に 2 つの新しいサンプルプロジェクトが追加されました。詳細については、以下を参照してください。

• Step Functions を使用して Amazon SageMaker を管理する (p. 163)• サービスの AWS Step Functions との統合 (p. 143)• 機械学習モデルのトレーニング (p. 214)• 機械学習モデルのチューニング (p. 219)

2019 年 10月 3 日

312

Page 320: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

変更 説明 変更日

新機能 Step Functions に新しい Map 状態タイプが追加されました。Map 状態を使用して、入力内の JSON 配列の項目ごとに一連のステップを実行できます。詳細については、以下を参照してください。

• Map 状態 (p. 113)• Map 状態の例 (p. 114)• Map 状態のチュートリアル (p. 83)• Map 状態の入出力処理 (p. 116)• ItemsPath (p. 123)• Map 状態のコンテキストオブジェクトデータ (p. 133)• Map 状態のサンプルプロジェクト (p. 209)

2019 年 9月 18 日

新機能 Step Functions は、統合サービス API として StartExecution を呼び出すことで、新しいワークフロー実行の開始をサポートします。参照:

• タスク状態からワークフロー実行を開始する (p. 135)• 統合サービスとして AWS Step Functions 実行を管理する (p. 177)• サービスの AWS Step Functions との統合 (p. 143)• Step Functions ワークフロー実行を開始するための IAM ポリシー (p. 287)

2019 年 8月 12 日

新機能 Step Functions には、統合されたサービスにタスクトークンを渡し、SendTaskSuccess または SendTaskFailure からそのタスクトークンが返されるまで実行を一時停止する機能が含まれています。参照:

• サービス統合パターン (p. 145)• タスクトークンのコールバックまで待機する (p. 146)• コールバックパターンの例 (Amazon SQS、Amazon SNS、Lambda)

(p. 199)• Step Functions でサポートされる AWS サービス統合 (p. 152)• 人間による承諾プロジェクト例をデプロイする (p. 73)• サービス統合メトリクス (p. 292)

Step Functions は、状態の定義の "Parameters" フィールド内で直接に現在の実行に関する動的な情報にアクセスする方法を提供するようになりました。参照:

• Context オブジェクト (p. 132)• コンテキストオブジェクトノードをパラメータとして渡す (p. 151)

2019 年 5月 23 日

新機能 Step Functions が、CloudWatch イベント の実行ステータスの変更をサポートするようになりました。以下を参照してください。

• Step Functions の実行ステータスの変更のための CloudWatch イベント (p. 297)

• Amazon CloudWatch Events ユーザーガイド

2019 年 5月 8 日

新機能 Step Functions がタグを使用して IAM のアクセス許可をサポートするようになりました。詳細については、以下のトピックを参照してください。

• Step Functions のタグ付け (p. 180)• タグベースのポリシー (p. 289)

2019 年 3月 5 日

313

Page 321: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

変更 説明 変更日

新機能 Step Functions Local が利用可能になりました。テストと開発のためにローカルマシンで Step Functions で実行できます。Step Functions Local は Java アプリケーションまたは Docker イメージとしてダウンロードできます。「StepFunctions Local (ダウンロード可能バージョン) のセットアップ (p. 5)」を参照してください。

2019 年 2月 4 日

新機能 AWS Step Functions が 北京および寧夏 リージョンで利用できるようになりました。「サポートされているリージョン (p. 2)」を参照してください。

2018 年 1月 15 日

新機能 Step Functions は、コスト配分を追跡するのに役立つリソースタグ付けをサポートします。ステートマシンへのタグ付けは、[Details (詳細)] ページで、または API アクションを使用して行うことができます。「Step Functions のタグ付け (p. 180)」を参照してください。

2019 年 1月 7 日

新機能 AWS Step Functions が、欧州 (パリ)、および 南米 (サンパウロ) の各リージョンで利用できるようになりました。「サポートされているリージョン (p. 2)」を参照してください。

2018 年 12月 13 日

新機能 AWS Step Functions が 欧州 (ストックホルム) リージョンで利用可能になりました。サポートされているリージョンのリストについては、「サポートされているリージョン (p. 2)」を参照してください。

2018 年 12月 12 日

新機能 状態の定義を編集する際に、統合されているサービスの状態定義を簡単に設定および生成できるようになりました。詳細については、以下のトピックを参照してください。

• コードスニペット (p. 151)• コードスニペットの使用 (p. 69)

2018 年 12月 10 日

新機能 Step Functions は、一部の AWS サービスと統合されるようになりました。Amazon ステートメント言語 のタスク状態から、これらの統合サービスの API にパラメータを直接呼び出して渡すことができるようになりました。詳細については、以下のトピックを参照してください。

• サービスの AWS Step Functions との統合 (p. 143)• サービス API にパラメータを渡す (p. 150)• Step Functions でサポートされる AWS サービス統合 (p. 152)

2018 年 11月 29 日

更新 タスク状態のドキュメントの TimeoutSeconds およびHeartbeatSeconds の説明を見直しました。「タスク (p. 94)」を参照してください。

2018 年 10月 24 日

更新 実行履歴の最大サイズの制限についての説明を改善し、関連するベストプラクティスのトピックへのリンクを追加しました。

• ステートマシンの実行に関連するクォータ (p. 244)• 履歴のクォータに到達しないようにする (p. 241)

2018 年 10月 17 日

更新 AWS Step Functions ドキュメントに新しいチュートリアルを追加しました。「Amazon S3 イベント発生時にステートマシンの実行を開始する (p. 44)」を参照してください。

2018 年 9月 25 日

更新 上限ドキュメントから、Step Functions コンソールに表示される最大実行エントリを削除しました。「標準ワークフローのクォータ (p. 244)」を参照してください。

2018 年 9月 13 日

314

Page 322: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

変更 説明 変更日

更新 アクティビティタスクポーリング時のレイテンシー向上に関する、新しいベストプラクティスのトピックを AWS Step Functions ドキュメントに追加しました。「アクティビティタスクポーリング時のレイテンシーを回避する (p. 242)」を参照してください。

2018 年 8月 30 日

更新 アクティビティおよびアクティビティワーカーに関する AWS Step Functionsトピックを改善しました。「アクティビティ (p. 98)」を参照してください。

2018 年 8月 29 日

更新 CloudTrail 統合に関する AWS Step Functions トピックが更新されました。「AWS CloudTrail を使用した Step Functions のログ記録 (p. 301)」を参照してください。

2018 年 8月 7 日

更新 AWS CloudFormation チュートリアルに JSON の例が追加されました。「AWS CloudFormation を使用してStep Functions 用 Lambda ステートマシンを作成する (p. 24)」を参照してください。

2018 年 23月 6 日

更新 Lambda サービスエラー処理に関する新しいトピックが追加されました。「Lambda サービス例外の処理 (p. 241)」を参照してください。

2018 年 20月 6 日

新機能 AWS Step Functions が アジアパシフィック (ムンバイ) リージョンで利用可能になりました。サポートされているリージョンのリストについては、「サポートされているリージョン (p. 2)」を参照してください。

2018 年 28月 6 日

新機能 AWS Step Functions が AWS GovCloud (US-West) リージョンで利用可能になりました。サポートされているリージョンのリストについては、「サポートされているリージョン (p. 2)」を参照してください。AWS GovCloud (US-West) リージョンでの Step Functions の使用については、「AWS GovCloud(米国) エンドポイント」を参照してください。

2018 年 28月 6 日

更新 Parallel 状態のエラー処理に関するドキュメントを改良しました。「エラー処理 (p. 113)」を参照してください。

2018 年 20月 6 日

更新 Step Functions での入出力処理に関するドキュメントが改良されました。InputPath、ResultPath、OutputPath を使用して、ワークフロー、状態、タスクにおける JSON のフローを制御する方法について説明します。参照:

• Step Functions の入出力処理 (p. 119)• ResultPath (p. 124)

2018 年 7月 6 日

更新 Parallel 状態のサンプルコードを改良しました。「Parallel (p. 111)」を参照してください。

2018 年 4月 6 日

新機能 CloudWatch で API とサービスメトリクスをモニタリングできるようになりました。「CloudWatch を使用して Step Functions をモニタリングする (p. 289)」を参照してください。

2018 年 5月 25 日

更新 StartExecution、StopExecution および StateTransition のスロットリング制限が、次のリージョンで引き上げられました。

• 米国東部(バージニア北部)• 米国西部 (オレゴン)• 欧州 (アイルランド)

詳細については、「標準ワークフローのクォータ (p. 244)」を参照してください。

2018 年 5月 16 日

315

Page 323: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

変更 説明 変更日

新機能 AWS Step Functions が 米国西部 (北カリフォルニア) および アジアパシフィック (ソウル) リージョンで利用可能になりました。サポートされているリージョンのリストについては、「サポートされているリージョン (p. 2)」を参照してください。

2018 年 5月 5 日

更新 インターフェイスの変更に合わせて手順と画像を更新しました。 2018 年 4月 25 日

更新 作業を継続するために、新しい実行を開始する方法を示す新しいチュートリアルが追加されました。「新しい実行としての続行 (p. 60)」を参照してください。このチュートリアルでは、サービスの制限を回避するための設計パターンについて説明します。「履歴のクォータに到達しないようにする (p. 241)」を参照してください。

2018 年 4月 19 日

更新 ステートマシンに関する概念情報を追加し、状態に関するドキュメントの概要を改善しました。「状態 (p. 89)」を参照してください。

2018 年 3月 9 日

更新 AWS Step Functions 開発者ガイド は、HTML、PDF、Kindle に加えて、GitHub でも利用できます。フィードバックを送信するには、右上のGitHub アイコンをクリックします。

2018 年 3月 2 日

更新 Step Functions に関するその他のリソースを説明するトピックを追加しました。

「関連情報 (p. 310)」を参照してください。

2018 年 2月 20 日

新機能 • 新しいステートマシンを作成する場合、Lambda 関数へのアクセスを許可する IAM ロールを AWS Step Functions で作成することを承認する必要があります。

• 以下のチュートリアルを更新し、ステートマシンの作成ワークフローにおける小さな変更を反映しました。• Step Functions の開始方法 (p. 14)• Lambda を使用する Step Functions ステートマシンを作成する (p. 20)• Step Functions を使用してアクティビティステートマシンを作成す

る (p. 32)• Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)• Lambda を使用してループを反復する (p. 53)

2018 年 2月 19 日

更新 Ruby で記述されたサンプルアクティビティワーカーについて説明するトピックを追加しました。この実装は、Ruby アクティビティワーカーを直接作成するために使用するか、別の言語でアクティビティワーカーを作成するための設計パターンとして使用できます。

「Ruby のサンプルアクティビティワーカー (p. 100)」を参照してください。

2018 年 2月 6 日

316

Page 324: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

変更 説明 変更日

更新 Lambda 関数を使用してカウントを反復する設計パターンについて説明する新しいチュートリアルを追加しました。

「Lambda を使用する Step Functions ステートマシンを作成する (p. 20)」を参照してください。

2018 年 1月 31 日

更新 IAM 権限に関するコンテンツを更新し、DescribeStateMachineForExecution およびUpdateStateMachine API を追加しました。

「管理者以外のユーザー用の詳細な IAM アクセス許可の作成 (p. 260)」を参照してください。

2018 年 1月 26 日

更新 新しく利用可能なリージョン カナダ (中部)、アジアパシフィック (シンガポール) を追加しました。

「サポートされているリージョン (p. 2)」を参照してください。

2018 年 1月 25 日

更新 チュートリアルと手順を更新し、IAM で Step Functions をロールとして選択できるようになったことを反映しました。

2018 年 1月 24 日

更新 状態間で大きいペイロードを渡さないことを推奨する新しい「ベストプラクティス」トピックを追加しました。

「大きいペイロードを渡す代わりに ARN を使用する (p. 240)」を参照してください。

2018 年 1月 23 日

更新 ステートマシンを作成するための更新されたインターフェイスに合わせて手順を修正しました。

• Step Functions の開始方法 (p. 14)• Lambda を使用する Step Functions ステートマシンを作成する (p. 20)• Step Functions を使用してアクティビティステートマシンを作成す

る (p. 32)• Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)

2018 年 1月 17 日

新機能 サンプルプロジェクトを使用して、ステートマシンとすべての関連 AWS リソースをすばやくプロビジョンできます。参照 Step Functions のサンプルプロジェクト (p. 184),

使用可能なサンプルプロジェクトには、以下が含まれます。

• ジョブステータスのポーリング (Lambda、AWS Batch) (p. 194)• タスクタイマー (Lambda、Amazon SNS) (p. 197)

Note

これらのサンプルプロジェクトおよび関連ドキュメントで、同じ機能の実装について説明したチュートリアルを置き換えました。

2018 年 1月 11 日

更新 実行のスタックの回避に関する情報を含む「ベストプラクティス」セクションを追加しました。「Step Functions のベストプラクティス (p. 240)」を参照してください。

2018 年 1月 5 日

317

Page 325: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

変更 説明 変更日

更新 再試行が料金にどのように影響を与えるかに関する注意を追加しました。

Note

再試行は状態遷移として扱われます。状態遷移が請求に与える影響の詳細については、「Step Functions 料金表」を参照してください。

2017 年 8月 12 日

更新 リソース名に関する情報を追加しました。

Note

Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatch では使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

2017 年 6月 12 日

更新 セキュリティの概要情報を改訂し、IAM アクセス許可に関するトピックを追加しました。「AWS Step Functions でのセキュリティ (p. 253)」および「管理者以外のユーザー用の詳細な IAM アクセス許可の作成 (p. 260)」を参照してください。

2017 年 11月 27 日

新機能 既存のステートマシンを更新できます。「ステートマシンを更新するには (p. 16)」を参照してください。

2017 年 11月 15 日

更新 Lambda.Unknown エラーを明確にするための注意を追加し、以下のセクションで Lambda のドキュメントへのリンクを追加しました。

• エラー名 (p. 136)• ステップ 4: Catch フィールドを使用するステートマシンを作成する (p. 39)

Note

Lambda で処理されないエラーは、エラー出力で Lambda.Unknownと表示されます。このようなエラーには、メモリ不足や関数タイムアウトが含まれます。これらのエラーを処理するには、Lambda.Unknown、States.ALL、またはStates.TaskFailed で一致できます。Lambda での呼び出しが最大数に達すると、Lambda.TooManyRequestsException というエラーになります。Lambda の Handled および Unhandledエラーの詳細については、AWS Lambda Developer Guideの「FunctionError」を参照してください。

2017 年 10月 17 日

更新 IAM の手順を訂正して明確にし、すべてのチュートリアル (p. 18)のスクリーンショットを更新しました。

2017 年 10月 11 日

318

Page 326: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

変更 説明 変更日

更新 • Step Functions コンソールの変更を反映するために、ステートマシンの実行結果の新しいスクリーンショットを追加しました。Lambda コンソールの変更点を反映するために、以下のチュートリアルの Lambda の手順を書き換えました。• Lambda を使用する Step Functions ステートマシンを作成する (p. 20)• ジョブステータスポーリングを作成する• タスクタイマーの作成• Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)

• 以下のセクションで、ステートマシンの作成について情報を訂正して明確にしました。• Step Functions の開始方法 (p. 14)• Step Functions を使用してアクティビティステートマシンを作成す

る (p. 32)

2017 年 10月 6 日

更新 IAM コンソールの変更点を反映するため、以下のセクションの IAM の手順を書き換えました。

• AWS Step Functions と IAM の連携 (p. 259)• Lambda を使用する Step Functions ステートマシンを作成する (p. 20)• ジョブステータスポーリングを作成する• タスクタイマーの作成• Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)• API Gateway を使用して Step Functions API を作成する (p. 49)

2017 年 10月 5 日

更新 「ステートマシンデータ (p. 117)」セクションを書き換えました。 2017 年 9月 28 日

新機能 API アクションのスロットルに関する制限 (p. 245)が、Step Functions を利用可能なすべてのリージョンで引き上げられました。

2017 年 9月 18 日

更新 • すべてのチュートリアルで新しい実行の開始に関する情報を訂正し明確にしました。

• 「アカウントに関連するクォータ (p. 249)」セクションの情報を訂正し明確にしました。

2017 年 9月 14 日

更新 「Step Functions のテンプレート (p. 180)」セクションの情報を訂正し明確にしました。

2017 年 9月 1 日

更新 Lambda コンソールの変更を反映して、以下のチュートリアルを書き換えました。

• Lambda を使用する Step Functions ステートマシンを作成する (p. 20)• Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)• ジョブステータスポーリングを作成する

2017 年 8月 28 日

新機能 Step Functions は 欧州 (ロンドン) で利用できます。 2017 年 8月 23 日

新機能 ステートマシンのビジュアルワークフローでは、グラフのズームイン、ズームアウト、および中央揃えができます。

2017 年 8月 21 日

319

Page 327: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

変更 説明 変更日

Important

実行では、その名前を 90 日間、別の実行で使用できなくなりました。

複数の StartExecution の呼び出しを同じ名前で行うと、新しい実行は開始されず、以下のルールが適用されます。

Execution 状態入力の型

オープン クローズ

同一 Success ExecutionAlreadyExists

異なる ExecutionAlreadyExistsExecutionAlreadyExists

新機能

詳細については、AWS Step Functions API リファレンスのStartExecution API アクションの name リクエストパラメータを参照してください。

2017 年 8月 18 日

更新 ステートマシンの ARN を「API Gateway を使用して Step Functions API を作成する (p. 49)」チュートリアルに渡す代替手段に関する情報を追加しました。

2017 年 8月 17 日

更新 新しい「ジョブステータスポーリングの作成」チュートリアルを追加しました。

2017 年 8月 10 日

新機能 • Step Functions は ExecutionThrottled CloudWatch メトリクスを発行します。詳細については、「CloudWatch を使用して Step Functions をモニタリングする (p. 289)」を参照してください。

• 「状態のスロットリングに関連するクォータ (p. 246)」セクションを追加しました。

2017 年 8月 3 日

更新 「ステップ 1: API Gateway 用の IAM ロールを作成する (p. 49)」セクションの手順が更新されました。

2017 年 7月 18 日

更新 「Choice (p. 106)」セクションの情報を訂正し明確にしました。 2017 年 6月 23 日

更新 以下のチュートリアルに、他の AWS アカウントのリソースの使用に関する情報を追加しました。

• Lambda を使用する Step Functions ステートマシンを作成する (p. 20)• AWS CloudFormation を使用してStep Functions 用 Lambda ステートマシ

ンを作成する (p. 24)• Step Functions を使用してアクティビティステートマシンを作成す

る (p. 32)• Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)

2017 年 6月 22 日

更新 以下のセクションの情報を訂正し明確にしました。

• Step Functions の開始方法 (p. 14)• Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)• 状態 (p. 89)• Step Functions でのエラー処理 (p. 136)

2017 年 6月 21 日

320

Page 328: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

変更 説明 変更日

更新 Step Functions コンソールの更新に合わせて、すべてのチュートリアルが書き直されました。

2017 年 6月 12 日

新機能 Step Functions は アジアパシフィック (シドニー) で利用できます。 2017 年 6月 8 日

更新 「Amazon ステートメント言語 (p. 91)」セクションを再構成しました。 2017 年 6月 7 日

更新 「Step Functions を使用してアクティビティステートマシンを作成する (p. 32)」セクションの情報を訂正し明確にしました。

2017 年 6月 6 日

更新 「Retry の使用例と Catch の使用例 (p. 140)」のコード例を訂正しました。 2017 年 5月 6 日

更新 AWS ドキュメントの基準を使用してこのガイドを再構成しました。 2017 年 5月 31 日

更新 「Parallel (p. 111)」セクションの情報を訂正し明確にしました。 2017 年 5月 25 日

更新 パスセクションとフィルタセクションを「Step Functions の入出力処理 (p. 119)」セクションに統合しました。

2017 年 5月 24 日

更新 「Step Functions のテンプレート (p. 180)」セクションの情報を訂正し明確にしました。

2017 年 5月 16 日

更新 「CloudWatch を使用して Step Functions をモニタリングする (p. 289)」セクションの情報を訂正し明確にしました。

2017 年 5月 15 日

更新 「Step Functions を使用してアクティビティステートマシンを作成する (p. 32)」チュートリアルの GreeterActivities.java ワーカーコードを更新しました。

2017 年 5月 9 日

更新 「AWS Step Functions とは (p. 1)」セクションに入門動画を追加しました。 2017 年 4月 19 日

更新 以下のチュートリアルの情報を訂正し明確にしました。

• Step Functions の開始方法 (p. 14)• Lambda を使用する Step Functions ステートマシンを作成する (p. 20)• Step Functions を使用してアクティビティステートマシンを作成す

る (p. 32)• Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)

2017 年 4月 19 日

更新 「Lambda を使用する Step Functions ステートマシンを作成する (p. 20)」および「Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)」チュートリアルに Lambda テンプレートに関する情報を追加しました。

2017 年 4月 6 日

更新 「Maximum input or result data size」の制限を「Maximum input or resultdata size for a task, state, or execution」に変更しました (32,768 文字)。詳細については、「タスクの実行に関連するクォータ (p. 245)」を参照してください。

2017 年 3月 31 日

321

Page 329: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

変更 説明 変更日

新機能 • Step Functions は、Step Functions を Amazon CloudWatch Events のターゲットとして設定することで、ステートマシンの実行をサポートします。

• 「CloudWatch イベント を使用して定期的にステートマシンの実行を開始する (p. 43)」チュートリアルを追加しました。

2017 年 3月 21 日

新機能 • Step Functions で、優先エラー処理メソッドとして Lambda 関数エラー処理を使用できます。

• 「Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)」チュートリアルおよび「Step Functions でのエラー処理 (p. 136)」セクションを更新しました。

2017 年 3月 16 日

新機能 Step Functions は 欧州 (フランクフルト) で利用できます。 2017 年 3月 7 日

更新 目次のトピックを再編成し、次のチュートリアルを更新しました。

• Step Functions の開始方法 (p. 14)• Lambda を使用する Step Functions ステートマシンを作成する (p. 20)• Step Functions を使用してアクティビティステートマシンを作成す

る (p. 32)• Step Functions ステートマシンを使用してエラー条件を処理する (p. 37)

2017 年 2月 23 日

新機能 • Step Functions コンソールの [State Machines] ページに [Copy to New] ボタンおよび [Delete] ボタンが含まれます。

• コンソールでの変更点に合わせてスクリーンショットを更新しました。

2017 年 2月 23 日

新機能 • Step Functions で API Gateway を使用して API の作成がサポートされます。

• 「API Gateway を使用して Step Functions API を作成する (p. 49)」チュートリアルを追加しました。

2017 年 2月 14 日

新機能 • Step Functions で AWS CloudFormation との統合がサポートされます。• 「AWS CloudFormation を使用してStep Functions 用 Lambda ステートマ

シンを作成する (p. 24)」チュートリアルを追加しました。

2017 年 2月 10 日

更新 Parallel 状態に関連して ResultPath フィールドおよび OutputPathフィールドの現在の動作を明確にしました。

2017 年 2月 6 日

更新 • チュートリアルにおけるステートマシンの命名の制約を明確にしました。• コード例をいくつか修正しました。

2017 年 1月 5 日

更新 最新のプログラミングモデルを使用するように Lambda 関数の例を更新しました。

2016 年 12月 9 日

新機能 Step Functions の初回リリース。 2016 年 12月 1 日

322

Page 330: AWS Step Functions - 開発者ガイド...AWS Step Functions 開発者ガイド Step Functions の概要 AWS Step Functions とは AWS Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービス

AWS Step Functions 開発者ガイド

AWS の用語集最新の AWS の用語については、『AWS General Reference』の「AWS の用語集」を参照してください。

323