読者です 読者をやめる 読者になる 読者になる

AWS Lambda でS3 にファイルをアップロードしたらSlackチャットに通知するやつ

f:id:laiso:20150116150750p:plain

AWS Lambda をさわってみたら楽しげだったので作ってみた。

ソース: aws-lambda-samples/s3slack at master · laiso/aws-lambda-samples

zip圧縮してブラウザからアップロードできます(ルートをフォルダで包まないこと)。 やっていることは以下。

const SLACK_TOKEN = "xxx...xxx";

var req = require('request');

exports.handler = function(event, context) {
    var filename = event.Records[0].s3.object.key;
    req.post('https://slack.com/api/chat.postMessage')
        .form({
            token: SLACK_TOKEN,
            channel: "#s3",
            text: "Put: "+filename
        })
        .on('response', function (response) {
          response.on('data', function(data) {
            context.done(null, data);
          });
        })
        .on('error', function (err) {
            cotext.done(err, 'Failed post the chat');
        });
};

SLACK_TOKEN: Slack Web API | Slack このへんで取れます

S3: Amazon Web Services ブログ: 【AWS発表】S3の新しいイベント通知機能 このへんと

AWS Lambda: 初めてのJavaScript、初めてのAWS Lambda | Developers.IO このへんを参考にセットアップしてください

知見

  • RebelMail/node-lambda · GitHub を使うと。Eventオブジェクトのfixtureつけてrunしてくれたりするのでローカルでテストできる
  • npmの外部モジュール使いたい時はzipファイルにしてディレクトリ直下に全部必要なファイルバンドルする
  • npm installしたnode_modules以下はシンボリックリンクなのでそのままだとzipファイルには入らない
  • node-lambda でデプロイまでできるみたいだからこのへん気にしなくてもよくなるかもしれない
  • cotext.done 呼ばないと未完了扱いになって自動で3回リトライされる

他の活用事例

AWS Lambda Advent Calendar 2014 - Qiita

AWS Lambda Shell Hack

なんか楽しそうなやつ