はじめに
【AWS Lambda関数作成】Step Functionsの設定方法に関しての備忘録です。
初心者です😅
間違えてる部分が多々あると思います。
もし見つけた場合、ツッコミいただけると助かります🙇
🦁結論🦁
StepFunctionsを使う目的
「APIGatewayへのリクエストが30秒でタイムアウト」してしまうことを回避するためです。
Step Functionsはあらゆるデータのやりとりを一つのフローとして保存することができるサービスです。
手順
- StepFunctionsを開いて作成を開始する。
- 「自分で作成する」を選択。
- 「AWS Lambda Invoke」をドラックアンドドロップする
- コードを修正する。
- 作成する
※詳細は下記に掲載してます。
押さえておくべき点
- Step functionsは様々なデータのやり取りを一つのフローとして保存できるサービス。
- Lambda Invokeは Lambda関数をスタートさせレスポンスその処理を非同期処理させることができるので他の処理を進めることができる。
利用シーン
- AWSでのAPI Getewayを使う時(30秒以内に終わる処理を除く)
注意点
- データを渡される時の定義は「Step functions」独特の書き方をする。($を使って記述する)
前提🙊
AWSのアカウント作成が終わってる。
AWS Lambdaの環境構築が終わってる。
AWS Lambdaのコードがテスト含め完了してる。
ロールの作成が完了してる。
手順詳細
- StepFunctionsを開いて作成を開始する。
- 「自分で作成する」を選択。
- 「AWS Lambda Invoke」をドラックアンドドロップする
- コードを修正する。
- 作成する
これらの詳細を、下記にて示していきます。
StepFunctionsを開いて作成を開始する。
- AWSの最初の画面で左上の検索バーにて「StepFunctions」と入力して検索。
- 「StepFunctions」を選択。
「自分で作成する」を選択。
- 初期の画面で3つの中から選択肢の中から「自分で作成する」を選択する。
「AWS Lambda Invoke」をドラックアンドドロップする
ステートマシン名とロールとログの設定。
画面中央にある「設定」をクリックしてステートマシン名を編集する(今回は「MyStateMachine-test」とする)
ログ記録でログレベルを「ALL」を選択して、そのほかはデフォルトのままでOK。
「作成する」をクリック。
コードを修正する。
デザインの横にある「{} Code」の部分をクリックして下記のコードを修正して貼り付ける。
{
"Comment": "ステートマシンのテスト",
"StartAt": "Lambda Invoke",
"States": {
"Lambda Invoke": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"Payload": {
"local_jan_code.$": "$.local_jan_code"
},
"FunctionName": “<Lambda関数のARNをここに貼り付ける>”
},
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException",
"Lambda.TooManyRequestsException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
}
],
"End": true
}
}
}
上記を入力する。
作成する
確認のうえ、右上の「作成する」をクリック。
完了。
コード部分の解析① Lambda Invokeの定義
"Comment": "ステートマシンのテスト",
"StartAt": "Lambda Invoke",
"States": {
"Lambda Invoke": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Lambda Invoke”は基本、上記になるの設定になる
各行のまとめ
Type": "Task"
Step Functionsのワークフロー内で特定の作業(タスク)を表していることを意味してる。
「Lambda Invoke」は「Task」になる。
"Resource": "arn:aws:states:::lambda:invoke"
Step Functionsで特定のAWSサービス(この場合はLambda)のアクションを実行するための識別子。Lambda関数を呼び出すアクションそのもの。
"OutputPath": "$.Payload"
Lambda関数によって出力されてるものを特定の場所(Payload)に保管して、それ自体を次のステップに出力してる
※ここから先はStepFunctionsの設定などが完了してから実施。
コード部分の解析② Lambda関数に渡すデータの定義
"Parameters": {
"Payload": {
"local_jan_code.$": "$.local_jan_code"
},
"FunctionName": “<Lambda関数のARNをここに貼り付ける>”
},
各行のまとめ
"Payload":
ここで定義したものが関数に渡されるものデータを定義してる。
"$.local_jan_code"→ローカルからきたデータ
"local_jan_code.$"→ key → $が後に入力(追記してる)
"$.local_jan_code"→ value → $は前に入力(リクエストデータ値)
例えば既存のjsonで
keyと valueがあった場合は
"$.local_jan_code":"$.local_jan_code"になる
今回のデータは valueのみだったので
"local_jan_code.$" : "$.local_jan_code"
になっている。
"FunctionName":
ここにはLambda関数のARNをここに貼り付けて実際にやり取りする関数のアドレスを示す。
コード部分の解析③ 例外処理の定義
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException",
"Lambda.TooManyRequestsException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
}
],
"End": true
Retryは例外処理のこと。
この例外処理があった時の処理内容が記載されてる。
各行のまとめ
"ErrorEquals": []
[]内のエラーを、通知してくれる。
Lambda.ServiceException
Lambdaのコンピューターに何か問題がある時。例えば、Lambdaのシステムが壊れているとき。
Lambda.AWSLambdaException
Lambdaが内部でエラーを起こした時。例えば、プログラムのコードが間違っているとき。
Lambda.SdkClientException
Lambdaを使おうとした人のコンピューターに問題がある時。例えば、インターネットが繋がっていないとき。
Lambda.TooManyRequestsException
たくさんの人が同時にLambdaを使おうとして、混雑している時。
参考にしたサイト📗
AWS Lambda関数作成 セクション リンク