Невозможно подключиться к S3 из Lambda / Python / Boto3, когда включен VPC - PullRequest
0 голосов
/ 06 февраля 2019

У меня очень простая функция python в лямбде, которая работает нормально, если я оставлю VPC отключенным.

import json
import boto3
import botocore

    def lambda_handler(event, context):

    s3 = boto3.client('s3', 'us-east-1', config=botocore.config.Config(s3={'addressing_style':'path'}))
    keys = []
    resp = s3.list_objects_v2(Bucket='[BUCKET_NAME]')
    for obj in resp['Contents']:
        print(obj['Key'])

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

Когда VPC включен, соединение S3 постоянно истекает.

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

Мой сетевой ACL имеет сопоставления 0.0.0.0/0 для портов 80, 443 и 5439 (Redshift).

Моя единственная группа безопасности имеет сопоставления 0.0.0.0/0 для портов 80, 443 и 5439 (Redshift).

У меня настроен только один VPC.

У меня есть1 настроенный шлюз NAT.

У меня настроен 1 интернет-шлюз.

У меня есть 6 подсетей в VPC:

  • Подсети A и B указывают на основной маршруттаблица.
  • Подсети C и D указывают на таблицу маршрутов 'lambda_rt_table_gateway'.
  • Подсети E и F указывают на таблицу маршрутов 'lambda_rt_table_nat'.

Iиметь 2 конечных точки в VPC:

  • Определена конечная точка VPCE-AРедактируется для службы com.amazonaws.us-east-1.s3 и сопоставляется со всеми тремя таблицами маршрутов.
  • Конечная точка VPCE-B определена для службы com.amazonaws.us-east-1.Dynamodb 'и отображается на все 3 таблицы маршрутов.

Наконец, у меня есть 3 таблицы маршрутов:

  • Основная таблица маршрутов имеет следующие маршруты:

    • 172.31.0.0 / 1 -> локальный
    • pl-02cd2c6b (com.amazonaws.us-east-1.dynamodb, 52.94.0.0/22, 52.119.224.0/20) -> vpce-07a6eb423bbbea151
    • pl-63a5400a (com.amazonaws.us-east-1.s3, 54.231.0.0/17, 52.216.0.0/15) -> vpce-0fd10c890bb176b5a
    • 0.0.0.0 / 0 -> igw-04b6aa7c
  • В таблице маршрутов 'lambda_rt_table_gateway' есть маршруты, идентичные основным.

  • Таблица маршрутов 'lambda_rt_table_nat' также имеет идентичные маршруты, за исключением последней записи:
    • 0.0.0.0 / 0 -> nat-0a5c0a76e3c12c42f

Я почти уверен, что мне чего-то не хватает.Пожалуйста, помогите.

Большое спасибо.

1 Ответ

0 голосов
/ 06 февраля 2019

У вас настроено много вещей!Я не уверен, насколько это необходимо для решения этой конкретной ситуации, или у вас есть другие потребности в таких вещах, как NAT Gateway, VPC Endpoints и т. Д.

Самая простая настройка для включенияСвязанная с VPC лямбда-функция для вызова в Интернет (например, для вызова API в Amazon S3) будет:

  • Добавить NAT Gateway в общедоступную подсеть
  • Присоединение функции Lambda к Частной подсети
  • Настройка маршрутизации в частной подсети для использования шлюза NAT для 0.0.0.0/0

То естьдостаточно для подключения к Интернету функций Lambda, подключенных к VPC.

...