前提・実現したいこと
LINEbotに送った画像と動画を自動でAWSのS3に保存したいです。
LINE→API GATEWAY→lambda→S3で実現できると理解しています。
発生している問題・エラーメッセージ
LINEからのメッセージをトリガーにlambda関数が動くところまではhello worldで確認できたのですが、
いざ画像を取得してみようとするとうまくいきません。
まずは下記記事の内容を動かしてみたいです。
https://qiita.com/vedokoy/items/165eaa90015e0181475a
特に疑問なのが、lambda関数をnode.jsで使うのならば
exports.handler = (event, context, callback) =>
が真っ先に来るかと思っていたのですが、
記事中ソースコードでは一切触れられていないため
そういうやり方もあるのか?と混乱しています。
該当のソースコード
node.js var https = require('https'); // 引数のmessage_idは // event_data.events[0].message.typeが"image"だった場合に // event_data.events[0].message.idで取得したもの var get_image = function(message_id,callback){ // Request Headers var send_options = { host: 'api.line.me', path: '/v2/bot/message/'+message_id+'/content', headers: { "Content-type": "application/json; charset=UTF-8", "Authorization": " Bearer " + "{ MY_TOKEN }" // ←ここに自分のトークンを入れる(LINE Developersで発行したやつ) }, method:'GET' }; // APIリクエスト var req = https.request(send_options, function(res){ var data = []; res.on('data', function(chunk){ //image data dividing it in to multiple request data.push(new Buffer(chunk)); }).on('error', function(err){ console.log(err); }).on('end', function(){ // ここに画像取得後の処理を書く // この場合は、引数で受け取った画像取得後の処理用callbackを実行 // dataに画像のバイナリデータが入ってる save_image(data); }); }); req.end(); }; var AWS = require('aws-sdk'); AWS.config.region = 'ap-northeast-1'; var s3 = new AWS.S3({ apiVersion: '2006-03-01' }); // dataは画像のバイナリデータ // ②の関数のcallbackがこれになるイメージ var save_image = function(data){ var params = { Bucket: 'my_bucket', // ←バケット名 Key: 'test.png', // ←バケットに保存するファイル名 Body: Buffer.concat(data) }; s3.putObject(params, function(err, data) { // 画像保存後の処理 }); };
試したこと
実際に動作した際は矢印でコメントされている部分は正しい値を入力しました。
補足情報(FW/ツールのバージョンなど)
VBAしかいじったことがないため、半端な知識で申し訳ないのですがご教授よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/11 06:14
2020/08/11 11:41 編集
2020/08/12 10:19
2020/08/12 11:35
2020/08/12 12:38