Web App for Containersで、vNet(vNet統合)を経由したACRからのpullを試しました。
App Service Team Blog に手順が公開されていますが、Azure Portalからの実現方法やデプロイメントスロットを使った場合の注意点を残します。
構成
vNet作成
- 以下のリソースを作成します。作成手順は割愛します。
- vNet
- vm-subnet
- private-endpoint-subnet
- vnet-integration-subnet
- vNet
ACR作成
サンプルアプリケーション準備
VM作成
- 検証用のVMを作成します。作成先Subnetはvm-subnetとし、OSはUbuntuとします。
サンプルイメージをACRにPush
- 検証用VMにログインしサンプルアプリをACRにPushします。
# echo '<h1>ACR Test v1</h1>' > index.html
# echo 'FROM nginx:latest' > Dockerfile
# echo 'COPY index.html /usr/share/nginx/html' >> Dockerfile
# az login
# az account list --output table --all
# az account set --subscription [Subscrption ID]
# az acr build --registry [Container Registry Name] --image nginx-test:v1 .
Web App for Containers作成
Web App for Containers設定
PrivateEndpoint設定
-
特定のvNetからしかアクセスできないよう設定します。
-
サブネットは事前に作成したプライベートエンドポイントのサブネットを指定します。vNet内からプライベートIPで名前解決させたいため、プライベートDNSゾーンと統合します。
vNet統合
-
vNetを経由してACRからPullするために、vNet統合を設定します。
ManagedID設定
アプリケーション設定
-
Azure CLIから以下コマンドを実行します。この設定を入れることでACRの管理者ユーザーを無効にすることができます。
az resource update --resource-group [Resource Group Name] --name [Web App Name]/config/web --set properties.acrUseManagedIdentityCreds=true --resource-type 'Microsoft.Web/sites/config'
ACR設定
Private Endpoint作成
RBAC設定
検証
- 検証用VMから再度ACRにpushします。
# echo '<h1>ACR Test v2</h1>' > index.html
# az acr build --registry [Container Registry Name] --image nginx-test:v1 .
-
検証用VMから確認し、v2に変わっていればOKです。(App Serviceをプライベートエンドポイント経由のみにしているため、vNet内からしかアクセスできなくなっています)
# curl https://[Web App Name].azurewebsites.net
<h1>ACR Test v2</h1>
デプロイメントスロット設定
- デプロイメントスロットでは スワップされない設定 があります。
- 以下設定をデプロイメントスロット側にも実施することで、デプロイメントスロットでACRからPullすることができます。
- マネージドID
- VNET統合
- プライベートエンドポイント
- アプリケーション設定
- VNET統合サブネットはApp Serviceが分かれるとサブネットも分ける必要がありますが、デプロイメントスロットは同じApp Serviceなので、VNET統合サブネットは共存することが可能です。
以上