次の方法で共有


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

環境の作成

  1. Container Apps 環境を作成します。

    az containerapp env create \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    
  2. 環境 ID を取得します。 これを使用して環境を構成します。

    ENVIRONMENT_ID=$(az containerapp env show \
        --resource-group $RESOURCE_GROUP \
        --name $ENVIRONMENT_NAME \
        --query "id" \
        --output tsv)
    
  3. 環境のパブリック ネットワーク アクセスを無効にします。

    az containerapp env update \
        --id $ENVIRONMENT_ID \
        --public-network-access Disabled
    

コンテナー アプリをデプロイする

  1. 次のコマンドを実行して、環境内にコンテナー アプリをデプロイします。

    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
    
  2. コンテナー アプリのエンドポイントを取得します。

    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

プライベート エンドポイント接続を一覧表示する

  1. 次のコマンドを実行して、環境のプライベート エンドポイント接続を一覧表示します。

    az network private-endpoint-connection list \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --type Microsoft.App/managedEnvironments
    
  2. 応答にあるプライベート エンドポイント接続のリソース ID を記録します。 プライベート エンドポイント接続には、AFD Private Link Requestproperties.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 からコンテナー アプリにアクセスする

  1. 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
    
  2. ホスト名を参照します。 クイックスタート コンテナー アプリ イメージの出力が表示されます。

    AFD プロファイルがグローバルにデプロイされるまでに数分かかります。そのため、最初に期待した出力が表示されない場合は、数分待ってから更新してください。

リソースをクリーンアップする

このアプリケーションを引き続き使用しない場合は、my-container-apps リソース グループ を削除できます。 これにより、Azure Container Apps インスタンスと関連するすべてのサービスが削除されます。 また、Container Apps サービスによって自動的に作成され、カスタム ネットワーク コンポーネントを含むリソース グループも削除されます。

注意事項

次のコマンドを実行すると、指定されたリソース グループとそれに含まれるすべてのリソースが削除されます。 指定したリソース グループにこのガイドの範囲外のリソースが存在する場合、それらも削除されます。

az group delete --name $RESOURCE_GROUP