今回行う構成
- ローカルからAPIエンドポイントを叩く
- APIエンドポイントからLambdaを叩く
- Lambdaからstep functionを叩く
- Step Functionで設定したLambdaが叩かれる
想定読者
- AWS公式のStep Functionを終わらせた
- チュートリアルだけじゃもの足りない
今回説明しないこと
- Step Functionの説明
- Lambdaの説明
- API Gatewayの説明
それぞれ素晴らしい記事があるので書きを参考にしてみてください
Step Function
Lambda
API Gateway
手順
- Lambda作成
- API Gateway作成
- PostmanからAPIコールしてみる
前提としてAWS公式のStep Functionのチュートリアルが終わっている方向けなのでStep Functionはできているという想定で行います
注意
AWS公式のチュートリアルのLambdaソースコードを下記のように書き換えます
def lambda_handler(event, context):
statuscode = event["statuscode"]
print(statuscode)
if statuscode == "429" or statuscode == 429:
raise TooManyRequestsException('429 Too Many Requests')
elif statuscode == "503" or statuscode == 503:
raise ServerUnavailableException('503 Server Unavailable')
elif statuscode == "200" or statuscode == 200:
return '200 OK'
else:
raise UnknownException('Unknown error')
LambdaからのstatuscodeがStringで渡してもintで渡ってきているみたいなので
※こちらんの事象わかる方教えていただきたいです
Lambda作成
まずは適当な名前でLambdaを作成してランタイムはpython3.6を使います
ソースコード
import boto3
client = boto3.client('stepfunctions')
def lambda_handler(event, context):
status_code =str(event["statuscode"])
res = client.start_execution(
**{
'input': '{"statuscode": %s}'%status_code,
'stateMachineArn':"{step functionのarn}"
}
)
そしたら下記のようなjsonでテストを行います
{
"statuscode": "200"
}
Step Functionを見ると成功になっているのが見れます
API Gateway作成
API Gatewayにアクセスして
API名は任意の名前で作成します
そしたらリソース名に任意の名前を入力して CORSを有効にして作成します
POSTメソッドを追加して先ほど作成したLambda関数を選びます
POSTメソッドを選択するとURLが発行されているのでそちらをコピーします
PostmanからAPIコールしてみる
先程コピーしたURLをpostmanに貼り付けてPOSTでリクエストを送ってみます
Request Bodyの入力を忘れないでください
Step Function側からのレスポンスをLambda経由で受け取れていないのでnullが帰ってきますが、step functionでは処理が走っていると思います
##終わりに
Step Functionのチュートリアル後なにかやりたいと思いAPI Gatewayの連携をしましたが、
Step Functionの使い所は複数のLambdaの処理などが適しているのかな〜という所感です。