App Service での名前解決 (DNS)
アプリは、依存リソースを呼び出すときに DNS を使用します。 リソースは、Key Vault、Storage、Azure SQL などの Azure サービスである場合もありますが、アプリが依存する Web API である場合もあります。 たとえば、myservice.com を呼び出すときには、DNS を使用して名前を IP に解決します。 この記事では、App Service が名前解決を処理する方法と、使用する DNS サーバーを決定する方法について説明します。 この記事では、DNS 解決の構成に使用できる設定についても説明します。
App Service での名前解決のしくみ
アプリを仮想ネットワークと統合しておらず、カスタム DNS が構成されていない場合、アプリにより Azure DNS が使用されます。 アプリを仮想ネットワークと統合している場合、アプリは仮想ネットワークの DNS 構成を使用します。 仮想ネットワークの既定でも、Azure DNS を使用します。 仮想ネットワークを介して、Azure DNS プライベート ゾーンにリンクし、それをプライベート エンドポイント解決またはプライベート ドメイン名解決に使用することもできます。
カスタム DNS サーバーの一覧を指定して仮想ネットワークを構成した場合、App Service での名前解決では最大 5 つの DNS サーバーが使用されます。 仮想ネットワークがカスタム DNS サーバーを使用していて、プライベート エンドポイントを使用している場合は、この記事をよくお読みください。 また、カスタム DNS サーバーは、アプリで使用されるパブリック DNS レコードを解決できることを考慮する必要があります。 DNS 構成では、パブリック DNS サーバーに要求を転送するか、カスタム DNS サーバーの一覧に Azure DNS などのパブリック DNS サーバーを含めるか、アプリ レベルで代替サーバーを指定する必要があります。
アプリが DNS を使用してドメイン名を解決する必要がある場合、アプリは、構成されているすべての DNS サーバーに名前解決要求を送信します。 一覧内の最初のサーバーがタイムアウト制限以内に応答を返した場合は、すぐに結果が返されます。 そうでない場合、アプリは、タイムアウト期間が経過するまで他のサーバーによる応答を待機し、サーバーが構成されている順序で DNS サーバー応答を評価します。 どのサーバーもタイムアウト期間以内に応答せず、再試行を構成した場合は、このプロセスが繰り返されます。
DNS サーバーを構成する
個々のアプリでは、dnsConfiguration
サイト プロパティ オブジェクトで dnsServers
プロパティを指定することで、DNS 構成をオーバーライドできます。 最大 5 個のカスタム DNS サーバーを指定できます。 カスタム DNS サーバーは、Azure CLI を使用して構成できます。
az resource update --resource-group <group-name> --name <app-name> --resource-type "Microsoft.Web/sites" --set properties.dnsConfiguration.dnsServers="['168.63.129.16','xxx.xxx.xxx.xxx']"
DNS アプリの設定
App Service には、DNS サーバーと名前解決の動作を構成するための既存のアプリ設定があります。 両方が存在する場合は、サイトのプロパティによってアプリの設定がオーバーライドされます。 サイトのプロパティには、Azure Policy で監査可能であり、構成時に検証されるという利点があります。 サイトのプロパティの使用をお勧めします。
既存の WEBSITE_DNS_SERVER
アプリ設定を引き続き使用でき、いずれかの設定でカスタム DNS サーバーを追加できます。 アプリ設定を使用して複数の DNS サーバーを追加する場合は、サーバーをコンマで (空白は追加せずに) 区切る必要があります。
アプリ設定 WEBSITE_DNS_ALT_SERVER
を使用して、構成された DNS サーバーの一覧に特定の DNS サーバーを追加します。 代替 DNS サーバーは、明示的に構成された DNS サーバーと、仮想ネットワークから継承された DNS サーバーの両方に追加されます。
名前解決の動作を構成するためのアプリ設定も存在しており、WEBSITE_DNS_MAX_CACHE_TIMEOUT
、WEBSITE_DNS_TIMEOUT
、WEBSITE_DNS_ATTEMPTS
と名前が付けられています。
名前解決の動作を構成する
名前解決をきめ細かく制御する必要がある場合、App Service では、既定の動作を変更できます。 再試行回数、再試行タイムアウト、キャッシュ タイムアウトを変更できます。 キャッシュ期間を無効化または短縮するなど、動作を変更すると、パフォーマンスに影響する可能性があります。
プロパティ名 | Windows の既定値 | Linux の既定値 | 使用できる値 | 説明 |
---|---|---|---|---|
dnsRetryAttemptCount | 1 | 5 | 1 - 5 | 解決の試行回数を定義します。1 は再試行しないことを意味します。 |
dnsMaxCacheTimeout | 30 | 0 | 0-60 | DNS の結果は、個々のレコードの TTL に従ってキャッシュされますが、定義された最大キャッシュ タイムアウトを超えません。 キャッシュをゼロに設定すると、キャッシュが無効になります。 |
dnsRetryAttemptTimeout | 3 | 1 | 1-30 | 再試行または失敗になるまでのタイムアウト。 タイムアウトは、プライマリが応答しない場合にセカンダリ サーバーの結果を待機する時間も定義します。 |
Note
- 名前解決の動作の変更は、Windows コンテナー アプリではサポートされていません。
dnsMaxCacheTimeout
を構成するには、アプリ設定のWEBSITE_ENABLE_DNS_CACHE
="true" を追加してキャッシュが有効になっていることを確認する必要があります。 キャッシュを有効にしてもdnsMaxCacheTimeout
を構成しない場合、タイムアウトは 30 に設定されます。
次の CLI コマンドを使用して、名前解決の動作を構成します。
az resource update --resource-group <group-name> --name <app-name> --set properties.dnsConfiguration.dnsMaxCacheTimeout=[0-60] --resource-type "Microsoft.Web/sites"
az resource update --resource-group <group-name> --name <app-name> --set properties.dnsConfiguration.dnsRetryAttemptCount=[1-5] --resource-type "Microsoft.Web/sites"
az resource update --resource-group <group-name> --name <app-name> --set properties.dnsConfiguration.dnsRetryAttemptTimeout=[1-30] --resource-type "Microsoft.Web/sites"
次の CLI コマンドを使用して、設定を検証します。
az resource show --resource-group <group-name> --name <app-name> --query properties.dnsConfiguration --resource-type "Microsoft.Web/sites"