AWS
bot
lambda
Slack

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を利用することでサーバーレスで退勤時刻の通知と打刻を促してみました。
  • 打刻を忘れないようにしましょう!

参考