web-dev-qa-db-ja.com

ラムダ関数のAPIエンドポイントを見つけるにはどうすればよいですか?

APIゲートウェイエンドポイントが公開されたLambda関数があり、AWSコンソールからそのためのURLを取得できます。ただし、API呼び出しでそのURLを取得したいと考えています。 Lambda APIドキュメンテーションAPI Gatewayドキュメンテーション もその情報を持っているようには見えない(またはおそらく私はそれを逃した)ので、これはそもそも可能ですか?

26
howcheng

API GatewayエンドポイントURLは、API呼び出しを介して公開されません。ただし、APIのURLは特定の構造に従うため、必要な部分をすべて取得し、コード内でURIを作成できます。

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

apigateway:rest-apis を使用してAPI-IDを取得し、 restapi:stages を使用してステージに対応する識別子を取得できます。

9
Jurgen

上記の答えがよくわかりません(おそらく古くなっているのでしょうか?)。

最も簡単な方法:

  1. AWSの[サービス]で[APIゲートウェイ]を選択します。
  2. APIをクリックします。
  3. 「ステージ」をクリックします。
  4. 使用したいステージを選択してください
  5. これで、「Invoke URL」という見出しが付いた上部の青いボックス内に非常に見やすいURL全体が表示されます。
36
larschanders

@larschandersコメントに続いて、CloudFormationを使用してゲートウェイを作成すると、エンドポイントURLがスタック出力の1つとして表示されます。

0
Peter Halverson

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
0
Peter Halverson