AWS Lambda のトリガーに CloudWatch の定期実行イベントを設定することで、cron のように Lambda 関数を定期実行できます。利用例として、ここでは SQS にメッセージを一つだけ登録する処理を Lambda 関数で定期実行してみます。複数のインスタンスで動作する何らかのアプリケーションがバッチ処理を行う際、SQS からメッセージを取得できたインスタンス以外では処理をスキップするように実装することで、重複実行を回避しつつバッチ処理アプリケーションを冗長化できます。
Lambda 関数がメッセージを登録する SQS の作成
Create New Queue をクリックします。

Queue Name を設定します。SQS におけるメッセージは、取得された後 Default Visibility Timeout の間だけ他のクライアントから参照できなくなります。その間にメッセージを取得したクライアントは SQS からメッセージを削除する必要があります。

Lambda 関数が利用する IAM ロールの作成
Create Role をクリックします。

Lambda 権限が付与されたロールを作成します。

AmazonSQSFullAccess を追加します。

ロール名を設定します。

Lambda 関数の登録
Create a function をクリックします。

Blueprints は利用せずに Author from scratch をクリックします。

Lambda 関数名および先程作成した IAM ロールを設定します。

関数を以下のように編集して Save します。
'use strict';
const AWS = require('aws-sdk');
const sqs = new AWS.SQS();
const QUEUE_URL = 'https://sqs.ap-northeast-1.amazonaws.com/123412341234/my-queue-20171007';
exports.handler = function(event, context, callback) {
var params = {
MessageBody: 'test test',
QueueUrl: QUEUE_URL
};
// SQS にメッセージを送信します。
// http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SQS.html#sendMessage-property
sqs.sendMessage(params, function(err, data) {
if (err) {
console.log(err);
}
else {
console.log(data);
}
});
};
Test を実行すると SQS にメッセージが一つ追加されます。

CloudWatch イベントの登録
Create rule をクリックします。

一分毎に Lambda 関数を実行するように設定します。ここで直接 SQS にメッセージを追加することもできますが、Lambda 関数を介することで SQS が空でない場合など処理の分岐が柔軟に行えます。

サーバーレスとDevOpsに注力中。AWSを使った効率的なインフラ構築が得意です。
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。


