在AWS Batch运行Python 3.8.10 Docker镜像时遇urllib3/requests连接超时
解决AWS Batch Fargate任务连接Slack超时的问题
问题分析
你的Batch任务基于Fargate Spot部署在公有子网,但无法连接hooks.slack.com,核心原因是Fargate任务默认不会在公有子网中自动分配公网IP——即便子网路由表指向互联网网关(IGW),没有公网IP的任务也无法直接发起对外HTTPS请求。
补充验证:
- 你的
BERecommenderTrainingSecurityGroup已允许80/443端口的出站流量,这部分配置正常。 - 公有子网关联的路由表已设置
0.0.0.0/0指向IGW,路由规则无问题。
解决方案
1. 为Fargate任务启用公网IP分配
在BERecommenderTrainingJobDefinition的ContainerProperties中添加AssignPublicIp配置,显式开启公网IP分配:
BERecommenderTrainingJobDefinition: Type: "AWS::Batch::JobDefinition" Properties: JobDefinitionName: service-be-recommender-training-job-definition-${sls:stage} Type: container PlatformCapabilities: - FARGATE ContainerProperties: Image: !GetAtt BERecommenderTrainingRepository.RepositoryUri # 新增公网IP分配配置 AssignPublicIp: ENABLED ResourceRequirements: - Type: MEMORY Value: !If [IsProd, "30720", "512"] - Type: VCPU Value: !If [IsProd, "4", "0.25"] ExecutionRoleArn: !GetAtt BERecommenderTrainingExecutionRole.Arn JobRoleArn: !GetAtt BERecommenderTrainingJobRole.Arn Environment: - Name: "STAGE" Value: !If [IsProd, "prod", "dev"]
2. 确认默认安全组出站规则
检查VPC默认安全组的出站规则,若存在出站拒绝配置,需调整为允许(或确保自定义安全组的出站规则覆盖需求)。AWS默认安全组通常允许所有出站流量,若未手动修改则无需调整。
3. 验证DNS解析有效性
你的VPC已开启EnableDnsSupport和EnableDnsHostnames,确保任务可正常解析hooks.slack.com域名,无需额外配置。
替代方案(可选)
若不想为任务分配公网IP,可将Compute Environment迁移至私有子网,通过NAT Gateway访问互联网。需确保私有子网路由表指向NAT Gateway,且NAT Gateway部署在公有子网并绑定弹性IP。但当前架构已使用公有子网,启用公网IP是最直接的解决方式。
内容的提问来源于stack exchange,提问作者user8272359
相关产品推荐
相关产品推荐

