AWS Step Functions调用私有API Gateway遇域名解析错误的配置咨询
问题分析与解决方案
错误原因
ApiGateway.UnknownHostException 本质是DNS解析失败:私有API Gateway的execute-api域名仅能在其所在VPC的内部DNS服务器上被解析,而Step Functions默认运行在AWS公网环境中,无法访问VPC内部DNS,因此无法解析私有API的域名。
核心解决方案:让Step Functions接入目标VPC
不需要额外创建VPC Private Link,只需通过以下配置让Step Functions在目标VPC内运行,即可解析私有API域名并完成调用:
1. 为Step Functions状态机配置VPC访问
编辑你的Step Functions状态机,在VPC设置中指定:
- 私有API所在的VPC ID
- 与私有API所在子网连通的子网(建议选择私有子网)
- 一个专用的安全组(或复用现有安全组)
2. 补充Step Functions执行角色的权限
执行角色需要具备创建/管理ENI(弹性网络接口)的权限,添加以下内联策略到角色中:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterface" ], "Resource": "*" } ] }
3. 调整安全组规则
- Step Functions安全组:添加出站规则,允许
TCP 443访问私有API所在的VPC CIDR范围,或私有API关联的安全组。 - 私有API后端Lambda的安全组:添加入站规则,允许来自Step Functions安全组的
TCP 443访问(如果Lambda部署在VPC内)。
4. (可选)增强API Gateway资源策略
为私有API添加资源策略,仅允许来自目标VPC的Step Functions调用,提升安全性:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "states.amazonaws.com" }, "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:us-west-2:你的AWS账户ID:你的API ID/*/*/*", "Condition": { "StringEquals": { "aws:SourceVpc": "你的VPC ID" } } } ] }
验证
配置完成后重新执行Step Functions状态机,此时状态机通过VPC内的ENI访问私有API,可正常解析域名并完成调用。
内容的提问来源于stack exchange,提问作者Anuj Kulkarni
相关产品推荐
相关产品推荐

