翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Lambda を使用してループを反復する
このチュートリアルでは、ステートマシンと AWS Lambda 関数を使用してループを一定回数反復する設計パターンを実装します。
必要に応じて、この設計パターンを随時使用し、ステートマシンのループ数を追跡できます。この実装を使用すると、大規模なタスクや時間がかかる実行を小さいチャンクに分割したり、特定のイベント数の後で実行を終了させたりできます。同様の実装を使用して、時間がかかる実行を定期的に終了して再起動することで、AWS Step Functions や AWS Lambda などの AWS のサービスでサービスクォータ超過を防止できます。
開始する前に、Step Functions ステートを作成マシンLambda の使用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] (関数の作成) を選択します。 -
[Create function] ページで、[Author from scratch] を選択します。
-
[Basic information] (ベーシック情報) セクションで、以下のように Lambda 関数を設定します。
-
[Function name] (関数名) に
Iterator
と入力します。 -
を使用する場合ランタイムで、Node.js 14.x。
-
Eclipseデフォルトの実行ロールの変更で、基本的な Lambda アクセス権限で新しいロールを作成する。
-
[Create function] を選択します。
-
Lambda 関数が作成されたら、ページの右上隅に表示されている関数の Amazon リソースネーム (ARN) をコピーします。ARN をコピーするには、
。ARN の例を次に示します。
arn:aws:lambda:us-east-1:123456789012:function:Iterator
-
-
Lambda 関数の次のコードをコードソースの セクション
イテレータ
ページで.exports.handler = function iterator (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
です。 -
[Deploy] (デプロイ) をクリックします。
ステップ 2: Lambda 関数をテストする
数値を使用して Lambda 関数を実行し、関数のオペレーションを確認します。Lambda 関数の反復を表す入力値を指定し、入力値別にどんな出力となったか確認できます。
Lambda 関数をテストします。
-
テストを選択します。
-
左テストイベントの構成ダイアログボックスで、次のように入力します。
TestIterator
のイベント名ボックスに移動するとそのように表示されます。 -
データ例を以下に置き換えます。
{ "Comment": "Test my Iterator function", "iterator": { "count": 10, "index": 5, "step": 1 } }
これらの値は、反復でステートマシンから返される値を表します。Lambda 関数はインデックスを増分し、
continue
をtrue
として返します。インデックスがcount
以上になると、continue
をfalse
として返します。このテストでは、インデックスは既に5
に増分されています。結果では、index
が6
に増分され、continue
がtrue
に設定されます。 -
[Create] (作成) を選択します。
-
リポジトリの []
イテレータ
[] ページで [] を選択しますTestLambda 関数をテストします。テストの結果は、実行結果タブ。
-
[実行結果タブをクリックして出力を確認します。
{ "index": 6, "step": 1, "count": 10, "continue": true }
注記 このテストで
index
を9
に設定した場合、index
が10
に増分され、continue
がfalse
になります。
ステップ 3: ステートマシンの作成
を使用するStep Functions コンソール
-
ConfigureCount
–count
、index
、step
のデフォルト値を設定します。 -
Iterator
– 前に作成した Lambda 関数を参照し、ConfigureCount
で設定した値を渡します。 -
IsCountReached
–Iterator
Lambda 関数から返される ブール値に応じて、作業例を再実行するか、Done
に移行するかに分岐する選択状態。 -
ExampleWork
– 実行で達成したい作業のスタブ。この例ではPass
状態です。実際の実装では、これはTask
状態になります。 -
Done
– 実行の最終状態。
-
Step Functions コンソール
を開き、[Create a state machine] (ステートマシンの作成) を選択します。 重要 ステートマシンが、前に作成した Lambda 関数と同じ AWS アカウントおよびリージョンにあることを確認します。
-
リポジトリの []オーサリング方法の選択[] ページで [] を選択しますワークフローをコードに記述する。
-
を使用する場合タイプの場合は、デフォルトの選択を保持します。つまり、Standard。
-
左定義[] ペインで、次のコードを貼り付けますが、の ARN を置き換えます。前に作成した Lambda 関数の
Resource
フィールド。{ "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 } } }必ず、の ARN を更新してください。
Iterator
上の状態、それが参照するように前に作成した Lambda 関数。 -
[Visual Workflow] (ビジュアルワークフロー) ペインのグラフを使用して、Amazon ステートメント言語コードでステートマシンが正しく記述されていることをチェックします。
次の図は、上記のステートマシンコードで表現されたロジックを示しています。
Amazon ステートメント言語の詳細については、[State Machine Structure] (ステートマシンの構造) を参照してください。
グラフが表示されない場合は、[Visual Workflow] (ビジュアルワークフロー) ペインの
を選択します。
-
[Next] (次へ) を選択します。
-
「」と入力します。名前[Name you state machine (ステートマシン
。IterateCount
注記 ステートマシン、実行、アクティビティの名前は 1~80 文字で、アカウントと AWS リージョンが一意である必要があり、以下のものを含めることはできません。
-
空白
-
ワイルドカード文字 (
? *
) -
角かっこ (
< > { } [ ]
) -
特殊文字 (
: ; , \ | ^ ~ $ # % & ` "
) -
制御文字 (
\\u0000
-\\u001f
または\\u007f
-\\u009f
)
Step Functions では、非 ASCII 文字を含むステートマシン、実行、およびアクティビティ名を作成できます。これらの非 ASCII 名は Amazon では機能しませんCloudWatch。確実に追跡できるようCloudWatchメトリックスの場合は、ASCII 文字のみを使用する名前を選択します。
-
-
Eclipseアクセス許可で、新しいロールの作成。
-
[Create state machine] (ステートマシンの作成) をクリックします。
ステップ 4: 新しい実行のスタート
ステートマシンを作成した後、実行をスタートできます。
-
リポジトリの []IterateCount[] ページで [] を選択します実行開始。
-実行開始[] ダイアログボックスが表示されます。
-
(オプション) 実行を識別するために、の実行名を名前ボックスに移動するとそのように表示されます。デフォルトでは、Step Functions は自動的に一意の実行名を生成します。
注記 Step Functions では、非 ASCII 文字を含むステートマシン、実行、およびアクティビティ名を作成できます。これらの非 ASCII 名は Amazon では機能しませんCloudWatch。確実に追跡できるようCloudWatchメトリックスの場合は、ASCII 文字のみを使用する名前を選択します。
-
[Start Execution] (実行のスタート) を選択します。
ステートマシンの新しい実行がスタートされ、進行中の実行が表示されます。
実行は、Lambda 関数を使用してカウントを追跡しながら段階的に増分されます。反復ごとに、ステートマシンの
ExampleWork
状態で参照されている作業例が実行されます。 -
(オプション)の詳細タブで、実行ステータスおよびのタイムスタンプStartedそしてEnd Time (終了時刻)実行の。
カウントがステートマシンの
ConfigureCount
状態で設定した数に到達すると、実行が反復を完了して終了します。