Время ожидания AWS Lambda при подключении к sqs истекло - PullRequest
0 голосов
/ 02 октября 2019

У меня истекает время лямбды при попытке подключения к SQS. У лямбды есть роль, которая позволяет ему подключаться к SQS, но она находится внутри VPC и подсети. Что может быть решением этой проблемы?

Я вижу эту ошибку в своих журналах:

[INFO]  2019-10-01T14:29:58.303Z    e8ad5b4e-119a-48c1-b320-1d855c4efb22    Getting SQS queue url from <some_sqs_queue>...
    14:30:16
[CRITICAL]  2019-10-01T14:30:16.743Z    e8ad5b4e-119a-48c1-b320-1d855c4efb22    ## Transmission Error Connect timeout on endpoint URL: "https://us-west-2.queue.amazonaws.com/"

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

 sqs = boto3.client(
        'sqs', # region_name="us-west-2",
        aws_access_key_id=credentials.access_key,
        aws_secret_access_key=credentials.secret_key,
        aws_session_token=credentials.token,
        config=Config(connect_timeout=6, read_timeout=10, retries={'max_attempts': 2})
    )

и

try:
    logger.info(f"Getting SQS queue url from {sqs_queue}...")
    queue_url = sqs.get_queue_url(QueueName=sqs_queue)['QueueUrl']
    # iterate over entries in batches of 10
    for batch in [entries[index:index + sqs_batch_limit] for index in range(0, len(entries), sqs_batch_limit)]:
        logger.info(f"Sending batch of {len(batch)} records to sqs...")
        sqs.send_message_batch(
            QueueUrl=queue_url,
            Entries=batch
        )
        logger.info("Sent batch of records to sqs successful")

Он даже не получает sqs_queue_url, но работает локально. Каковы возможные причины этого журнала Ошибка передачи Ошибка подключения?

1 Ответ

1 голос
/ 02 октября 2019

Вы можете указать, что лямбда-функция AWS «расположена внутри VPC и подсети».

Однако Amazon SQS существует в Интернете, а не в VPC.

Поэтому вы будетелибо нужен способ для доступа лямбда-функции к Интернету, либо способ сделать Amazon SQS доступным в VPC.

Вариант 1. Разрешить доступ к лямбда-функции AWS для выхода в Интернет

Когда лямбда-функция не настроена на использование VPC, она может напрямую связываться с Интернетом. Однако, когда настроен на для использования VPC, он не имеет прямого доступа к Интернету.

Вместо этого рекомендуется использовать следующую конфигурацию:

  • Присоединитьлямбда-функция для частных подсетей в VPC
  • Запустите NAT Gateway в общедоступной подсети и обновите частную таблицу маршрутов для отправки интернет-трафика черезШлюз NAT

Вариант 2: сделать Amazon SQS доступным в VPC

Вы можете создать конечную точку Amazon VPC для Amazon SQS вVPC:

Если вы используете Amazon VPC для размещения своих ресурсов AWS, вы можете установить соединение между вашим VPC и Amazon SQS. Это соединение можно использовать для отправки сообщений в очереди Amazon SQS, не пересекая общедоступный Интернет.

...