Edited at

AWS Lambdaで退勤時刻を知らせ打刻を促す

More than 1 year has passed since last update.


概要

AWS Lambdaを使って月~金の19:00にSlackへ退勤時刻を通知し、打刻を促すメッセージを投稿する。


AWS Lambdaでの定期実行

チュートリアル: スケジュールされたイベントでの AWS Lambda の使用を参考にすると実現できそうなので、このチュートリアルを参考に進めます。


Lambda関数を作成


  • Select blueprintで「lambda-canary」を選択します。

lambda_1.png



  • Configure triggersの各項目を記入します。


    • Schedule expressionの記入方法についてはこちらを参考に指定。



lambda_2.png



  • Lambda function handler and roleでは、Role*Policy templatesなどはチュートリアルに沿って入力していきます。

lambda_3.png



  • Nextをクリックし、Reviewで設定を確認後「Create function」をクリックしLambda関数を作成します。


Lambda 関数をテスト


  • 作成した関数を選択し、 Testを選択します。

  • ダイアログが表示されるので、 Sample event templateから Scheduled Eventを選択し、 Save and testをクリックします。


  • Execution resultセクションで成否を確認します。

lambda_4.png


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に通知されます。

lambda_5.png

問題が無ければCloudWatch Events - ScheduleをEnableにして完了です。

lambda_6.png


まとめ


  • AWS Lambdaを利用することでサーバーレスで退勤時刻の通知と打刻を促してみました。

  • 打刻を忘れないようにしましょう!


参考