翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions で Lambda 関数を使用してループを反復する
このチュートリアルでは、ステートマシンと を使用する設計パターンを実装します。 AWS Lambda 関数は、ループを特定の回数繰り返します。
必要に応じて、この設計パターンを随時使用し、ステートマシンのループ数を追跡できます。この実装を使用すると、大規模なタスクや時間がかかる実行を小さいチャンクに分割したり、特定のイベント数の後で実行を終了させたりできます。同様の実装を使用して、 のサービスクォータを超えないように、長時間実行される実行を定期的に終了および再開できます。 AWS Step Functions, AWS Lambda、またはその他の AWS サービス。
開始する前に Lambda を使用する Step Functions ステートマシン状態の作成 チュートリアルを参照して、Lambda と Step Functions の使用方法に慣れておいてください。
ステップ 1: Lambda 関数を作成してカウントを反復する
Lambda 関数を使用することで、ステートマシンでのループの反復回数を追跡できます。次の Lambda 関数は、count
、index
、step
の入力値を受け取ります。次に、更新された index
と、continue
というブール値を持つこれらの値を返します。index
が count
未満の場合、Lambda 関数は continue
を true
に設定します。
その後、ステートマシンは、continue
が true
の場合に Choice
状態を実装し、false
の場合に終了します。
Lambda 関数を作成するには
-
[Lambda console]
(Lambda コンソール) にサインインし、[Create function] (関数の作成) を選択します。 -
[関数の作成] ページで、[一から作成] を選択します。
-
[ベーシック情報] セクションで、以下のように Lambda 関数を設定します。
-
[Function name] (関数名) に
Iterator
と入力します。 -
[ランタイム] で、[Node.js] を選択します。
-
[デフォルトの実行ロールの変更] で、[基本的な Lambda アクセス許可で新しいロールを作成] を選択します。
-
[Create function (関数の作成)] を選択します。
-
-
Lambda 関数の次のコードをコードソース にコピーします。
export const handler = function (event, context, callback) { let index = event.iterator.index let step = event.iterator.step let count = event.iterator.count index = index + step callback(null, { index, step, count, continue: index < count }) }
このコードは、
count
、index
、step
の入力値を受け入れています。index
をstep
の値増分し、それらの値とブール値continue
を返します。index
がcount
未満の場合、continue
の値はtrue
です。 -
[デプロイ] を選択します。
ステップ 2: Lambda 関数をテストする
数値を使用して Lambda 関数を実行し、関数のオペレーションを確認します。反復を模倣した Lambda 関数の入力値を指定できます。
Lambda 関数をテストします。
-
[テスト] を選択します。
-
[テストイベントの設定] ダイアログボックスで、[イベント名] ボックスに
TestIterator
を入力します。 -
データ例を以下に置き換えます。
{ "Comment": "Test my Iterator function", "iterator": { "count": 10, "index": 5, "step": 1 } }
これらの値は、反復でステートマシンから返される値を表します。Lambda 関数はインデックスをインクリメントし、インデックスが より小さい
continue
場合にtrue
を返しますcount
。このテストでは、インデックスは既に5
に増分されています。テストはindex
に増分6
され、continue
に設定されますtrue
。 -
[Create] (作成) を選択します。
-
テスト を選択して Lambda 関数をテストします。
テストの結果は [実行結果] タブに表示されます。
-
実行結果を表示するには、[出力] タブを選択します。
{ "index": 6, "step": 1, "count": 10, "continue": true }
注記
index
を に設定9
して再度テストすると、 は にindex
増加し10
、 はcontinue
になりますfalse
。
ステップ 3: ステートマシンを作成する
Lambda コンソールを離れる前に...
Lambda 関数 をコピーしますARN。メモに貼り付けます。これは次のステップで必要になります。
次に、次の状態を持つステートマシンを作成します。
-
ConfigureCount
–count
、、index
および のデフォルト値を設定しますstep
。 -
Iterator
– 前に作成した Lambda 関数を参照し、 で設定された値を渡しますConfigureCount
。 -
IsCountReached
–Iterator
関数から返された値に基づいて、ループを続行するか、Done
状態に移行する選択状態。 -
ExampleWork
– 実行する必要がある作業のスタブ。この例では、ワークフローにはPass
状態がありますが、実際のソリューションでは、 を使用する可能性がありますTask
。 -
Done
- ワークフローの終了状態。
コンソールでステートマシンを作成するには
-
Step Functions コンソール
を開き、[Create a state machine] (ステートマシンの作成) を選択します。 重要
ステートマシンは同じ にある必要があります AWS Lambda 関数としての アカウントとリージョン。
-
空白テンプレートを選択します。
-
コードペインで、ステートマシンJSONを定義する以下を貼り付けます。
Amazon ステートメント言語の詳細については、[State Machine Structure] (ステートマシンの構造) を参照してください。
{ "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" }, "Done": { "Type": "Pass", "End": true } } } -
Iterator Resource
フィールドを、前に作成したIterator
Lambda 関数ARNの に置き換えます。 -
Config を選択し、 などのステートマシンの名前を入力します
。IterateCount
注記
ステートマシン、実行、およびアクティビティタスク名は 80 文字以下にする必要があります。これらの名前は、アカウントと に対して一意である必要があります。 AWS リージョン、 および には、次のいずれかを含めないでください。
-
空白
-
ワイルドカード文字 (
? *
) -
角かっこ (
< > { } [ ]
) -
特殊文字 (
" # % \ ^ | ~ ` $ & , ; : /
) -
制御文字 (
\\u0000
-\\u001f
または\\u007f
-\\u009f
)
Step Functions は、 以外のASCII文字を含むステートマシン、実行、アクティビティ、およびラベルの名前を受け入れます。このような文字は Amazon では機能しないため CloudWatch、 でメトリクスを追跡できるようにASCII、文字のみを使用することをお勧めします CloudWatch。
-
-
タイプ の場合、標準 のデフォルト値を受け入れます。アクセス許可 で、新しいロールの作成 を選択します。
-
作成を選択し、ロールの作成を確認します。
ステップ 4: 新しい実行をスタートする
ステートマシンを作成した後、実行をスタートできます。
-
IterateCount ページで、実行の開始 を選択します。
-
(オプション) 生成されたデフォルトを上書きするカスタム実行名を入力します。
非ASCII名前とログ記録
Step Functions は、 以外のASCII文字を含むステートマシン、実行、アクティビティ、およびラベルの名前を受け入れます。このような文字は Amazon では機能しないため CloudWatch、 でメトリクスを追跡できるようにASCII、文字のみを使用することをお勧めします CloudWatch。
-
[実行のスタート] を選択します。
ステートマシンの新しい実行がスタートされ、進行中の実行が表示されます。
実行は、Lambda 関数を使用してカウントを追跡しながら段階的に増分されます。反復ごとに、ステートマシンの
ExampleWork
状態で参照されている作業例が実行されます。カウントがステートマシンの
ConfigureCount
状態で設定した数に到達すると、実行が反復を完了して終了します。