すべてのプロダクト
Search
ドキュメントセンター

API Gateway:カスタムドメイン名をバインドしてAPI呼び出しを許可する

最終更新日:Jul 31, 2024

このトピックでは、API GatewayでホストされているAPIグループにドメイン名をバインドする方法について説明します。 このように、クライアントがドメイン名を使用してこのAPIグループのAPIを呼び出すことを許可することで、外部サービスを提供できます。

1. 概要

1.1 ドメイン名、APIグループ、およびAPIはどのように関連していますか?

  • ドメイン名とAPIグループ間のマッピングを確立するには、ドメイン名をAPI GatewayでホストされているAPIグループにバインドする必要があります。

  • API GatewayがクライアントからHTTPリクエストを受信すると、API Gatewayは、リクエスト内のドメイン名、HTTPメソッド、およびパス情報に基づいて、リクエストを転送するAPIグループとAPIを識別します。

デフォルトでは、API Gatewayは各APIグループにパブリックの第2レベルドメイン名を提供します。 クライアントが既定のパブリック第2レベルドメイン名を使用してAPIグループ内のAPIを呼び出す場合、中国 (香港) リージョンおよび中国本土以外の他のリージョンには1日あたり100回のAPI呼び出しが課され、中国本土内のリージョンには1日あたり1,000回のAPI呼び出しが課されます。 API Gatewayによって提供されるパブリック第2レベルドメイン名を呼び出すために開始される各要求に対する応答は、ヘッダ内に「Content-Disposition: attachment; filename=ApiResponseForInnerDomain」情報を含む。 運用環境でAPIを公開する場合は、独立したドメイン名を対応するAPIグループにバインドする必要があります。 パブリックの第2レベルドメイン名に対して開始されるAPI呼び出しの数の制限は、独立したドメインに対しては有効ではありません。

1.2 ICPファイリング

中国本土内のリージョンのAPIグループに独立ドメイン名をバインドする場合は、ICPファイリングを申請するか、独立ドメイン名のICPファイリング情報にサービスプロバイダーとしてAlibaba Cloudを追加する必要があります。 独立ドメインを中国本土以外のリージョンのAPIグループにバインドする場合、ICPファイリングは必要ありません。

説明

内部ドメイン名をAPIグループにバインドする場合、ICPファイリングは必要ありません。

1.3 ドメイン名の所有権検証

ドメイン名は、同じインスタンスに属し、現在のAPIグループと同じベースパスを使用する別のAPIグループにバインドされていない場合、およびドメイン名がAPIグループにバインドされている他のワイルドカードドメイン名と競合しない場合にのみ、APIグループにバインドできます。 次のいずれかの方法を使用して、ドメイン名の所有権を確認できます。

  1. ドメイン名のCNAMEレコードを、API Gatewayが提供するパブリックの第2レベルドメイン名に追加します。

  2. バインドされたドメイン名にTXTタイプのレコードを追加します。 レコードの名前はAPIグループID.Domain name形式で、レコード値はapigateway-domain-verification=Public second-level domain name形式です。 例:

APIグループのIDはb7eb2f79e64f4431b08bbb948ed2567eです。 s b7eb2f79e64f4431b08bbb948ed2567e-cn-hangzhou.alicloudapi.comするパブリック第2レベルドメイン名。 APIグループにバインドされているドメイン名は、s youdomain.comなどの単一ドメイン名、または *.yourdomainなどのワイルドカードドメイン名です。 ドメイン名n=b7eb2f79e64f4431b08bbb948ed2567e-cn-hangzhou.alicloudapi.com、レコードタイプがTXT、ホスト名がs b7eb2f79e64f4431b08bbb948ed2567e.yourdomain.com、レコード値がapigateway-domain-verificatioのレコードを追加する必要があります。

重要
  • APIグループにバインドされている内部ドメイン名の所有権を確認する必要はありません。

  • ドメイン名をAPIグループにバインドしても、ドメイン名のCNAMEレコードを追加しない場合、クライアントからのドメイン名リクエストをAPI Gatewayにルーティングできません。

  • ドメイン名を異なるAPIグループにバインドする場合は、次の項目に注意してください。

    • グループが同じインスタンスに存在する場合、それらのBasePath値は異なる必要があります。 ベースパスの長さは最大300バイトです。

    • グループが異なるインスタンスに存在する場合、呼び出し元はドメインネームシステム (DNS) 設定を構成して、クライアントでリクエストを送信するインスタンスを指定する必要があります。

2. 単一のドメイン名のバインド

単一のドメイン名をAPIグループにバインドするには、次の手順を実行します。

  1. ドメイン名の解決: 独立したドメイン名のCNAMEレコードまたはTXTレコードを、APIグループによって提供されるパブリックの第2レベルドメイン名に追加します。

  2. ドメイン名のバインド: API Gatewayコンソールの [グループの詳細] ページで、独立したドメイン名をAPIグループにバインドします。

2.1 独立したドメイン名のCNAMEレコードを追加する

