サーバレスの勉強がてら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コンソールの左ペインから、[ステートマシン] > [ステート マシンの作成]を選択します。
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 は一意の実行名を自動的に生成します。
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