无法使用设计视图从 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}

希望对您有所帮助。