最近新しいAFDが出たと教えていただいたので触ってみました。
どうやらDNSやCDNがAFDの機能として使えるようになったようです。今回は以下についてやってみます。
・マネージドDNS
・マネージド証明書
・プライベートリンク
はじめに
軽く解説。
- マネージドDNS
既存のAzure DNSに対して新規にカスタムドメインを追加するか、既存のカスタムドメインを指定することができます。その後、指定したカスタムドメインに対して検証に必要なTXTレコードを作成します。
ポータルからぽちぽちする必要がありますが、レコード名とレコード値が自動で生成されるのである程度自動化されてますね。
- マネージド証明書
簡単に言うと、証明書作ってあげるよ!期限切れ90日前に自動で更新してあげるよ!・・・っていう機能です。
- プライベートリンク
Premiumのみ対応しているみたいです。バックエンドとプライベートな接続が可能になります。AppServiceの場合、AFDから設定後、ネットワーク>プライベートエンドポイント接続に移動して承認することで設定が完了します。
ちなみに、自動でプライベートエンドポイントとプライベートリンクが作成されますが、MSのブラックボックスになっているようでアクセス権がありません。見えないところに作成されている模様。
以下は今回構築する構成のイメージです。

Azure DNSの用意
まずはAzure DNSを用意します。作成方法は割愛します。
ドメイン無いからできないよ;;っていう方はAppServiceドメインが1 年あたり1,342円ほどで取得可能ですので、そちらを検討していただければと思います。
AppServiceの作成
- AFDから繋ぐAppServiceを作成します。SKUは「P1V2」以上を選択します。

2. 「nginx」を「DockerHub」からデプロイするように指定します。

3. リソースの作成をします。
AFDの作成
- AFDを作成します。プレビュー版は「リソースの作成」から検索すると出てきます。

2. 「カスタム作成」を選択します。正直どの選択が最適解など分かってません。基本的にカスタム作成でいいような予感はします。

3. プライベートリンクを使用したいので「Premium」を選択します。

4. マネージド証明書を使用するので追加しません。

5. エンドポイントを作成します。

6. 配信元設定をします。基本的な設定をした後、配信元の追加から対象のバックエンドを指定し、プライベートリンクを使用するように設定します。プライベートリンクを有効した際のリージョンですが、画像にもあるようにまだ東日本はありません。暫定対応としてここでは「East US」を選択します。



7. ルートの追加をします。ドメインの値はAFD作成後に変更する必要があります。

8. WAFポリシーの追加をします。

9. リソースの確認と作成をします。
AFDの設定
- 「AFD >ドメイン」の追加から、新規にカスタムドメインを作成します。

2. 「検証の状態」にある「Pending」をクリックしてカスタムドメインの検証を実施します。設定に問題が無ければ「追加」をクリックします。

ちなみに下の画像のようなレコードが登録されます。

3. 追加がされたら「情報の更新」をクリックします。左記操作を実施しても上記の確認の問題が完了したら、状態を更新してください
とメッセージが出る際は、数分待ってから再度クリックします。検証が確認されたら「閉じる」をクリックしてカスタムドメインの検証画面を閉じます。
その後、「最新の情報に更新」をクリックし、検証の状態が「Approve」となることを確認します。



3. 「AFD > エンドポイント マネージャー」からエンドポイントの編集をクリックした後、ドメインの追加をします。


4. ルートの更新をします。初期設定の「*azurefd.net」ドメインのチェックを外し、設定したカスタムドメインにチェック後、「更新」をクリックします。同じカスタムドメインが表示されているのはバグです・・・
設定が完了したら「閉じる」をクリックします。

3. 「配信用にCNAMEまたはエイリアスレコードを作成します」をクリックして、エンドポイントに作成したカスタムドメインのCNAMEレコードを作成をします。従来のAFDではドメイン追加の前にCNAMEレコードをDNSゾーンに作成する必要がありましたが、先にAFDにドメインを追加してからCNAMEレコードの作成が可能になりました。
マネージド証明書はいつの間にか動作してます。エンドポイントにドメイン追加のタイミングかな。


プライベートエンドポイントの承認
- 作成したAppServiceの「ネットワーク > プライベートエンドポイント接続 > プライベートエンドポイント接続の構成」をクリックします。

2. 「承認」をクリックして承認します。接続状態が「Approving」になれば問題ありません。


3. 反映されるまで時間がかかるので待機します。体感15分ぐらい。
疎通確認
- AppServiceのURLに直接アクセスして403エラーがでることを確認します。ここでは「https://{AppService名}.azurewebsites.net」にアクセスします。

2. AFDに設定したカスタムドメインを叩いてAFD経由でアクセスして画面が正常に見えることを確認します。ここでは「customdomain1.xxx.xxx」にアクセスします

以上で
終わりです。運用面で色々楽になってるのかなと思います。従来のAFDも、割り当てる証明書をLatestで指定できるようになりましたしね。正式版が楽しみです。でも設計難しそう・・・。
後は料金でしょうか。プレミアムの金額が高すぎないといいのですが。