AWS IT

【ハンズオン】Lambda関数を呼び出すStepFunctionsステートマシン

サーバレスの勉強がてらStep Functionsをちゃんと触ってみました。

Lambda 関数を作成する

1. Lambdaコンソールを開くをクリックして、「関数の作成」を選択します。

2. [関数の作成]ページで、 [一から作成]を選択します。

3. [関数名]に「HelloFunction」と入力します。

4. 他のすべてのオプションはデフォルトの選択のままにして、[関数の作成]を選択します。

このような画面になっているはずです(※ランタイムは後進されている場合があります。実行ロール名はサフィックスが異なります)。

5. Lambda 関数の次のコードを HelloFunction ページのコード ソース セクションにコピーします。

export const handler = async(event, context, callback) => {
    callback(null, "Hello from " + event.who + "!");
};

6. 「デプロイ」を選択します。

Lambda 関数をテストする

1. [テスト]を選択します。

2. [イベント名]に「HelloEvent」と入力します。

3. イベント JSONデータを次のものに置き換えます。

{
    "who": "AWS Step Functions"
}

4. [保存]を選択します。

5. [テスト]を選択します。

6. テスト結果を確認するには、[実行結果]で[詳細]を展開します。

"Hello from AWS Step Functions!" と表示されているはずです。

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

Step Functions コンソールを使用して、1章で作成した Lambda 関数を呼び出すステート マシンを作成します。

1. Step Functionsコンソールの左ペインから、[ステートマシン] > [ステート マシンの作成]を選択します。

重要

Step Functions のリージョンと Lambda 関数のリージョンが一致していることを確認してください。

2. [作成方法を選択]ページで、[ワークフローを視覚的に設計]を選択します。

3. [タイプ]は、デフォルトの選択 ( [標準] ) のままにします。

このような画面になっているはずです。

4. [次へ]を選択します。これにより、ワークフロー スタジオが開きます。

このような画面になっているはずです。

5. 左側のStates browserから、「アクション」パネルを選択します。
 a. AWS Lambda Invoke API を「最初の状態をここにドラッグ」というラベルの付いた空の状態にドラッグアンドドロップします。

6. 右側のInspectorパネルで、Lambda 関数を設定します。
 a. [API パラメーター]セクションの[関数名]ドロップダウン リストで、前に作成した Lambda 関数を選択します。
 b. [ペイロード]ドロップダウンリストでデフォルトの選択を保持します。

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

8. [生成されたコードを確認]ページで、ステート マシンの Amazon States Language (ASL) 定義を確認します。この定義は、[アクションインスペクター]パネルでの選択に基づいて自動的に生成されます。

このような画面になっているはずです。

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

10. ステート マシンの名前を入力します (例: LambdaStateMachine) 。

11. [アクセス許可]セクションで、 [新しいロールの作成]を選択します。

12. [ステート マシンの作成]を選択します。

実行を開始する

ステート マシンを作成したら、実行を開始します。

1. 作成したステートマシンのページで、[実行を開始]を選択します。
 [実行を開始]ダイアログボックスが表示されます。

2. オプションで実行を識別するために、「名前」ボックスで名前を指定できます。デフォルトでは、Step Functions は一意の実行名を自動的に生成します。

注記

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

3. 実行入力領域で、サンプルデータを次のJSONに置き換えます。
 "who"は、Lambda 関数が挨拶する人の名前を取得するために使用するキー名です。"who"でない場合は、"Hello from undefined!" が返ってきます。

{
    "who" : "AWS Step Functions"
}

4. [実行の開始]を選択します。
 ステート マシンの新しい実行が開始され、実行中の実行を示す新しいページが表示されます。

5. [Step Details]の[出力]タブで実行結果を表示します。

Developer Guideのハンズオンはここで終了です。

ここからはさらに個人学習をしていきます。

さらに個人学習

Lambda 関数の実行だけやと、味気ないんでSNS 経由でLambda の実行結果をメールに飛ばすようにしてみます。

SNSのトピック、サブスクリプションは作成されているものとして進めます。

IAMロールの編集

1. IAM コンソールに移動します。

2. ロールからStep Functions の実行ロールを選択します。

3. [許可を追加] > ポリシーをアタッチ から AmazonSNSFullAccess をアタッチします。

Step Functions ステートマシンの編集

1. 先ほど作成したステートマシンのページから[編集]を選択します。

2. [Workflow Studio]を選択します。

3. States browser からPublish をキャンバスにドラッグアンドドロップします。

4. [適用して終了]を選択します。

5. 実行ロールが先ほど AmazonSNSFullAccess をアタッチしたロールであることを確認します。

6. ページ右上の[保存]を選択します。

7. [実行を開始]を選択します。
 今回は、実行入力のJSONを置き換えず実行してみます。

8. Lambda Invoke も SNS Publish も成功しました。Lambda Invoke の出力結果が想定通り SNS トピックに登録したメールアドレスに送信されていることを確認できました。

メモ

  • Step Functions を使用するとワークフローの可視化、マイクロサービス化をしやすい。
  • Workflow Studio で直感的操作ができるのでフローを構成しやすい。
  • フローを構成するとPNGなどの画像出力もできるので、基本設計書/詳細設計書などの書類にも使用できそう。
  • ステートマシンのどのアクションが成功/失敗したか状態がわかるので、障害時の切り分けや修正箇所の特定もしやすい。

参考

https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-lambda-state-machine.html

Interface overview - AWS Step Functions (amazon.com)

-AWS, IT
-, , ,