概要
AWS Lambdaを使って月~金の19:00にSlackへ退勤時刻を通知し、打刻を促すメッセージを投稿する。
AWS Lambdaでの定期実行
チュートリアル: スケジュールされたイベントでの AWS Lambda の使用を参考にすると実現できそうなので、このチュートリアルを参考に進めます。
Lambda関数を作成
- Select blueprintで「lambda-canary」を選択します。
-
Configure triggersの各項目を記入します。
- Schedule expressionの記入方法についてはこちらを参考に指定。
-
Lambda function handler and roleでは、
Role*
、Policy templates
などはチュートリアルに沿って入力していきます。
- Nextをクリックし、Reviewで設定を確認後「Create function」をクリックしLambda関数を作成します。
Lambda 関数をテスト
- 作成した関数を選択し、 Testを選択します。
- ダイアログが表示されるので、 Sample event templateから Scheduled Eventを選択し、 Save and testをクリックします。
- Execution resultセクションで成否を確認します。
Slackへ通知するコードを書く
Environment variablesにSlackのAPI tokenをSLACK_API_TOKEN
として登録し、process.env.SLACK_API_TOKEN
で参照します。
var https = require('https');
var qs = require('querystring');
exports.handler = (event, context, callback) => {
var query = qs.stringify({
'token': process.env.SLACK_API_TOKEN,
'channel': "CHANNEL_NAME",
'text': "@horie 退勤しましょう!\nhttps://hoge.html",
'mrkdwn': true,
'link_names': 1
});
var options = {
host: 'slack.com',
port: '443',
path: '/api/chat.postMessage?' + query,
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=utf-8"'
}
};
var req = https.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function(res) {
callback(null, res);
});
});
req.on('error', (e) => {
callback(null, 'error' + e.message);
});
req.write('');
req.end();
};
Testで関数を実行すると以下のようにSlackに通知されます。
問題が無ければCloudWatch Events - ScheduleをEnableにして完了です。
まとめ
- AWS Lambdaを利用することでサーバーレスで退勤時刻の通知と打刻を促してみました。
- 打刻を忘れないようにしましょう!