AzureのApp ServiceでPrivate Linkにした場合のWebhook URL

2023/09/19に公開

小ネタ
要するに以下の話なので、理解してる人は以降を読む必要はないかと思います
https://learn.microsoft.com/en-us/answers/questions/320722/container-registry-webhook-to-app-service-with-pri

App Serviceを作って、パブリックアクセスを無効化、プライベートリンクを設定

App ServiceのソースをAzure Container RegistryのDockerコンテナにしていた場合、webhookが効かなくなります
=継続的deployが止まることになります

原因はAzure Container RegistryがWebhook URLをインターネット側に送信するためです

以下の通り、Azure Container RegistryのWebhooksの結果画面は403になっています

ですので、この構成で作る場合は、継続的デプロイのチェックはチェックしても効力がないです

ただwebhook urlが無くなったわけでなく、Vnet側からリクエストするすると機能する状態になっています

# vnet内部のVirtual Machinesからリクエストする例
$ curl -X POST 'https:// ユーザー名 : パスワード @ アプリ名 .scm.azurewebsites.net/api/registry/webhook'
{"OperationId":"c7043c3c-b7db-4658-8128-e65095e0d884","TrackingUrl":"https://xxxxxxxxxxx.scm.azurewebsites.net/api/logstream?filter=op:c7043c3c-b7db-4658-8128-e65095e0d884,volatile:false"}

プライベートDNSを作っているならプライベートリンク作成時に アプリ名 .scm というレコードも作成されています
そのため、内部からは叩く場合でもWebhook URLに変更は必要ありません

対策は、なんとかしてVPNだったりVNet統合が使えるアプリからwebhook URLにリクエストするかApp serviceを操作できるサービスプリンシパルを作ってdocker push -> app serviceの再起動をするのが良いのかもしれないです

Discussion