16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今年もやるよ!AWS Lambda縛りAdvent Calendar 2015

Day 22

AWS Lambdaで為替レート情報をSlackに流す

Last updated at Posted at 2015-12-21

この記事は今年もやるよ!AWS Lambda縛り Advent Calendar 2015 - Qiitaの22日目です。

ご存知の通り、AWSへの料金支払いはドル建てです。当然、円が下がれば支払い金額は上がってしまいます。AWSヘビーユーザーにとって円/ドルのレートは気になる情報のはずなので、会社のSlackに流すようにしてみました。

Incoming Webhookの設定

最初にSlackでIncoming Webhookの設定をします。

Integrations___cloudpack_Slack.png Incoming_WebHooks___cloudpack_Slack.png

投稿先のChannelは何でもいいですが、テスト等で他のメンバーの迷惑にならないように適当なChannelを作ってしまうのが吉かもしれません。

Incoming_WebHooks___cloudpack_Slack_1.png

Webhook URLを後で使うので控えておきます。

Lambda Functionの作成

Lambda Functionの機能は非常に単純で、外部APIから取得した為替レートをWebhookでSlackに投げるだけです。

為替情報を取得できるAPIは様々あるようですが、今回はクジラさんのAPIを使わせていただきました。更新頻度がゆっくり目ですが、この用途には充分です。もっと頻繁に為替情報を取得したい人はXurrencyとかを使うと良いと思います。

SlackのWebhookでは、投稿されたメッセージのアイコンをEmojiで指定できます。今回は :moneybag: にしました。 :money_with_wings: とか :dollar: とか :yen: でもいいかもですね。

最終的なLambda Functionは以下のようになりました。

handler.js
var URL   = require("url");
var http  = require("http");
var https = require("https");

var apiUrl     = URL.parse("http://api.aoikujira.com/kawase/json/usd");
var webhookUrl = URL.parse("<ここにSlackで作成したWebhook URL>");

var apiOptions = {
  hostname: apiUrl.hostname,
  path:     apiUrl.path,
  port:     80,
  method:   "GET",

  headers: {
    "Content-Type": "application/json"
  }
};

var webhookOptions = {
  hostname: webhookUrl.hostname,
  path:     webhookUrl.path,
  port:     443,
  method:   "POST",

  headers: {
    "Content-Type": "application/json"
  }
};

exports.handler = function(event, context) {
  http.get(apiOptions, function(res) {
    var content = "";
    res.setEncoding("utf8");

    res.on("data", function(chunk) {
      content += chunk;
    });

    res.on("end", function(res) {
      var data = JSON.parse(content);
      var text = "1 USD == " + data.JPY + " JPY"

      var payload = JSON.stringify({
        channel:    "#notify-jpy",
        username:   "JPY <-> USD",
        icon_emoji: ":moneybag:",
        text:       text
      });

      console.log(payload);

      var req = https.request(webhookOptions, function(res) {
        res.setEncoding("utf8");

        res.on("data", function(chunk) {
          console.log(chunk);
          context.succeed();
        });
      }).on("error", function(e) {
        console.log("error: " + e.message);
      });

      req.write(payload);
      req.end();
    });
  }).on("error", function(e) {
    console.log("error: " + e.message);
  });
};

Scheduled Eventの設定

AWS Lambda - Scheduled EventのCron書式 - Qiita を参考に、適当なEvent Sourceを追加します。

AWS_Lambda 2.png

ここでは「4時間ごと、00分」にしました。

AWS_Lambda.png

できあがり

Webhookを設定したChannelに、4時間ごとにドル円レートが流れるようになりました!

Slack.png
16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?