【发布时间】:2019-12-12 14:44:47
【问题描述】:
我想要带有 sns 的 s3 事件,但我想要用户可读的电子邮件通知,因为只有我想要时间戳,只需要放置对象。我们只需要人类可读的。
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-lambda
我想要带有 sns 的 s3 事件,但我想要用户可读的电子邮件通知,因为只有我想要时间戳,只需要放置对象。我们只需要人类可读的。
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-lambda
S3 触发 lambda,lambda 通过 SNS 向用户发送电子邮件
【讨论】:
S3 默认发送完整的 JSON 作为事件,您有两个选项来发送人类可读的格式电子邮件。
您可以查看CloudWatch-Events-Input-Transformer-Tutorial 和Configuring Amazon S3 Event Notifications
第二种方法按照建议简单易行,配置 lambda 抓取所需属性并发布到 SNS,订阅电子邮件到 SNS 主题,现在消息将是人类可读的格式。
角色:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "sns-permission",
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-west-2:YOUR_ACCOUNT:demo"
}
]
}
Lambda 函数示例
'use strict';
// Load the AWS SDK for Node.js
const AWS = require('aws-sdk');
const sns = new AWS.SNS()
module.exports.handler = async (event) => {
var bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
var eventTime= event.Records[0].eventTime;
const params = {
Message: "bucket:" + bucket + "Object Name: "+key+ " Event Time:" + eventTime,
Subject: 'Test SNS From Lambda',
TopicArn: 'arn:aws:sns:us-west-2:123456789:demo'
};
let response = {
statusCode: 200,
body: JSON.stringify('SNS message'),
};
try {
const data = await sns.publish(params).promise();
response.messageId = data.MessageId,
response.result = 'Success'
} catch (e) {
console.log(e.stack)
response.result = 'Error'
}
return response
};
在这种情况下,电子邮件将只包含
bucket:mybucketObject Name: HappyFace.jpg Event Time:1970-01-01T00:00:00.000Z
【讨论】: