如何找到lambda函数的API端点?

how*_*eng 18 aws-lambda aws-api-gateway

我有一个Lambda函数,它有一个公开的API网关端点,我可以通过AWS控制台获取该URL.但是,我想通过API调用获取该URL.无论是LAMBDA API文档,也不是API Gateway文档似乎有该信息(或者也许我已经错过了它),所以这是甚至可能摆在首位?

lar*_*ers 43

我真的不明白上面的答案(也许它已经过时了?).

绝对最简单的方法:

  1. 在AWS中的"服务"下选择"API网关".
  2. 点击您的API.
  3. 点击"阶段".
  4. 选择您要使用的舞台
  5. 现在,您可以在顶部的蓝色框内看到整个URL非常明显,标题为"调用URL"

  • 我正在尝试以编程方式进行操作。 (3认同)

Jur*_*gen 10

您的API网关端点URL不会通过API调用公开.但是,由于API的URL遵循某种结构,因此您可以获得所有必需的部分并在代码中创建URI.

https://API-ID.execute-api.REGION.amazonaws.com/STAGE

您可以使用apigateway:rest-apis获取您的API-ID和restapi:阶段以获取阶段对应的标识符.


Pet*_*son 5

我没有看到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
Run Code Online (Sandbox Code Playgroud)