AWS Лямбда-функция не запускается из события Cognito PostConfirmation, но работает в тесте. - PullRequest
0 голосов
/ 26 мая 2020

Я создал приложение, которое позволяет пользователям регистрироваться, которое добавляет их в мой AWS пул пользователей Cognito. Это было сделано с использованием AWS -SDK для PHP, в частности методом signUp. Я попытался создать функцию Lambda, которая запускается после PostConfirmation, которая добавляет данные пользователя в мою таблицу DynamoDB, и она работает, когда я использую функцию Test, но когда я настраиваю ее для развертывания в реальном времени, она не добавляет пользователей в таблицу и не дает мне никаких ошибок.

Вот параметры моего метода:

$this->client->signUp([
                'ClientId' => $this->client_id,
                'Username' => $username,
                'Password' => $password,
                'UserAttributes' => [
                    [
                        'Name' => 'name',
                        'Value' => $name
                    ],
                    [
                        'Name' => 'email',
                        'Value' => $email
                    ],
                ]
            ]);

Это моя лямбда-функция:

var aws = require('aws-sdk');
const ddb = new aws.DynamoDB({apiVersion: '2012-10-08'});

aws.config.update({region: 'us-east-1'});

exports.handler = function(event, context, callback) {
    var params = {
            TableName: 'RecipeUsersDB',
            Item: {
                'username': {S: event.request.userName},
                'name': {S: event.request.userAttributes.name},
                'email': {S: event.request.userAttributes.email}
                }
        }
    ddb.putItem(params, function(err, data) {
      if (err) {
        console.log("Error", err);
      } else {
        console.log("Exit", data);
      }
    });
    callback(null);
};

Это параметры тестового события, которые работа:

{
  "request": {
    "userName": "hrefrlo",
    "userAttributes": {
      "sub": "e1feer",
      "name": "2srhserrh",
      "email": "3srwergthgsrg"
    }
  },
  "response": {}
}

Я дал функции несколько разных политик разрешений:


AmazonDynamoDBFullAccess

AmazonCognitoDeveloperAuthenticatedIdentities

AmazonCognitoPowerUser

AWSLambdaBasicExecutionRole

AWSLambdaInvocation-DynamoDB


Это только для унифицированного назначения, поэтому приложение (веб-сайт) будет использоваться только для демонстрации и будет развернут на Бобовом стебле. Любая помощь приветствуется, спасибо!

1 Ответ

0 голосов
/ 28 мая 2020

Я осознал свою глупую ошибку. Ответ Cognito PostConfirmation на самом деле имеет форму:

{
    "version": "1",
    "region": "eu-central-1",
    "userPoolId": "eu-central-1_45YtlkflA",
    "userName": "user4",
    "callerContext": {
        "awsSdkVersion": "aws-sdk-java-console",
        "clientId": "4736lckau64in48dku3rta0eqa"
    },
    "triggerSource": "PostConfirmation_ConfirmSignUp",
    "request": {
        "userAttributes": {
            "sub": "a2c21839-f9fc-49e3-be9a-16f5823d6705",
            "cognito:user_status": "CONFIRMED",
            "email_verified": "true",
            "email": "asdfsdfsgdfg@carbtc.net"
        }
    },
    "response": {}
}

В моем коде у меня было event.request.userName, тогда как это должно было быть event.userName.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...