APIゲートウェイエンドポイントが公開されたLambda関数があり、AWSコンソールからそのためのURLを取得できます。ただし、API呼び出しでそのURLを取得したいと考えています。 Lambda APIドキュメンテーション も API Gatewayドキュメンテーション もその情報を持っているようには見えない(またはおそらく私はそれを逃した)ので、これはそもそも可能ですか?
API GatewayエンドポイントURLは、API呼び出しを介して公開されません。ただし、APIのURLは特定の構造に従うため、必要な部分をすべて取得し、コード内でURIを作成できます。
https://API-ID.execute-api.REGION.amazonaws.com/STAGE
apigateway:rest-apis を使用してAPI-IDを取得し、 restapi:stages を使用してステージに対応する識別子を取得できます。
上記の答えがよくわかりません(おそらく古くなっているのでしょうか?)。
最も簡単な方法:
@larschandersコメントに続いて、CloudFormationを使用してゲートウェイを作成すると、エンドポイントURLがスタック出力の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