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
なんか楽しそうなやつ