2.1.1 パブリック第2レベルドメイン名の解決

1. API Gatewayコンソールの [グループの詳細] ページで、デフォルトの第2レベルドメイン名を見つけます。

2. Alibaba Cloud DNSコンソールにログインします。 左側のナビゲーションウィンドウで、[DNSの管理] をクリックします。 [管理DNS] ページで、解決するドメイン名を見つけ、[ドメイン名] 列のドメイン名をクリックして [DNS設定] ページに移動します。

3. [レコードの追加] をクリックします。 [レコードの追加] パネルで、[タイプ] をCNAMEに、[ホスト] をドメイン名のプレフィックスに、[値] を手順1で取得したパブリックの第2レベルドメイン名に設定します。 [確認] をクリックします。

2.1.2 内部ドメイン名の解決

  1. API Gatewayコンソールの [グループの詳細] ページで、APIグループに提供されている仮想パブリッククラウド (VPC) タイプのドメイン名を確認します。

  2. Alibaba Cloud DNSコンソールに移動します。 左側のナビゲーションウィンドウで、[プライベートDNS (PrivateZone)] をクリックします。 [組み込み権限モジュール] タブで、[新しいゾーンの追加] をクリックします。 [組み込み権限ゾーンの追加] パネルで、[組み込み権限ゾーン] パラメーターを指定します。

説明

[組み込み権限ゾーン] パラメーターには、APIグループにバインドされているカスタムドメイン名を入力する必要があります。

3. ゾーン名をクリックします。 [リソースレコードの設定] タブで、[レコードの追加] をクリックします。 レコードの追加パネルで、CNAMEレコードを設定します。 [レコードの追加] パネルで、[レコードタイプ] ドロップダウンリストから [CNAME] を選択し、[ホスト名] にドメイン名のプレフィックスを入力し、[ステップ1] で取得したVPCタイプのドメイン名を [レコード値] に入力します。 次に、[OK] をクリックします。 次の図に例を示します。

image

4. プライベートDNS (PrivateZone) ページに移動します。 追加したゾーンを見つけ、[操作] 列の [有効範囲設定] をクリックします。 [ゾーン設定] タブで、[Alibaba Cloud VPC] フィールドでVPCを選択します。 [OK]をクリックします。

d960133f0be52987e3ca97684a48d04c

説明

プライベートゾーンに関連付けられているVPCにデプロイされているElastic Compute Service (ECS) インスタンスでは、プライベートゾーンレコードがインターネット上のDNSレコードを上書きします。 インターネット上のDNSレコードはVPCの外部では影響を受けないことに注意してください。 プライベートゾーンのレコードを追加することを推奨します。 VPCで開始されたクエリの場合、プライベートゾーンの空のレコードがインターネット上のDNSレコードを上書きする場合があります。 これによりエラーが発生します。 詳細については、「Alibaba Cloud DNS PrivateZoneの有効化」をご参照ください。

2.2 独立したドメイン名のバインド

1. API Gatewayコンソールにログインします。 左側のナビゲーションウィンドウで、[APIの管理]> [APIグループ] を選択します。 [APIグループ] ページで、独立したドメイン名をバインドするAPIグループを見つけ、[グループ] 列でAPIグループの名前をクリックします。 グループの詳細ページで、[独立ドメイン] セクションの [ドメイン名のバインド] をクリックします。

2. [ドメイン名のバインド] ダイアログボックスで、[ドメイン名] フィールドに解決されたドメイン名を入力し、[確認] をクリックします。

  • ドメイン名: APIグループにバインドするドメイン名。

  • 環境: ドメイン名に関連付けられている環境。 有効な値:

    • TEST: テスト環境でAPIのみを呼び出すことができます。

    • PRE: ステージング環境のAPIのみを呼び出すことができます。

    • RELEASE: 本番環境のAPIのみを呼び出すことができます。

    • デフォルト (X-Ca-Stage): 上記の環境ですべてのAPIを呼び出すことができます。 APIを呼び出すときに、X-Ca-Stageパラメーターをリクエストのヘッダーに追加して、APIを呼び出す環境を指定します。

  • ネットワークタイプ: インターネットタイプでは、インターネット経由でのみAPIを呼び出すことができます。 ネットワークタイプを内部ネットワークに設定した場合、内部ネットワークでのみAPIを呼び出すことができます。

説明

  • 内部ドメイン名の所有権を確認する必要はありません。 ドメイン名が、現在のAPIグループと同じインスタンスに属する別のAPIグループにバインドされているドメイン名と競合する場合、現在のドメイン名はAPIグループにバインドされません。

  • ドメイン名がAPIグループにバインドされた後は、ドメイン名のネットワークタイプを変更することはできません。 設定が正しくない場合は、ドメイン名を削除し、ドメイン名をAPIグループに再度バインドできます。

2.3 ドメイン名のバインドの失敗を処理する

