Step FunctionsでLambdaを連続実行してみる
AWS StepFunctionsがどんなサービスか分かったので使ってみる!
StepFunctionsで実現することはこちら
おくすり登録lambda関数(引数に薬の名前・服用回数を受け取り、薬の名前と服用タイミングを返す)
リマインダーlambda関数(引数に開始時間・イベント名を受け取り、SES送信)
これだけだったら普通にlambdaの連続実行でいいんですけどね^^;
なんちゃってマイクロサービスでリマインダー機能は独立させておいて今後の(あるか分からない)機能拡張により
レッスン予定登録、資格勉強タスク登録…など他の機能からも汎用的に実行できる構成にしたということで!!
Lambda関数を作成
おくすり登録関数
引数はこんな感じ
{ "name": "ステロイド1/6錠", "timesDaily": "2" }
exports.handler = async(event) => { let start; if (event.timesDaily == 1) { start = "15:00"; } else if (event.timesDaily == 2) { start = "10:00, 17:00" } else if (event.timesDaily == 3) { start = "10:00, 15:00, 20:00" } else { return } const response = { statusCode: 200, start: start, title: "[おくすり]" + event.name }; return response; };
リマインダー関数
// Load the AWS SDK for Node.js var AWS = require('aws-sdk'); // Set the region AWS.config.update({ region: 'ap-northeast-1' }); // Create sendEmail params var params = { Destination: { /* required */ CcAddresses: [], ToAddresses: [ 'メールアドレス', ] }, Message: { /* required */ Body: { /* required */ Html: { Charset: "UTF-8", Data: "HTML_FORMAT_BODY" }, Text: { Charset: "UTF-8", Data: "TEXT_FORMAT_BODY" } }, Subject: { Charset: 'UTF-8', Data: 'my reminder' } }, Source: 'メールアドレス', /* required */ ReplyToAddresses: [], }; // Handle promise's fulfilled/rejected states exports.handler = function(event, context, callback) { params.Message.Subject.Data = "[reminder]" + event.start + event.title; params.Message.Body.Html.Data = "本日のスケジュール<br>" + event.start + " : " + event.title; params.Message.Body.Text.Data = "本日のスケジュール¥n" + event.start + " : " + event.title; return new AWS.SES({ apiVersion: '2010-12-01' }).sendEmail(params).promise(); }
関数をStepFunctionsで実行
それでは作成した2つの関数をStepFunctionsから連続実行してみます!
ステートマシン(StepFunctionsで実行する処理をまとめたもの)を作成して実行すればOK
マネジメントコンソールからステートマシン作成をすると作成方法が選択できる
これまではjsonを書いて作成していたみたいだけど、このようにフロー図にドラッグ&ドロップで簡単配置★!
ステートマシンが作成できたのであとは実行するだけ って失敗してる!
because no identity-based policy allows the lambda:InvokeFunction action
いつも通り実行ロールがないエラーですね。(AWSで何か試そうとすると遭遇率100%なんだよな。。)
AWSLambdaRoleをアタッチして再度実行!今度は正常終了しました
リマインドのメールも届きました!