はじめに
に対する回避策 3 となります。
この記事では、Web Apps 側に zip ファイルをアップロードすることなく、src-url を指定することで、Web Apps 側 からアプリケーションコードを取得することでデプロイを実現します。
Web アプリのネットワーク構成によっては、ローカル環境からサイトへの直接アクセスがブロックされる場合があります。 このシナリオでコードをデプロイするには、Web アプリからアクセス可能なストレージ システムに ZIP を公開し、Web アプリに ZIP を push するのではなく、ストレージの場所から ZIP を pull するようにアプリをトリガーするとよいでしょう。 詳細は、「本アーティクルのネットワークで保護された Web アプリへのデプロイ」を参照してください。
回避策
ストレージアカウント上など、URLのみでインターネット経由でアクセス可能な場所に zip ファイルを配置します。
以下のAPIを用いて、packageUriを指定します。
Azure Management API の呼び出しにはaz rest コマンドを利用します。
az rest コマンドは Management API を呼び出す場合の認証の手間がかなり楽になるので覚えておくと便利です。
az storage blob upload --account-name $STORAGE_ACCOUNT -c $CONTAINER -f app.zip
APP_URL=$(az storage blob generate-sas --full-uri --permissions r --expiry `date -u -d "10 minutes" '+%Y-%m-%dT%H:%MZ'` --account-name $STORAGE_ACCOUNT -c $CONTAINER -n app.zip | xargs)
az rest --method PUT \
--uri https://management.azure.com/subscriptions/${SUBSCRIPTION}/resourceGroups/${RESOURCE_GROUP}/providers/Microsoft.Web/sites/${WEBAPP}/extensions/onedeploy?api-version=2022-03-01 \
--body '{
"properties": {
"properties": {
"packageUri": "'"${APP_URL}"'"
},
"type": "zip",
}
}'
一時的に BLOB コンテナに配置する方法の詳細については、下記参考に記載のブログ記事を参照してください。
参考
下記ブログ記事にあるとおり、az cli では現時点(2.45.0)では、az webapp deploy --src-url を使う方法では、SCM サイトのエンドポイントが使われるため、アクセスできずにエラーとなります。
そのため、記事にあるとおり、Azure management API を利用する必要があります。