AWS CLI / SDK はデフォルトでどのサービスエンドポイント URL を使いますか
困っていた内容
AWS CLI / SDK がデフォルトでどのサービスエンドポイント URL を使用しているのか確認したいです。
また、実際にどのサービスエンドポイントにリクエストが送られているかを確認する方法も知りたいです。
どう対応すればいいの?
AWS CLI / SDK がデフォルトで使うサービスエンドポイント
特別な設定をしない限り、AWS CLI / SDK は以下の形式の標準サービスエンドポイントを使用します。
https://<サービスコード>.<リージョンコード>.amazonaws.com
たとえば東京リージョンの EC2 であれば https://ec2.ap-northeast-1.amazonaws.com となります。
一方で、VPC エンドポイントの DNS 名などで ec2.ap-northeast-1.api.aws のような .api.aws ドメインを目にすることがあるかもしれません。
これは「デュアルスタックエンドポイント」と呼ばれ、IPv4 と IPv6 の両方をサポートするサービスエンドポイントです。
このエンドポイントは、以下のいずれかを明示的に設定した場合にのみ使用されます。
- 環境変数 AWS_USE_DUALSTACK_ENDPOINT=true を設定している場合
- ~/.aws/config に use_dualstack_endpoint = true を設定している場合
- --endpoint-url オプションで明示的に指定している場合
AWS のサービスによっては、IPv4 または IPv6 リクエストを使用してアクセスできるように、デュアルスタックエンドポイントを提供しています。一般的には、デュアルスタックエンドポイントの構文は、次のとおりです。
protocol://service-code.region-code.api.aws
ただし、Amazon S3 はデュアルスタックエンドポイントに次の構文を使用します。
protocol://service-code.dualstack.region-code.amazonaws.com
デュアルスタックのエンドポイントにリクエストを送信するには、ツールまたは AWS SDK が提供するメカニズムを使用してエンドポイントを指定する必要があります。たとえば、AWS CLI は --endpoint-url オプションを提供します。
そのため、デフォルト設定のままであれば、AWS CLI / SDK は .api.aws ドメインへのリクエストを行わず、.amazonaws.com 形式のサービスエンドポイントを使用します。
実際のリクエスト先を確認する方法
AWS CLI の場合は、--debug オプションを付与することで実際に送信されるリクエストの URL を確認できます。
aws <サービス> <コマンド> --debug 2>&1 | grep "Sending http request"
出力に以下のような行が含まれ、実際のリクエスト先 URL を確認できます。
2019-08-12 12:36:18,344 - MainThread - botocore.endpoint - DEBUG - Sending http request: <AWSPreparedRequest stream_output=False, method=POST, url=https://iam.amazonaws.com/, ...>
AWS SDK の場合は、各 SDK のデバッグログを有効化することで同様に確認できます。
Python (Boto3) であれば、以下のように boto3.set_stream_logger を設定することでリクエスト先 URL がログに出力されます。
import boto3
import logging
boto3.set_stream_logger('botocore', logging.DEBUG)
client = boto3.client('ec2', region_name='ap-northeast-1')
client.describe_regions()
2026-04-23 18:16:48,111 botocore.endpoint [DEBUG] Sending http request: <AWSPreparedRequest stream_output=False, method=POST, url=https://ec2.ap-northeast-1.amazonaws.com/, ...>
参考情報







