Azure Front Door を使用して Azure Container App へのプライベート リンクを作成する (プレビュー)
この記事では、パブリック インターネットではなくプライベート リンクを使用して、Azure Front Door から Azure Container Apps に直接接続する方法について説明します。 このチュートリアルでは、Azure Container Apps ワークロード プロファイル環境と Azure Front Door を作成し、プライベート リンクを介して安全に接続します。 次に、コンテナー アプリと Azure Front Door の間の接続を確認します。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。
- 持っていない場合は、無料で作成できます。
この機能は、Azure CLI でのみ使用できます。 最新バージョンの Azure CLI を実行していることを確認するには、次のコマンドを実行します。
az upgrade
Azure CLI 用の Azure Container Apps 拡張機能の最新バージョン。 最新バージョンを実行していることを確認するには、次のコマンドを実行します。
az extension add --name containerapp --upgrade --allow-preview true
Note
2024 年 5 月以降、Azure CLI 拡張機能では、既定でプレビュー機能が有効になりません。 Container Apps のプレビュー機能にアクセスするには、
--allow-preview true
を使用して Container Apps 拡張機能をインストールします。この機能は、ワークロード プロファイル環境でのみサポートされます。
前提条件とセットアップの詳細については、「クイック スタート: containerapp up を使用して最初のコンテナー アプリをデプロイする」を参照してください。
環境変数の設定
以下の環境変数を設定します。
RESOURCE_GROUP="my-container-apps"
LOCATION="centralus"
ENVIRONMENT_NAME="my-environment"
CONTAINERAPP_NAME="my-container-app"
AFD_PROFILE="my-afd-profile"
AFD_ENDPOINT="my-afd-endpoint"
AFD_ORIGIN_GROUP="my-afd-origin-group"
AFD_ORIGIN="my-afd-origin"
AFD_ROUTE="my-afd-route"
Azure リソース グループの作成
コンテナー アプリのデプロイに関連するサービスを整理するためのリソース グループを作成します。
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION
環境の作成
Container Apps 環境を作成します。
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
環境 ID を取得します。 これを使用して環境を構成します。
ENVIRONMENT_ID=$(az containerapp env show \ --resource-group $RESOURCE_GROUP \ --name $ENVIRONMENT_NAME \ --query "id" \ --output tsv)
環境のパブリック ネットワーク アクセスを無効にします。
az containerapp env update \ --id $ENVIRONMENT_ID \ --public-network-access Disabled
コンテナー アプリをデプロイする
次のコマンドを実行して、環境内にコンテナー アプリをデプロイします。
az containerapp up \ --name $CONTAINERAPP_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --environment $ENVIRONMENT_NAME \ --image mcr.microsoft.com/k8se/quickstart:latest \ --target-port 80 \ --ingress external \ --query properties.configuration.ingress.fqdn
コンテナー アプリのエンドポイントを取得します。
ACA_ENDPOINT=$(az containerapp show \ --name $CONTAINERAPP_NAME \ --resource-group $RESOURCE_GROUP \ --query properties.configuration.ingress.fqdn \ --output tsv)
コンテナー アプリ エンドポイントを参照すると、コンテナー アプリ環境でパブリック アクセスが無効になっているため、
ERR_CONNECTION_CLOSED
が表示されます。 代わりに、AFD エンドポイントを使用してコンテナー アプリにアクセスします。
Azure Front Door プロファイルを作成する
AFD プロファイルを作成します。 SKU Standard_AzureFrontDoor
を使用する AFD プロファイルの配信元では、プライベート リンクはサポートされていません。
az afd profile create \
--profile-name $AFD_PROFILE \
--resource-group $RESOURCE_GROUP \
--sku Premium_AzureFrontDoor
Azure Front Door エンドポイントを作成する
AFD プロファイルにエンドポイントを追加します。
az afd endpoint create \
--resource-group $RESOURCE_GROUP \
--endpoint-name $AFD_ENDPOINT \
--profile-name $AFD_PROFILE \
--enabled-state Enabled
Azure Front Door の配信元グループを作成する
AFD 配信元グループを作成します。
az afd origin-group create \
--resource-group $RESOURCE_GROUP \
--origin-group-name $AFD_ORIGIN_GROUP \
--profile-name $AFD_PROFILE \
--probe-request-type GET \
--probe-protocol Http \
--probe-interval-in-seconds 60 \
--probe-path / \
--sample-size 4 \
--successful-samples-required 3 \
--additional-latency-in-milliseconds 50
Azure Front Door の配信元を作成する
配信元グループに AFD 配信元を追加します。
az afd origin create \
--resource-group $RESOURCE_GROUP \
--origin-group-name $AFD_ORIGIN_GROUP \
--origin-name $AFD_ORIGIN \
--profile-name $AFD_PROFILE \
--host-name $ACA_ENDPOINT \
--origin-host-header $ACA_ENDPOINT \
--priority 1 \
--weight 500 \
--enable-private-link true \
--private-link-location $LOCATION \
--private-link-request-message "AFD Private Link Request" \
--private-link-resource $ENVIRONMENT_ID \
--private-link-sub-resource-type managedEnvironments
プライベート エンドポイント接続を一覧表示する
次のコマンドを実行して、環境のプライベート エンドポイント接続を一覧表示します。
az network private-endpoint-connection list \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --type Microsoft.App/managedEnvironments
応答にあるプライベート エンドポイント接続のリソース ID を記録します。 プライベート エンドポイント接続には、
AFD Private Link Request
のproperties.privateLinkServiceConnectionState.description
値があります。 プライベート エンドポイント接続リソース ID は次のようなものです。/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.App/managedEnvironments/my-environment/privateEndpointConnections/<PRIVATE_ENDPOINT_CONNECTION_ID>
これを、以下のようなプライベート エンドポイント ID と混同しないでください。
/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/eafd-Prod-centralus/providers/Microsoft.Network/privateEndpoints/<PRIVATE_ENDPOINT_ID>
プライベート エンドポイント接続を承認する
次のコマンドを実行して接続を承認します。 <PLACEHOLDER> を、前のセクションで記録したプライベート エンドポイント接続リソース ID に置き換えます。
az network private-endpoint-connection approve --id <PRIVATE_ENDPOINT_CONNECTION_RESOURCE_ID>
ルートを追加する
次のコマンドを実行して、先ほど作成したエンドポイントを配信元グループにマップします。 Azure Container Apps のプライベート エンドポイントでは、インバウンドの HTTP トラフィックのみがサポートされています。 TCP トラフィックはサポートされていません。
az afd route create \
--resource-group $RESOURCE_GROUP \
--profile-name $AFD_PROFILE \
--endpoint-name $AFD_ENDPOINT \
--forwarding-protocol MatchRequest \
--route-name $AFD_ROUTE \
--https-redirect Enabled \
--origin-group $AFD_ORIGIN_GROUP \
--supported-protocols Http Https \
--link-to-default-domain Enabled
Azure Front Door からコンテナー アプリにアクセスする
AFD エンドポイントのホスト名を取得します。
az afd endpoint show \ --resource-group $RESOURCE_GROUP \ --profile-name $AFD_PROFILE \ --endpoint-name $AFD_ENDPOINT \ --query hostName \ --output tsv
ホスト名は次の例のようなものです。
my-afd-endpoint.<HASH>.b01.azurefd.net
ホスト名を参照します。 クイックスタート コンテナー アプリ イメージの出力が表示されます。
AFD プロファイルがグローバルにデプロイされるまでに数分かかります。そのため、最初に期待した出力が表示されない場合は、数分待ってから更新してください。
リソースをクリーンアップする
このアプリケーションを引き続き使用しない場合は、my-container-apps リソース グループ を削除できます。 これにより、Azure Container Apps インスタンスと関連するすべてのサービスが削除されます。 また、Container Apps サービスによって自動的に作成され、カスタム ネットワーク コンポーネントを含むリソース グループも削除されます。
注意事項
次のコマンドを実行すると、指定されたリソース グループとそれに含まれるすべてのリソースが削除されます。 指定したリソース グループにこのガイドの範囲外のリソースが存在する場合、それらも削除されます。
az group delete --name $RESOURCE_GROUP