如何从AWS API Gateway获取端点或URI?我只从管理控制台看到arn
答案 0 :(得分:2)
您需要部署API才能获取端点URL。可以在不同的伪装下部署相同的API - 您可以将其称为“dev”用于开发部署或“prod”用于生产目的。
只有在部署后才能以这种方式访问API,因此:
答案 1 :(得分:0)
如果您知道rest-api端点的名称(并且已按照@pogul的说明进行部署),则可以构造URL。这是一个使用boto3的简短python命令行应用程序,它将返回给定名称的URL。
#!/usr/bin/env python
import argparse
import boto3
# for example:
# https://abcd123456.execute-api.us-east-2.amazonaws.com/mydeploystage
SUBDOMAIN = 'execute-api'
SECOND_LEVEL_DOMAIN = "amazonaws"
EXT = "com"
session = boto3.session.Session()
default_region = session.region_name
DEFAULT_PROTOCOL = 'https'
parser = argparse.ArgumentParser(description="guess the urls given a rest endpoint")
parser.add_argument("name", help="name of the rest-api endpoint")
parser.add_argument("--region", default=default_region, help=f"region (default: {default_region})")
parser.add_argument("--protocol", default=DEFAULT_PROTOCOL, help=f"protocol (default: {DEFAULT_PROTOCOL})")
args = parser.parse_args()
client = boto3.client('apigateway')
response = client.get_rest_apis()
name_to_result = {result.get('name'): result for result in response.get('items')}
api_endpoint = name_to_result[args.name]
api_id = api_endpoint['id']
response = client.get_stages(restApiId=api_id)
for stage in response['item']:
stage_name = stage['stageName']
domain_name = ".".join([api_id, SUBDOMAIN, args.region, SECOND_LEVEL_DOMAIN, EXT])
url = f"{args.protocol}://{domain_name}/{stage_name}"
print(url)