Lambda不会触发SNS事件。使用SNS链接AWS lambdas

时间:2017-06-28 11:14:30

标签: amazon-web-services aws-lambda

我正在使用AWS通过让第二个lambda订阅第一个lambda的SNS提要来将lambda连接在一起。第二个lambda没有收到第一个lambda的任何内容,我也没有在CloudWatch(或我订阅的个人电子邮件)中收到SNS事件被触发的通知。所以,我想知道这个问题:如何确保我的SNS从我的lambda射击中收到一个事件?

当我使用SNS Web UI时,我得到这样的日志,我的lambda日志显示它们已被触摸,但仅在我手动发送消息时。

{
"notification": {
    "messageMD5Sum": "e9a72884afc5d9568f2748e34a4e50a4",
    "messageId": "04f4a199-cd25-5a45-a877-f054df9b2adf",
    "topicArn": "arn:aws:sns:us-east-1:xxxxxxxxxxxx:first-lambda",
    "timestamp": "2017-06-28 02:12:14.098"
},
"delivery": {
    "deliveryId": "173dca7a-7b31-55a2-8ee9-9bb7698f35f6",
    "destination": "arn:aws:lambda:us-east-1:xxxxxxxxxx:function:second-labmda",
    "providerResponse": "{\"lambdaRequestId\":\"33972992-5ba7-11e7-b363-09e0f6dc8594\"}",
    "dwellTimeMs": 134,
    "attempts": 1,
    "statusCode": 202
},
"status": "SUCCESS"

}

我已经在其角色中获得了我的lambda发布权限,但是这只出现在IAM中,当我在GUI上查看lambda本身的策略时,我只看到了lambda的激发权限。 lambda本身。我也肯定我的SNS有权写入lambda,因为当你设置lambda时(正如我昨天多次做的那样),它要求你授予SNS主题权限。但是,即使在测试SNS主题时,也从未达到过lambda,但如果我订阅了我的电子邮件帐户,我会收到一封电子邮件。

TL;博士 第一个lambda应该触发第二个lambda订阅的SNS事件。 SNS事件没有从我的第一个lambda接收任何数据,除了半夜的两个日志,从未进入我的第二个lambda。 如何确保我的SNS从我的lambda射击中收到一个事件?

2 个答案:

答案 0 :(得分:0)

OP已经解决了吗?我此刻遇到了同样的问题,突然发生了。我实际上认为AWS可能会遇到麻烦。我在美国东部1。

(我想发表评论,但我还没有足够的声望点......)

答案 1 :(得分:0)

通过向我的lambda添加服务来解决这个问题,以发送消息。

import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.sns.AmazonSNSClient;
import com.amazonaws.services.sns.model.PublishRequest;

public class SNSPublishService {

private static final String ACCESS_KEY = "credential1";
private static final String SECRET_KEY = "credential2";
private static final String ARN = "arn:aws:sns:<region>:<id>:<topicname>";

public static void publish(String body) throws InterruptedException {
    AmazonSNSClient service = new AmazonSNSClient(new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY));
    PublishRequest publishRequest = new PublishRequest()
            .withTargetArn(ARN)
            .withMessage(body);

    service.publish(publishRequest);
}}