从AWS Lambda Python函数发送POST请求时出现连接超时错误
问题:AWS Lambda发送POST请求超时
错误信息
[ERROR] ConnectionError: HTTPConnectionPool(host=********************s3-website.ap-south-1.amazonaws.com', port=80): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f69fdfbda90>: Failed to establish a new connection: [Errno 110] Connection timed out'))
Traceback (most recent call last):
相关代码
import json import uuid import datetime import re import base64 import requests import httpx import asyncio def lambda_handler(event,context): INVENTORY_CP_OPERATION_URL="************.s3-website.ap-south-1.amazonaws.com/" message={ "email":"*******@********.com", "password":"123456" } result=requests.post(INVENTORY_CP_OPERATION_URL, json=message) return "success"
排查与解决步骤
- 检查Lambda网络配置:若Lambda部署在默认VPC的私有子网,默认无出站互联网访问权限。需给子网配置NAT网关,或把Lambda部署到开启自动分配公网IP的公有子网。
- 验证目标地址有效性:确认S3静态网站域名拼写正确,且公网可访问。S3静态站格式为
bucket-name.s3-website-region.amazonaws.com,检查是否存在符号错误或字符缺失。 - 检查安全组与NACL规则:Lambda所属安全组需允许出站80端口(HTTP)流量;对应子网的网络访问控制列表(NACL)需允许出站80端口请求,以及入站响应流量。
- 切换为HTTPS访问:S3静态网站可通过CloudFront分发或部分区域直接支持HTTPS,将URL改为
https://开头,使用443端口,规避HTTP的潜在限制。 - 设置请求超时:给
requests.post添加超时参数,比如requests.post(INVENTORY_CP_OPERATION_URL, json=message, timeout=10),避免无意义等待,同时确保Lambda函数执行超时时间大于请求超时。 - 清理冗余依赖:代码中
httpx、asyncio等未使用的库可删除,减少部署包体积,避免不必要的资源占用。
内容的提问来源于stack exchange,提问作者Rambo
相关产品推荐
相关产品推荐

