Azure AD テナントを削除するときにエンタープライズアプリケーションが削除できない

Azure ADテナント(Azure AD B2Cを含む)を削除するときにはいろいろ手順を踏まないといけませんが、その中でも面倒なのが Microsoftのファーストパーティーアプリケーション(Microsoft First Party Application) とかいうやつです。
テナント削除時は登録したユーザーやアプリケーションなど関連リソースは全部消してからでないとテナント削除できませんが、このファーストパーティーアプリケーションは削除が無効化されてたりします。

ちゃんと(?)削除する場合は松村さんが書いてるPowerShellとかで削除するといいですが、もう削除しようとしているテナントの為にAzure PowerShell環境用意したり、Cloud Shellがんばったりするの面倒ですよね。

Microsoft ファーストパーティー以外のアプリは削除しておかないといけませんが、Microsoftファーストパーティーのアプリはサインインさえできなくなっていれば実は問題ない感じです。

というわけで「ユーザーのサインインが有効になっていますか?」を「いいえ」にして保存すれば無理に削除しなくてもテナント削除できる可能性があります。

という感じで削除したい場合に試してみてください。

続きを読む

TerraformでWeb Appsにカスタムドメイン名を設定したい

TerraformでAzure App ServiceのWeb Appsにカスタムドメイン名(特にネイキッドドメイン)を設定したい場合、AレコードにIPアドレスを設定する必要がありますが、App Serviceの受信IPアドレスを簡単にとれません。

Azure Resource Manager(ARM)上は一応 inbound_ip_address があるんですけどTerraform上で扱えないんですよね。以前は無理やりoutbound_ip_address (送信IPアドレス)の最初の要素を使ったりしてましたが(受信IPアドレスが最初に入ってた)不確かで実際最近はそんなことはないのでうまく設定できない状況でした。

で、どうしたものか悩んでたら ‘web apps名’.azurewebsites.net を正引きしてIPアドレスを取得すれば確実、ということらしく hashicorp/dns で取得したIPアドレスを使えばいいようです。

resource "azurerm_linux_web_app" "example" {
  name                = "example"
  resource_group_name = azurerm_resource_group.example.name
  location            = azurerm_service_plan.example.location
  service_plan_id     = azurerm_service_plan.example.id

  site_config {}
}

data "dns_a_record_set" "app_ip_address" {
  host = azurerm_linux_web_app.example.default_hostname
}

resource "azurerm_dns_a_record" "dns_a" {
  # ...
  target_resource_id  = data.dns_a_record_set.app_ip_address.addrs[0]
}

他にはTraffic ManagerのAzureリソースのエンドポイントでApp Serviceが使えたらそもそもこんな苦労しなくていいのに、とか思いますけど。。
たまにTerraform触るたびにいろいろ嵌りますね。

追記

しばやん氏からのタレコミによるとそもそもAzure REST API Specからしてinbound IP addressは欠落してるぽい。(resource Explorerとかで見るとちゃんとあるのでSpec側のミス)

APIの実装って大変ですね