PythonとLambdaを使用して遅延実行を行う方法について説明します。特に、AWSのStepFunctionsのWaitステートを使用したLambdaの遅延実行について詳しく見ていきましょう。
StepFunctionsのWaitステートとは
StepFunctionsのWaitステートは、名前の通り、待機状態を作るステートです。実行がWaitステートの時、料金は一切かかりません。待機時間は、最大で約1年待機することができます。
Waitステートを使用したLambdaの遅延実行
以下に、待機時間をパラメータとして受け取り、待機後にLambdaを実行するステートマシンの例を示します。
{
"StartAt": "Wait",
"States": {
"Wait": {
"Type": "Wait",
"SecondsPath": "$.wait_secs",
"Next": "MainTask"
},
"MainTask": {
"Type": "Task",
"Resource": "arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxxx:function:main_task",
"End": true
}
}
}
この例では、入力パラメータのwait_secs
秒を待機し、main_task
関数を実行します。
ステートマシンの起動
ステートマシンを起動するには、ステートマシンのARNと初期入力値を与えて、startExecution
を実行します。
const AWS = require('aws-sdk');
const StepFunctions = new AWS.StepFunctions();
const input = {
wait_secs: 60 * 20, // 20 minutes
other_param: 'Hello World'
};
const params = {
stateMachineArn: `arn:aws:states:ap-northeast-1:xxxxxxxxxxxxx:stateMachine:main_task_after_wait`,
input: JSON.stringify(input)
};
await StepFunctions.startExecution(params).promise();
以上がPythonとLambdaを使用した遅延実行の一例です。このように、AWSのStepFunctionsを使用することで、一定時間後に処理を実行するということが非常にシンプルに、低コストで実現できます。