繁体   English   中英

通过SNS对简单电子邮件进行AWS S3事件JSON解析

[英]AWS S3 Event JSON parsing for simple email via SNS

当文件上传到S3存储桶时,我会收到事件通知,只有我才能收到该电子邮件,然后将其发送到SNS主题的电子邮件。

我将如何使用jq命令行应用程序或Lambda之类的其他一些AWS功能或服务来解析从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存储桶>通知> Lambda> SNS电子邮件

要么

文件> S3存储桶>通知> Lambda电子邮件

我在这方面还是个新手,所以需要一些不错的例子。

谢谢你的帮助。

使用AWS Lambda(假设您将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主题,也可以使用SES send_email (同样是boto3 )直接向自己发送电子邮件。

这是AWS的一个不错的教程 ,它将帮助您将S3存储桶连接到Lambda函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM