如何从AWS API Gateway获取端点/ URI?

时间:2016-07-04 07:41:40

标签: amazon-web-services aws-api-gateway

如何从AWS API Gateway获取端点或URI?我只从管理控制台看到arn

2 个答案:

答案 0 :(得分:2)

您需要部署API才能获取端点URL。可以在不同的伪装下部署相同的API - 您可以将其称为“dev”用于开发部署或“prod”用于生产目的。

只有在部署后才能以这种方式访问​​API,因此:

  • 转到“API>资源”
  • 使用“操作”按钮,“操作>部署API”
  • 将其部署为,例如“dev的”
  • 然后,在“API> Stages”下,选择部署,您将在顶部的横幅中看到该网址,“调用网址:https://...amazonaws.com/dev

答案 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)