Лямбда с помощью Python 3.6 & boto3 в VPC времени ожидания при подключении к RedShift

Вопрос задан: 8 месяцев назад Последняя активность: 8 месяцев назад
up 1 down

Я пытаюсь использовать boto3 в python3.6 для подключения к Redshift кластера с использованием get_cluster_credentials API. Следующий раз кода из 100% времени, когда функция Лямбды добавляется к VPC. Она работает без проблем, когда лямбда не добавляется к VPC.

Я не могу понять, если get_cluster_credentials использует государственный или частный IP для доступа RedShift. Я также не могу понять, если есть способ, чтобы заставить его использовать одну или другую сторону.

import json
import boto3

def lambda_handler(event, context):
    redshiftClient = boto3.client('redshift', region_name='us-east-1')
    cluster_creds = redshiftClient.get_cluster_credentials( DbUser='awsuser',
                                                            DbName='dev',
                                                            ClusterIdentifier='redshift-cluster-1',
                                                            AutoCreate=False)
    print(cluster_creds)

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

Моя конфигурация очень проста. Позволяет всю поваренная соль (0.0.0.0/0) через все порты и протоколы. МОЯ SG делает то же самое.

Я 1 Интернет шлюз определяется: IGW-0d1e6dcbfdea792b2

У меня есть 1 подсеть и 1 таблицу маршрутизации в VPC. Таблица маршрутизации имеет одно правило для отображения 0.0.0.0/0 -> IGW-0d1e6dcbfdea792b2.

Я могу подключиться извне АМС к кластеру с помощью SQL Workbench/J без проблем.

Я посмотрел на многих постах, резьб и документы, но не могу понять, что происходит:

AWS Lambda таймаут подключения к RedShift

Подключение к Lambda Redshift в различных Наличие зон

https://github.com/awslabs/aws-lambda-redshift-loader/issues/86

Доступ к RedShift из лямбды - Как избежать 0.0.0.0/0 группы безопасности

https://aws.amazon.com/blogs/big-data/a-zero-administration-amazon-redshift-database-loader/

Подключение AWS Lambda к Redshift - Тайм-аут после 60 секунд

Пожалуйста помоги.

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

1 ответ

up 3 down accepted

Согласно ваш другой вопрос, Когда функция AWS Lambda добавляется к VPC, он не получает Public IP-адрес. Поэтому, если функция хочет получить доступ к сети Интернет (в этом случае, чтобы сделать get_cluster_credentials() звоните), вам необходимо:

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

Это не будет работать, если у вас есть только одна подсеть, так как функция Lambda не сможет получить доступ к шлюзу NAT.

Я также имел успех вручную Назначив Elastic IP-адрес в лямбда-функции в ENI (вместо использования шлюза NAT), но это не будет масштабироваться, поскольку Lambda может развернуть дополнительные контейнеры и поэтому дополнительные ENIS. Это может быть достаточно, если функция работает редко и никогда не одновременно.