Как получить доступ к функциям Cognito и Elasticache из одной лямбда-функции AWS?

Я пытаюсь написать лямбда-функцию AWS, которая получает пользователя из AWS Cognito с помощью AWS.CognitoIdentityServiceProvider.adminGetUser, а затем сохраняет некоторые данные в AWS Elasticache (Redis). Части работают нормально по отдельности, но не вместе, поскольку кажется, что когда я включаю VPC для Lambda (чтобы иметь доступ к Elasticache), я теряю доступ к Cognito (время ожидания Lambda истекает).

Есть ли способ получить доступ к обеим службам из одной лямбда-функции, или мой подход полностью неверен?


person aivisol    schedule 03.05.2019    source источник


Ответы (1)


Да, конечно можно. Вам необходимо создать шлюз NAT или экземпляр NAT в общедоступной подсети вашего VPC, а затем добавить правило в таблицу маршрутов, которое включает NAT из группы безопасности лямбды. Я не думаю, что существуют общедоступные IP-адреса Cognito, поэтому CIDR вашего правила исходящей группы безопасности будет 0.0.0.0/0.

Более подробная информация доступна в официальных документах здесь, а также есть тонны руководств в Интернете, потому что это обычная проблема. Удачи!

P.S. Не забудьте добавить разрешения для действия adminGetUser в IAM-роль лямбды.

person Vladyslav Usenko    schedule 03.05.2019
comment
Спасибо. Я надеялся избежать этой дополнительной сложности и затрат, связанных со шлюзом NAT. Также для меня было как-то нелогично получить доступ к Cognito (который выглядит как внутренняя служба лямбда-выражения) через NAT-шлюз (который обычно используется для доступа к службам в общедоступном Интернете). - person aivisol; 03.05.2019
comment
Да, они предоставляют конечные точки VPC для таких случаев. Насколько я помню, сейчас вы можете настраивать конечные точки только для S3 и DynamoDB. Они решают ту же проблему, которую решает NAT, за исключением того, что трафик фактически не покидает сеть AWS. И они дешевле NAT Gateway. К сожалению, на данный момент нет конечной точки для когнитивного анализа. - person Vladyslav Usenko; 03.05.2019
comment
Итак, чтобы добавить путаницы, в моем примере у меня есть несколько Lambdas, управляемых CloudFormation, и все они взаимодействуют с Cognito, но только один выполняет Cognito + Redis. Поэтому для остальных функций мне не нужен VPC (т.е. я могу получить доступ к Cognito напрямую из Lambda), но для этого отдельного случая мне нужен шлюз VPC + NAT, чтобы иметь доступ к Cognito и Redis. Спасибо за ваше объяснение, возможно, это мой путь. - person aivisol; 03.05.2019