原因と解決策:

  • バインドするドメイン名は、現在のインスタンスの別のAPIグループにバインドされているか、バインドした別のドメイン名と範囲が競合しています。 範囲の競合では、ワイルドカードドメイン名には単一のドメイン名が含まれます。 この場合、現在のドメイン名をバインドする前に、そのドメイン名のバインドを解除する必要があります。

  • バインドするドメイン名は、別のユーザーによって作成されたAPIグループにバインドされているか、バインドした別のドメイン名と範囲が競合しています。 範囲の競合では、ワイルドカードドメイン名には単一のドメイン名が含まれます。 この場合、ドメイン名の所有権を確認するには、このトピックの「ドメイン名の所有権確認」セクションに記載されている手順に従う必要があります。

2.4 API の呼び出し

バインドが完了したら、ドメイン名を使用してAPIグループのAPIを呼び出すことができます。 次の例は、cURLを使用してAPIを呼び出す方法を示しています。

curl http://yourdomain.com/apipath -i
HTTP/1.1 200 OK
Date: Mon, 23 Mar 2020 08:40:01 GMT
Connection: keep-alive
Keep-Alive: timeout=25
Server: Jetty(7.2.2.v20101205)
X-Ca-Request-Id: E2B8CBAB-D6EF-4576-838F-44DDC1A6B20D
重要

バインドされたドメイン名が内部ドメイン名の場合、ドメイン名に関連付けられているVPC内のAPIを呼び出す必要があります。

3. ワイルドカードドメイン名のバインド

API Gatewayでは、ワイルドカードドメイン名をAPIグループにバインドできます。 ワイルドカードドメイン名をパブリックの第2レベルドメイン名に解決し、API Gatewayコンソールでワイルドカードドメイン名をAPIグループにバインドできます。 バインドが完了したら、ワイルドカードドメイン名を使用して、API GatewayでホストされているAPIグループのAPIを呼び出すことができます。

たとえば、ドメインnam e abc.comの所有者であり、外部サービスを提供するためにAPI Gatewayにd 2.abc.com f abc.comなどのすべてのサブドメインを解決するs 1.abc.comは、次の手順を実行します。

  1. Alibaba Cloud DNSコンソールで、CNAMEレコードを使用して、* .abc.comをパブリックの第2レベルドメイン名に解決します。

  2. API Gatewayコンソールの [APIグループ] ページで、* .abc.comをAPIグループにバインドします。

  3. バインディングが完了すると、クライアントはサブドメインの1つを使用してAPIグループのAPIにアクセスできf abc.com。 たとえば、APIグループ内のAPIをGETメソッドを使用して匿名で呼び出すことができる場合、* .abc.comのサブドメインを使用してAPIを呼び出すこともできます。

重要

VPCにデプロイされているインスタンスのみがワイルドカードドメイン名をサポートしています。

3.1 手順

ワイルドカードドメイン名をバインドするために実行する操作は、このトピックの「単一ドメインのバインド」セクションで説明されている単一ドメインをバインドするために実行する操作と同様です。

  1. ワイルドカードドメイン名をバインドするときは、ワイルドカードドメイン名の所有権を確認する必要があります。 詳細については、「ドメイン名の所有権検証」セクションを参照してください。

  2. ワイルドカードドメイン名をバインドした後、[グループの詳細] ページでワイルドカードドメイン名テンプレートを設定する必要があります。 次に、ワイルドカードドメイン名を使用してAPIを呼び出すことができます。

ワイルドカードドメイン名テンプレートは、ドメイン名パラメーターを設定するために使用されます。 テンプレートの変数フィールドは、パラメーターとしてバックエンドサービスに渡すことができます。

4. デフォルトドメイン名の設定

API Gatewayを使用すると、ドメイン名のHTTPS証明書をアップロードできます。 次に、ドメイン名を使用してHTTPS経由でAPIを呼び出すことができます。 複数のドメイン名がAPIグループにバインドされており、これらすべてのドメイン名がHTTPSベースのAPI呼び出しをサポートしている場合は、デフォルトのドメイン名を設定する必要があります。 このように、SNIをサポートしていないクライアントからSSLハンドシェーク要求をAPI Gatewayが受信したときに、API Gatewayはデフォルトドメイン名の証明書を返すことができます。 デフォルトドメイン名が設定されていない場合、API Gatewayはランダムにドメイン名の証明書を返します。 デフォルトドメイン名の設定は、専用インスタンスにのみ適用されます。 デフォルトでは、共有インスタンスはデフォルトドメイン名の証明書をサポートしていません。 SNIをサポートしていない以前のバージョンのクライアントがHTTPS経由でAPI呼び出しを行うと、証明書の混乱エラーが発生する可能性があります。

[グループの詳細] ページの [HTTPS経由のアクセスをサポートするデフォルトドメイン名 (専用インスタンスのみ)] セクションでデフォルトドメイン名を設定できます。

重要

専用インスタンスでは、複数のAPIグループがすべてデフォルトドメイン名で設定されている場合、最初のAPIグループに設定されているデフォルトドメイン名のみをロードできます。