我有一个Lambda函数,它有一个公开的API网关端点,我可以通过AWS控制台获取该URL。但是,我想通过API调用获取该URL。 Lambda API documentation和API Gateway documentation似乎都没有这些信息(或者我可能错过了它),所以这首先是可能的吗?
答案 0 :(得分:24)
我真的不明白上述答案(也许它已经过时了?)。
绝对最简单的方法:
答案 1 :(得分:7)
您的API网关端点URL不会通过API调用公开。但是,由于API的URL遵循某种结构,您可以获得所有必需的部分并在代码中创建URI。
https://API-ID.execute-api.REGION.amazonaws.com/STAGE
您可以使用apigateway:rest-apis获取API-ID,restapi:stages获取舞台相应的标识符。
答案 2 :(得分:1)
我没有看到OP问题的直接答案(使用API获取端点URL)。这是一小段Python代码,即使您使用的是其他语言绑定或CLI,我也希望能以此为指导。请注意,获取内部端点与获取任何关联的自定义域端点的方法有所不同。
import boto3
apigw = boto3.client('apigateway')
def get_rest_api_internal_endpoint(api_id, stage_name, region=None):
if region is None:
region = apigw.meta.region_name
return f"https://{api_id}.execute-api.{region}.amazonaws.com/{stage_name}"
def get_rest_api_public_endpoints(api_id, stage_name):
endpoints = []
for item in apigw.get_domain_names().get('items',[]):
domain_name = item['domainName']
for mapping in apigw.get_base_path_mappings(domainName=domain_name).get('items', []):
if mapping['restApiId'] == api_id and mapping['stage'] == stage_name:
path = mapping['basePath']
endpoint = f"https://{domain_name}"
if path != "(none)":
endpoint += path
endpoints.append(endpoint)
return endpoints
答案 3 :(得分:0)
跟进@larschanders注释,如果使用CloudFormation创建网关,则端点URL将作为堆栈输出之一浮出水面。
答案 4 :(得分:0)
答案 5 :(得分:0)
如果您使用CloudFormation,则可以通过Python和Boto3获得此功能:
import boto3
cloudformation = boto3.resource('cloudformation')
stack = cloudformation.Stack(name=stack_name)
api_url = next(
output['OutputValue'] for output in stack.outputs
if output['OutputKey'] == 'EndpointURL')
答案 6 :(得分:-1)
非常精确地转到 AWS 控制台搜索: