Authentication/Cognito SDK не работает после развертывания в AWS Lambda

Я интегрировал пулы пользователей AWS Cognito в свое приложение, как описано в этой статье: http://snevsky.com/blog/dotnet-core-authentication-aws-cognito, используя эти пакеты: AWSSDK.Core и AWSSDK.CognitoIdentityProvider.

В моей среде разработки это работает хорошо: я могу вызвать AdminInitiateAuthAsync для аутентификации пользователя и я могу вызвать SignUpAsync для создания нового пользователя. Другие методы тоже хорошо работают — в моей среде разработчик.

Однако, когда я развертываю свой код в Lambda, он не работает. В частности, он висит на этой строке:

var response = await cognito.AdminInitiateAuthAsync(request);

В конце концов, я получаю сообщение об ошибке в CloudWatch, говорящее Task timed out. Тем не менее, это не говорит мне, почему. Основываясь на моем прошлом опыте работы с Lambda и AWS, я предполагаю, что это проблема с разрешениями между Lambda и Cognito, но это всего лишь предположение.

Несколько вещей, которые я пробовал:

  1. Как указано в статье, я добавил две настройки среды разработчик: AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY. Однако Lambda не позволит вам установить эти конкретные ключи в качестве переменных среды. Итак, в качестве теста я попытался установить их явно в своем коде:
var credentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
var region = RegionEndpoint.GetBySystemName("myRegionId");
var cognito = new AmazonCognitoIdentityProviderClient(credentials, region);

  1. Я добавил права администратора для роли Lambda Execution.

Любая помощь приветствуется.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
476
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пара вещей:

  1. Вам не нужно предоставлять ключи API в лямбда-коде. AWS сделает это за вас, учитывая, что ваш код фактически выполняется в защищенной песочнице.
  2. Ваш пользовательский пул cognito на самом деле имеет общедоступное DNS-имя, поэтому, когда вы отправляете к нему любой запрос API (даже через AWS SDK), ваш трафик проходит через общедоступный Интернет. Это означает, что лямбда должна иметь возможность отправлять трафик в общедоступный Интернет. Учитывая, что вы столкнулись с «Ошибкой времени ожидания задачи», наиболее распространенным случаем такой ошибки является то, что вы поместили свою функцию в VPC, но не предоставили экземпляр NAT/шлюз, правила таблицы маршрутов и необходимые группы безопасности, чтобы разрешить лямбда-коммуникацию в общедоступный интернет. Если вы проверите настройки своей инфраструктуры и в конечном итоге увидите, что ваша лямбда является находится в VPC, примите решение, действительно ли она вам нужна. Если вы этого не сделаете, вытащите его оттуда, и, скорее всего, ваши когнито-запросы сработают немедленно. Но если вы это сделаете, вам придется настроить NAT, группы безопасности и записи таблицы маршрутизации.

Спасибо! Это сработало. Теперь мне просто нужно решить, хочу ли я платить за NAT (лямбда внутри VPC) или сделать свою БД общедоступной (лямбда вне VPC).

Todd 03.05.2019 16:34

Другие вопросы по теме