今朝のアップデートで Azure Container Apps でも App Service のように、カスタムドメインを直接割り当てることが出来るようになりました。これまでは Front Door などを使う必要がありましたが、直接 Container App にカスタムドメインを割り当て出来るので、コスト面でも扱いやすくなりました。
IT's TRUE!!! You can now add Custom Domains to your Azure Container App!@AzContainerApp #AzureContainerApp @nthonyChu @yosoyvinisoto pic.twitter.com/06Ol357nNi
— Azure Container Apps (@AzContainerApp) 2022年5月13日
Container Apps のカスタムドメインは App Service と異なり、常に HTTPS が要求されるのでカスタムドメインの設定と同時に証明書の追加が必要になっています。Managed Certificate は数か月後に対応予定らしいので、暫くは手動で証明書を管理する必要があります。
Container App にカスタムドメインと証明書を追加する
基本的な設定方法は App Service とほぼ同じですが、折角なので試しておきます。適当なドメイン名を追加しようとすると、必要な DNS レコードの情報が表示されます。
ドメイン所有チェック用の TXT レコード名は App Service と同じく asuid
でした。この asuid
の TXT レコードは常に必要というわけではなく、既に検証済みのスコープであればスキップできるようでした。
DNS レコードの追加後に Validate を押すと、正しく設定されたかをチェックしてくれます。設定に問題が無い場合は、以下のように Pass という表示になるので分かりやすいです。
Next ボタンを押して次に進むと、証明書を選択する画面に切り替わります。最初は存在しないはずなので Create new を押して、PFX をアップロードする必要があります。
フォームにはパスワードの入力が存在していませんが、証明書名を入力すると出てきます。若干謎な挙動ですが、証明書名は必須なので気にしないことにします。
例によって Key Vault からダウンロードしたパスワード無しの証明書は通らないので、OpenSSL などを使ってパスワードを付ける必要があります。証明書のアップロード後は元の画面に戻るので、カスタムドメインに割り当てたい証明書を選べば完了です。
ちなみにアップロードした証明書は Container Apps Environment に紐づく形になっています。
App Service と同様に Key Vault Certificate からのインポートが出来るようになると管理が非常に楽になるので、今後のアップデートに期待したいところです。
一通り試したところ Zone Apex と Wildcard にもしっかり対応しているようでした。
Let's Encrypt 証明書を利用する
手動で証明書をアップロードする方法は、Managed Certificate や Key Vault Certificate のインポートが当たり前になった今では懐かしい手順です。最近は自作の Key Vault Acmebot を使って、必要な証明書を数秒で発行するのが当たり前だったので、手動で証明書を発行して PFX でアップロードするのが苦痛です。
Key Vault への対応を待っていたつもりですが、Azure Apps の偉い人 Jeff Hollan 氏からメールで相談を受けたので、Container Apps 向けの Acmebot 開発を引き継ぐことになりました。
App Service 版の Acmebot と同様の機能を持っています。HTTP-01 は無理なので DNS-01 のみ対応している関係上、Azure DNS が必須となっています。将来的には Key Vault Certificate からのインポートが出来ると信じているので、Azure DNS のみの対応にしています。
デプロイして RBAC 設定を行うと、DNS ゾーンを選んで必要な証明書を発行して、Container Apps Environment にアップロード出来るようになっています。
Container Apps ではカスタムドメインの追加時に証明書を指定する必要があるので、そのあたりの設定も自動で行うようなオプションを持っています。Container App を指定すると、必要な asuid
TXT レコードを作成してカスタムドメインの追加まで行います。
追加したドメインでブラウザからアクセスすると、以下のように Let's Encrypt の証明書が割り当てられていることが確認出来ます。複数ドメインにも対応していることが分かるはずです。
Managed Certificate では対応されないはずの SANs と Wildcard にも対応しているので、将来的にも一定の需要は残るのかなと思っています。
最優先は Key Vault 版ですが、App Service と Container Apps 版も継続して開発していく予定です。