Jwa*_*622 3 amazon-sqs amazon-web-services aws-lambda
我的 lambda 在尝试连接到 SQS 时超时。Lambda 具有允许其连接到 SQS 的角色,但它位于 VPC 和子网内。这个问题的解决方案可能是什么?
\n\n我在日志中看到此错误:
\n\n[INFO] 2019-10-01T14:29:58.303Z e8ad5b4e-119a-48c1-b320-1d855c4efb22 Getting SQS queue url from <some_sqs_queue>...\n\xef\x85\x81 14:30:16\n[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/"\nRun Code Online (Sandbox Code Playgroud)\n\n这是在本地工作但不能在 lambda 上工作的相关代码:
\n\n sqs = boto3.client(\n \'sqs\', # region_name="us-west-2",\n aws_access_key_id=credentials.access_key,\n aws_secret_access_key=credentials.secret_key,\n aws_session_token=credentials.token,\n config=Config(connect_timeout=6, read_timeout=10, retries={\'max_attempts\': 2})\n )\nRun Code Online (Sandbox Code Playgroud)\n\n和
\n\ntry:\n logger.info(f"Getting SQS queue url from {sqs_queue}...")\n queue_url = sqs.get_queue_url(QueueName=sqs_queue)[\'QueueUrl\']\n # iterate over entries in batches of 10\n for batch in [entries[index:index + sqs_batch_limit] for index in range(0, len(entries), sqs_batch_limit)]:\n logger.info(f"Sending batch of {len(batch)} records to sqs...")\n sqs.send_message_batch(\n QueueUrl=queue_url,\n Entries=batch\n )\n logger.info("Sent batch of records to sqs successful")\nRun Code Online (Sandbox Code Playgroud)\n\n它甚至没有得到,sqs_queue_url但它可以在本地工作。导致此日志 Transmission Error Connect 错误的可能原因有哪些?
您可以认为 AWS Lambda 函数“位于 VPC 和子网内”。
但是,Amazon SQS 存在于 Internet 上,而不是存在于 VPC 中。
因此,您需要一种使 Lambda 函数能够访问 Internet 的方法,或者一种使 Amazon SQS 在 VPC 内可用的方法。
选项 1:允许 AWS Lambda 函数访问 Internet
当 Lambda 函数未配置为使用 VPC 时,它可以直接与 Internet 通信。但是,当它配置为使用 VPC 时,它无法直接访问 Internet。
相反,推荐的配置是:
选项 2:使 Amazon SQS 在 VPC 内可访问
您可以在 VPC 中为 Amazon SQS创建Amazon VPC 终端节点:
如果您使用 Amazon VPC 托管 AWS 资源,则可以在 VPC 和 Amazon SQS 之间建立连接。您可以使用此连接将消息发送到您的 Amazon SQS 队列,而无需通过公共互联网。
| 归档时间: |
|
| 查看次数: |
3287 次 |
| 最近记录: |