2017-02-24 88 views
0

當文件上傳到S3存儲桶時,我發送了一個事件通知,該存儲桶發送電子郵件到SNS主題並且只有我收到它。AWS S3事件通過SNS爲簡單電子郵件解析JSON

我該如何使用jq命令行應用程序或其他AWS函數或Lambda等服務來解析從S3存儲桶發送給SNS的JSON數據以使其更簡單?

例如

從這個...

{ 
    "Records": [ 
    { 
     "eventVersion": "2.0", 
     "eventSource": "aws:s3", 
     "awsRegion": "eu-west-1", 
     "eventTime": "2017-02-22T09:16:03.964Z", 
     "eventName": "ObjectCreated:Put", 
     "userIdentity": { 
     "principalId": "AWS:XXXXXXXXXXX" 
     }, 
     "requestParameters": { 
     "sourceIPAddress": "123.456.789" 
     }, 
     "responseElements": { 
     "x-amz-request-id": "XXXXXXXXX", 
     "x-amz-id-2": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 
     }, 
     "s3": { 
     "s3SchemaVersion": "1.0", 
     "configurationId": "Backup Successful", 
     "bucket": { 
      "name": "my.bucket", 
      "ownerIdentity": { 
      "principalId": "XXXXXXXXXXX" 
      }, 
      "arn": "arn:aws:s3:::my.bucket" 
     }, 
     "object": { 
      "key": "backup_2017-02-22-0915_Test_Web_Site_1c709c59af2a-others.zip", 
      "size": 493812, 
      "eTag": "zxbmcnbskdezb", 
      "sequencer": "y238623rqwde" 
     } 
     } 
    } 
    ] 
} 

要這個......

backup_2017-02-22-0915_Test_Web_Site_1c709c59af2a-others.zip 

我不能讓我的頭周圍的語法以及如何使用LAMBDA或這封電子郵件的內容別的東西!

如果這對我的需求更容易,我很樂意使用另一個AWS選項而不是SNS。

文件> S3桶>的通知>的λ> SNS電子郵件

文件> S3桶>通知> LAMBDA電子郵件

我在這個相對新手,所以需要一些體面的例子請。

感謝您的幫助。

+0

你在開發什麼語言? – stdunbar

回答

0

使用AWS拉姆達(假設你使用Python的LAMBDA運行時),你可以分析這樣的事件:

def my_handler(event, context): 
    records = event['Records'] 
    s3_records = filter(lambda record: record['eventSource'] == 'aws:s3', records) 
    object_created_records = filter(lambda record: record['eventName'].startswith('ObjectCreated'), s3_records) 
    for record in object_created_records: 
    key = record['s3']['object']['key'] 
    # key will be "backup_2017-02-22-0915_Test_Web_Site_1c709c59af2a-others.zip" in your case 
    # now you can use boto3 to act on the key 

一旦提取key,您可以使用boto3SNS publish方法發送通知到您的SNS主題,或者您可以使用(再次boto3SES send_email直接發送電子郵件給自己。

這裏的AWS的a nice tutorial將幫助您將S3存儲桶連接到Lambda函數。

+0

謝謝。當我嘗試,我收到以下錯誤(對不起真正的新手): - 「errorMessage」:「模塊lambda_function'缺少處理程序'lambda_handler'」「 –

+0

是的,你必須重命名函數my_handler lamba_handler – spg

+0

謝謝。現在我得到輸出:null –