Невозможно отправить данные в SNS из лямбды с помощью конструктора vew - PullRequest
0 голосов
/ 21 марта 2020

При следовании Представление AWS Лямбда-адресатов Мне говорят создать SNS в качестве пункта назначения, я делаю это:

AWS lambda designer view

Но это ничего не отправляет. У меня уже была SNS, способная отправлять почту на мою учетную запись, и я адаптировал политику, чтобы принимать все от всех (она работает с кнопкой «Publi sh другое сообщение»)

Если я вызываю 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 topi c, я не буду Нужно изменить код.

Кто-нибудь из вас преуспел в этом? Спасибо,

1 Ответ

1 голос
/ 22 марта 2020

Я успешно просмотрел и реплицировал блог AWS Lambda Destination без изменения примера кода из блога.

Я бы посоветовал вам просмотреть конфигурацию SNS (и при необходимости изменить регион us-west-2 на свой AWS регион использования) и проверить, соответствует ли он следующему:

1. На вашем SNS topi c ( '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) «Доверительные отношения» вашей роли имеют следующее утверждение:

{
  "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 topi c должно вывести что-то похожее на:

{"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}

Надеюсь, это поможет.

...