问题描述: 当在AWS Lambda中请求私有API网关后的另一个Lambda函数时,DNS解析不起作用。
解决方法:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAPIGatewayAccess",
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": "arn:aws:execute-api:{region}:{account}:{apiId}/{stage}/{method}/{resourcePath}"
}
]
}
其中,{region}是API网关所在的AWS区域,{account}是AWS账户ID,{apiId}是API网关的ID,{stage}是API网关的部署阶段,{method}是请求的HTTP方法(如GET、POST等),{resourcePath}是请求的资源路径。
确保Lambda函数所在的VPC具有正确的DNS设置。在VPC的DHCP选项集中,确保"Enable DNS resolution for VPC"和"Enable DNS hostnames"选项都已启用。
在Lambda函数的代码中,使用正确的URL进行请求。确保URL中包含私有API网关的域名和路径。例如:
import requests
def lambda_handler(event, context):
url = "https://{apiId}.execute-api.{region}.amazonaws.com/{stage}/path/to/lambda"
response = requests.get(url)
return response.text
在这个示例中,{apiId}是API网关的ID,{region}是API网关所在的AWS区域,{stage}是API网关的部署阶段,"path/to/lambda"是要请求的Lambda函数的路径。
通过以上步骤,应该能够解决Lambda请求私有API网关后的DNS解析问题。