Azure App Service Web アプリへの Azure CDN を追加し、HTTPS化する

# Azure App Service Web アプリへの Azure CDN を追加し、HTTPS化する

App Service単体でも無料でHTTPS化する事が可能だが、CDNを挟みたい場合の設定方法

ワイルドカード証明書は使えないので、www.hogehoge.comと、hogehoge.comをHTTPS化したい場合は、カスタムドメインを２つ作成することになる

## カスタムドメインを追加する流れ
方法１か、2の何れかの方法を取ります。

### 1. CNAME DNS レコードを作成する

#### 方法１：エンドポイントに対する、CNAMEレコードを追加しない場合は、cdnverify サブドメインをマップする

運用環境にある既存のドメインをマップする場合、特別な考慮事項があります。
Azure portal でカスタム ドメインを登録する際に、一時的にドメインのダウンタイムが発生することがあります。

Web トラフィックの中断を避けるには、Azure cdnverify サブドメインを含む CDN エンドポイント ホスト名にカスタム ドメインをマップします。 このプロセスによって、一時的な CNAME マッピングが作成されます。

この方法を使用すると、ユーザーは、DNS マッピングの実行中に中断することなくドメインにアクセスできます。

カスタムドメインが正常に利用可能になった場合は、このレコードは削除して構いません。

| レコード | タイプ | 値 |　備考 |
|:-----------|------------:|:------------:|:------------:|
| cdnverify.<カスタムドメインホスト名> | CNAME | cdnverify.<カスタムドメインホスト名>.azureedge.net |　cdnverify サブドメイン |

この方法の場合は、DigiCert は、次のメール アドレスに確認メールを送信します。
次のアドレスのいずれかから直接承認できることを確認してください。

admin@your-domain-name.com
administrator@your-domain-name.com
webmaster@your-domain-name.com
hostmaster@your-domain-name.com
postmaster@your-domain-name.com

数分以内に、要求の承認を求めるメールを受け取ります。 スパム フィルターを使っている場合は、verification@digicert.com をその許可リストに追加してください。 24 時間以内にメールが届かない場合は、Microsoft のサポートに問い合わせてください。

とのこと

#### 方法2：永続的なカスタム ドメインをマップする

ドメインを検証する必要があるので、CNAMEレコードによってCDNエンドポイントにマッピングします。
またAzure CDN from Akamaiの場合は、自動更新（自動ドメイン検証）を有効にするために次のCNAMEを設定する必要があります。

| レコード | タイプ | 値 |　備考 |
|:-----------|------------:|:------------:|:------------:|
| <カスタムドメインホスト名> | CNAME | <カスタムドメインホスト名>.azureedge.net |　ドメイン検証用 |

#### 自動更新（自動ドメイン検証）のドメインをマップする

| レコード | タイプ | 値 |　備考 |
|:-----------|------------:|:------------:|:------------:|
| _acme-challenge.<カスタムドメインホスト名> | CNAME | <カスタムドメインホスト名>.ak-acme-challenge.azureedge.net | 自動更新（自動ドメイン検証） |


今回の例では方法２を使ったので、以下のレコードを追加する事になります。

| レコード | タイプ | 値 |
|:-----------|------------:|:------------:|
| hogehoge.com       | CNAME        | hogehoge.azureedge.net         |
| _acme-challenge.hogehoge.com       | CNAME        | hogehoge.com.ak-acme-challenge.azureedge.net         |

| レコード | タイプ | 値 |
|:-----------|------------:|:------------:|
| www.hogehoge.com       | CNAME        | hogehoge.azureedge.net         |
| _acme-challenge.www.hogehoge.com       | CNAME        | www.hogehoge.com.ak-acme-challenge.azureedge.net         |

#### nslookupで確認
```
nslookup -timeout=5 hogehoge.com

nslookup -timeout=5 www.hogehoge.com
```

### 2. カスタムドメインを追加する

#### 1. Azure portal にサインインし、カスタム ドメインにマップするエンドポイントを含む CDN プロファイルを参照します。

#### 2. [CDN のプロファイル] ページで、カスタム ドメインに関連付ける CDN エンドポイントを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44351/08319be9-377e-7c10-4c74-acfea315124f.png)

#### 3. [+ カスタム ドメイン] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44351/0a85d27c-7d07-9936-03c0-df0802fc7f71.png)

#### 4. [カスタム ドメインの追加] の [エンドポイントのホスト名] は自動的に入力されます。これは、CDN エンドポイントの URL ( <endpoint-hostname> .azureedge.net) から得られます。 この値は変更しないでください。

#### 5. [カスタム ホスト名] に、CNAME レコードのソース ドメインとして使用するカスタム ドメイン (サブドメインを含む) を入力します。

たとえば、www.contoso.com または cdn.contoso.com とします。 cdnverify サブドメイン名は使用しないでください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44351/a12b08b4-2338-018a-57cb-382f8d8e01a2.png)

#### 6. [追加] を選択します。

入力したカスタム ドメイン名に対する CNAME レコードが存在するかどうかが Azure によって確認されます。 CNAME が正しければ、カスタム ドメインが検証されます。

新しいカスタム ドメインの設定がすべての CDN エッジ ノードに反映されるまでに、少し時間がかかる場合があります。

Azure CDN Standard from Microsoft プロファイルの場合、通常、反映は 10 分以内で完了します。
Azure CDN Standard from Akamai プロファイルの場合、通常、反映は 1 分以内で完了します。
Azure CDN Standard from Verizon プロファイルおよび Azure CDN Premium from Verizon プロファイルの場合、通常、反映は 10 分で完了します。

※私の場合は、かなり待たされましたので、時間が掛かることもあるようです。

#### 7. CDN管理の証明書でHTTPSを有効にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44351/d15755e2-89b3-f420-b857-3e803332db5b.png)

#### 8. 伝播を待つ

ドメイン名が検証された後、カスタムドメインHTTPS機能がアクティブになるまで最大6〜8時間かかる場合があります。プロセスが完了すると、AzureポータルのカスタムHTTPSステータスが[有効]に変更されます。カスタムドメインダイアログの4つの操作手順は、完了としてマークされています。これで、カスタムドメインでHTTPSを使用する準備が整いました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44351/b0b8ff99-b7df-6603-ed43-3de2a1ed2519.png)

以上の手順をドメイン毎に繰り返すだけです。