2016-08-28 12 views
-1

バケット内に作成された新しいオブジェクトのSNS通知をテストしています。 SNS通知を受け取ると、パラメータ付きのコードのように見えます。ような何か:SNS経由でS3通知をフォーマットする方法はありますか?

{"Records":[{"eventVersion":"2.0","eventSource":"aws:s3","awsRegion":"eu-west-1","eventTime":"2016-08-28T09:12:36.709Z","eventName":"ObjectCreated:Put","userIdentity":....... 

私は人間が読める形式にこのデータを変換したい、のようなもの:

Time: xxxxxxx 
Bucket: xxxxxxxx 
Event: xxxxx 

はそれを行うための方法はありますか?私が知っておくべきいくつかのウォークスルー?

答えて

0

だから、すべての変更後に、これは最終的なコードです:「ノンブル」のサイズを取得し、作成したファイルと「玉野」の名前を取得します。私は2つの新しい変数を追加した

var util = require('util'); 
var AWS = require('aws-sdk'); 
AWS.config.region = 'eu-west-1'; 


exports.handler = function(event, context, callback) { 
    // Read options from the event. 
    console.log("Reading options from event:\n", util.inspect(event, {depth: 5})); 

    var s3Event = event.Records[0]; 

    var srcBucket = s3Event.s3.bucket.name; 
    var srcEvent = s3Event.eventName; 
    var time = s3Event.eventTime; 
    var nombre = s3Event.s3.object.key; 
    var tamano = s3Event.s3.object.size; 

    var msg = "Nuevo objeto \r\n" + 
       "Hora: " + time + "\r\n" + 
       "Bucket: " + srcBucket + "\r\n" + 
       "Evento: " + srcEvent + "\r\n" + 
       "Objeto: " + nombre + "\r\n" + 
       "Tamaño (en MB): " + tamano/1048576 + "\r\n"; 

    var sns = new AWS.SNS(); 

    sns.publish({ 
     Message: msg, 
     TopicArn: 'TOPIC_ARN' 
    }, function(err, data) { 
     if (err) { 
      console.log(err.stack); 
      return; 
     } 
     console.log('push sent'); 
     console.log(msg); 
     context.done(null, 'Function Finished!'); 
    }); 

} 

注意。最後のものはバイト単位で与えられているので、単純な操作でメガバイトに変換します。

3

あなたのSNS通知ユーザが電子メールエンドポイントであると仮定していますか?

これを行う最も簡単な方法は、AWS Lambdaを使用して書式設定を行うことです。

s3イベントをSNSに公開する代わりに、AWS Lambda関数に公開します。ラムダ関数では、必要に応じてイベントレコードの書式を設定するコードを記述します。次に、ラムダ関数は、SNSトピックにメッセージをパブリッシュできます。

画像がS3にアップロードされるたびにサムネイルを生成するラムダ関数の設定に関するチュートリアルについては、http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.htmlを参照してください。

ラムダ関数でイベントプロパティにアクセスする方法を示します。

その例から取り、自分の状況に基づいて調整:

var util = require('util'); 
var AWS = require('aws-sdk'); 
AWS.config.region = 'eu-west-1'; 


exports.handler = function(event, context, callback) { 
    // Read options from the event. 
    console.log("Reading options from event:\n", util.inspect(event, {depth: 5})); 

    var s3Event = event.Records[0]; 

    var srcBucket = s3Event.s3.bucket.name; 
    var srcEvent = s3Event.eventName; 
    var time = s3Event.eventTime; 

    var msg = "Time: " + time + "\r\n" + 
       "Bucket: " + srcBucket + "\r\n" + 
       "Event: " + srcEvent + "\r\n"; 

    var sns = new AWS.SNS(); 

    sns.publish({ 
     Message: msg, 
     TopicArn: 'TOPIC_ARN' 
    }, function(err, data) { 
     if (err) { 
      console.log(err.stack); 
      return; 
     } 
     console.log('push sent'); 
     console.log(data); 
     context.done(null, 'Function Finished!'); 
    }); 

} 

(上記はまた、SNSへの公開に関するhttps://gist.github.com/jeremypruitt/ab70d78b815eae84e037からの抜粋が含まれています。)

をこれは単なるテストされていない例である - 私はお勧めします上記のチュートリアルに続いて、さまざまな権限やその他の設定についても説明しますが、上記の機能は出発点になります。

+0

いいですね。私が使うはずのコードについての手がかりは?私はこの種の構造にはあまり慣れていません。 – manuel

+0

s3からlambdaに直接移行するように編集されているので、結局2つのSNSトピックは必要なく、いくつかのサンプルコードが含まれています。 –

+0

正しいと思われますが、私はそれを動作させることができませんでした。 「util」が定義されていないというエラーが表示されます。 – manuel