如何在LocalStack部署的Lambda中Mock外部请求响应以做本地测试
问题根源
Lambda运行在LocalStack的容器化执行环境中,代码里的localhost:8082指向的是Lambda自身所在容器的本地地址,而非宿主机器或WireMock容器的地址,因此出现连接拒绝错误。
解决方案
由于LocalStack和WireMock已配置在同一个Docker网络shared-network中,直接使用Docker服务名访问WireMock即可解决连通问题:
- 将Lambda代码中的URL从
http://localhost:8082/api/v1/health改为http://wiremock:8080/api/v1/healthwiremock是docker-compose中WireMock服务的名称,Docker会自动解析该名称到对应容器的IP8080是WireMock容器内部的端口(而非宿主映射的8082)
修改后的Lambda代码
def lambda_handler(event, context): print("Lambda invoked") # Some code my_external_url = "http://wiremock:8080/api/v1/health" # 使用Docker服务名访问WireMock requests.get(my_external_url).json() # Some code return { 'status': 'OK', }
额外验证步骤(可选)
如果仍有问题,可通过以下方式排查:
- 进入LocalStack容器,测试与WireMock的连通性:
docker exec -it localstack_main ping wiremock - 在LocalStack容器内直接调用WireMock接口:
docker exec -it localstack_main curl http://wiremock:8080/api/v1/health
内容的提问来源于stack exchange,提问作者Binit Amin
相关产品推荐
相关产品推荐

