无法使用设计视图从 lambda 向 SNS 发送数据
Unable to send data to SNS from lambda using designer vew
当我关注 Introducing AWS Lambda Destinations 时,我被告知要创建一个 SNS 作为目的地,我会这样做:
但是它没有发送任何东西。我已经有一个 SNS 可以向我的帐户发送邮件,并且我已经调整了政策以接受所有人的一切(它适用于 'Publish another message' 按钮)
如果我从代码中调用 sns,它会起作用:
if (event.Success) {
console.log("Success");
context.callbackWaitsForEmptyEventLoop = false;
var sns = new AWS.SNS();
sns.publish({
Message: 'File(s) uploaded successfully',
TopicArn: 'arn:aws:sns:XXX:YYY:ZZZ'
}, (err,data) => {
if (err) {
console.log(err.stack);
return;
}
callback(null);
});
}
但我希望不必为此编写代码(博客条目中建议的内容),例如,如果我更改 SNS 主题,则不必更改代码。
你们有人成功过吗?
谢谢,
我已经查看并成功复制了 AWS Lambda Destinations blog,而没有修改博客中的示例代码片段。
我建议您检查您的 SNS 配置(并根据需要将 us-west-2 区域更改为您使用的 AWS 区域)并检查它是否符合以下条件:
1. 关于你的 SNS 主题 ('arn:aws:sns:us-west-2:1234567890:YourSNSTopicOnSuccess'),导航到访问策略并检查您是否有类似于以下内容的策略:
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": [
"SNS:GetTopicAttributes",
"SNS:SetTopicAttributes",
"SNS:AddPermission",
"SNS:RemovePermission",
"SNS:DeleteTopic",
"SNS:Subscribe",
"SNS:ListSubscriptionsByTopic",
"SNS:Publish",
"SNS:Receive"
],
"Resource": "arn:aws:sns:us-west-2:1234567890:YourSNSTopicOnSuccess"
}
]
}
2. 在您的 Lambda 角色上 ('arn:aws:iam::1234567890:role/YourLambdaDestinationRole'),请确保以下内容:
(i) 你角色的"Trust relationship"有以下内容声明:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service":"lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
(ii) Lambda 角色有一个附加的政策文件,类似于下面给出的文件:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:publish"
],
"Resource": "*"
}
]
}
从 Amazon Lambda 成功发布到 SNS 主题的消息应该输出类似于:
{"version":"1.0","timestamp":"2020-03-22T16:29:50.528Z","requestContext":{"requestId":"43d109d2-54be-4e2e-b8d8-2757e3f06f76","functionArn":"arn:aws:lambda:eu-west-1:1234567890:function:event-destinations:$LATEST","condition":"Success","approximateInvokeCount":1},"requestPayload":{ "Success": true },"responseContext":{"statusCode":200,"executedVersion":"$LATEST"},"responsePayload":null}
希望对您有所帮助。
当我关注 Introducing AWS Lambda Destinations 时,我被告知要创建一个 SNS 作为目的地,我会这样做:
但是它没有发送任何东西。我已经有一个 SNS 可以向我的帐户发送邮件,并且我已经调整了政策以接受所有人的一切(它适用于 'Publish another message' 按钮)
如果我从代码中调用 sns,它会起作用:
if (event.Success) {
console.log("Success");
context.callbackWaitsForEmptyEventLoop = false;
var sns = new AWS.SNS();
sns.publish({
Message: 'File(s) uploaded successfully',
TopicArn: 'arn:aws:sns:XXX:YYY:ZZZ'
}, (err,data) => {
if (err) {
console.log(err.stack);
return;
}
callback(null);
});
}
但我希望不必为此编写代码(博客条目中建议的内容),例如,如果我更改 SNS 主题,则不必更改代码。
你们有人成功过吗? 谢谢,
我已经查看并成功复制了 AWS Lambda Destinations blog,而没有修改博客中的示例代码片段。
我建议您检查您的 SNS 配置(并根据需要将 us-west-2 区域更改为您使用的 AWS 区域)并检查它是否符合以下条件:
1. 关于你的 SNS 主题 ('arn:aws:sns:us-west-2:1234567890:YourSNSTopicOnSuccess'),导航到访问策略并检查您是否有类似于以下内容的策略:
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": [
"SNS:GetTopicAttributes",
"SNS:SetTopicAttributes",
"SNS:AddPermission",
"SNS:RemovePermission",
"SNS:DeleteTopic",
"SNS:Subscribe",
"SNS:ListSubscriptionsByTopic",
"SNS:Publish",
"SNS:Receive"
],
"Resource": "arn:aws:sns:us-west-2:1234567890:YourSNSTopicOnSuccess"
}
]
}
2. 在您的 Lambda 角色上 ('arn:aws:iam::1234567890:role/YourLambdaDestinationRole'),请确保以下内容:
(i) 你角色的"Trust relationship"有以下内容声明:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service":"lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
(ii) Lambda 角色有一个附加的政策文件,类似于下面给出的文件:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:publish"
],
"Resource": "*"
}
]
}
从 Amazon Lambda 成功发布到 SNS 主题的消息应该输出类似于:
{"version":"1.0","timestamp":"2020-03-22T16:29:50.528Z","requestContext":{"requestId":"43d109d2-54be-4e2e-b8d8-2757e3f06f76","functionArn":"arn:aws:lambda:eu-west-1:1234567890:function:event-destinations:$LATEST","condition":"Success","approximateInvokeCount":1},"requestPayload":{ "Success": true },"responseContext":{"statusCode":200,"executedVersion":"$LATEST"},"responsePayload":null}
希望对您有所帮助。