Записывать информацию пользователя Cognito в DynamoDB с помощью лямбда-функции после подтверждения? - PullRequest
0 голосов
/ 14 ноября 2018

У меня проблемы с реализацией лямбда-функции после подтверждения, в которой я беру учетные данные, отправленные пользователем, из процесса регистрации и записываю их в таблицу DynamoDB «Пользователи».Конкретные записи, которые я пытаюсь записать в таблицу: - имя пользователя - адрес электронной почты - фактическое имя

Чтобы отличать пользователей друг от друга, мне нужно, чтобы первичный ключ был значением 'sub', поскольку пользователиможет изменить свои имена пользователей, и это может вызвать проблемы в будущем.

Основные проблемы, с которыми я сталкиваюсь, следующие:

1) С каких ролей я должен начать свою функцию Lambda?

При создании лямбда-функции мне нужно дать ей стартовую роль, и я не совсем уверен, какой стартовый шаблон мне следует использовать.Я знаю, что мне понадобится доступ для записи в DynamoDB, но я не вижу шаблон для этого.

2) Как получить доступ к отдельным полям пользователя Cognito?

Насколько далекокак мне известно, эти значения должны храниться в параметре 'event' функции-обработчика, но я не могу найти документацию или примеры событий, которые показывают, как получить доступ к отдельным полям для таких вещей, как 'sub', 'email'и т. д.

1 Ответ

0 голосов
/ 14 ноября 2018

1) Ваша лямбда-роль

  • Создайте свою лямбда-функцию, а не используйте шаблон, выберите создание новой роли и присвойте ей имя (скажем, MyLambdaRole).
  • Зайдите в IAM, зайдите в пункт меню Роли и найдите роль MyLambdaRole.Прикрепите следующую политику: AmazonDynamoDBFullAccess

Обратите внимание, что у Lambda уже будет доступ к CloudWatch по умолчанию.AmazonDynamoDBFullAccess имеет больше разрешений, чем вам строго необходимо, но это не является необоснованным.Если вы хотите получить более детальное разрешение, я бы по крайней мере включил его в AmazonDynamoDBFullAccess и пошел бы оттуда.Также обратите внимание, что вам вообще не нужны никакие разрешения Cognito, так как все, что вы будете делать, - это анализ данных, отправленных вам Cognito.

Убедитесь, что вы импортировали соответствующую библиотеку DynamoDB в свой скрипт.

Например:

exports.handler = (event, context, callback) => {

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'us-east-1'});

// Create the DynamoDB service object
ddb = new AWS.DynamoDB({apiVersion: '2012-10-08'});

};

2) Доступ к отдельным данным пользователя Cognito

Предполагается, что вы используете NodeJ, например:

event.request.userAttributes.email

Подробнее здесь

И последнее: вам не нужно назначать триггер для функции Lambda.Все, что вам нужно сделать, это зайти в Cognito и назначить функцию Lambda в разделе триггеров.Таким образом, Cognito вызывает Lambda напрямую - Lambda не нуждается в прослушивании каких-либо особых событий.

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