- やること整理
- 1. アカウントBでサブドメインを作成する。
- 2. アカウントAの親ドメインとサブドメインのトラフィックをを紐付ける
- 3 アカウントBのAPI Gatewayでサブドメインをカスタムドメインとして設定する。
- 確認
やること整理
タイトルが長くて分かりにくいが、状況は以下のような感じ。
アカウントBでサブドメインを作成する。
アカウントAの親ドメインとサブドメインのトラフィックをを紐付ける
アカウントBのAPI Gatewayでサブドメインをカスタムドメインとして設定する。
以降自分のドメイン名、nooozui.com
を使用して、サブドメインsample.nooozui.com
を作成する。
1. アカウントBでサブドメインを作成する。
まずアカウントBのRoute53でホストゾーンを作成するが、その前に一応アカウントAの親ドメインの登録状況をRoute53で確認してみる。
なおネームサーバとは、ドメインについてIPアドレスやレコード情報を保持しているサーバとざっくり理解しておくと良い。 実際にドメインでwebサイトにアクセスする際には、これらのネームサーバに対して問い合わせを行い、対象サイトにIPアドレスを入手する。
現状確認は終了したので、早速アカウントBで新規にサブドメインでホストゾーンを作成する。
2. アカウントAの親ドメインとサブドメインのトラフィックをを紐付ける
アカウントAの親ドメインにサブドメインのNSレコードを作成する。 ここでNSレコードには4つほどネームサーバの情報が
ns1.amazon.com ns2.amazon.org ns3.amazon.net ns4.amazon.co.uk
のように登録されていると思う。
これらはアカウントAの親ドメインのホストゾーンに作成するNSレコードのネームサーバとなるため、記録しておく。
以下のようにNSレコード作成時に、記録したネームサーバの値を貼り付けて登録する。
ここまでで、2アカウント間のドメイン使用に関する設定は一旦完了となる。 以降、API Gatewayのカスタムドメインとして使用するための設定を行う。
3 アカウントBのAPI Gatewayでサブドメインをカスタムドメインとして設定する。
3.1 ACMでサブドメインのTLS証明書を取得する
API Gatewayには制約があり、httpsによるアクセスしかできない。そのため、TLS証明書を取得する必要があるが、そのための便利なサービスとしてACM(AWS Certificate Manager)というものがある。 なお、TLS証明書はAPI Gatewayが存在するアカウントBで取得する。
注意:API Gatewayで作成するAPIをリージョナル or エッジ最適化のどちらかにするかで証明書を発行するリージョンが異なる。 リージョナル -> APIを公開するリージョン エッジ最適化 -> us-east-1 リージョン (バージニア北部)のみ
上記のようにTLS証明書取得時のリージョンには注意が必要だが、今回はリージョナル(ap-northeast-1(東京))なAPIを作成することとして進める。
ACMの画面に入り、「パブリックな証明書のリクエスト」を選択すると次のような画面にくるので、以下のようにサブドメイン名を入力して先に進む。
ACM は CNAME (正規名) レコードを使用し、ユーザーがドメインの所有者または管理者であることを検証します。DNS 検証を選択すると、DNS データベースに挿入するための 1 つ以上の CNAME レコードが ACM から提供されます。たとえば、追加の名前として www.example.com を使用して example.com ドメインの証明書をリクエストする場合、ACM によって 2 つの CNAME レコードが作成されます。各レコードは、ユーザーのドメインおよびアカウントに固有のものとして作成され、名前と値が含まれます。この値は、ACM が所有するドメインを指すエイリアスであり、ACM が証明書を自動更新するときに使用されます。CNAME レコードを 1 度のみ DNS データベースに追加します。ACM は、証明書が使用中であり、CNAME レコードが残っている限り、自動的にこの証明書を更新します。また、ドメインが Amazon Route 53 を使用して作成されている場合、ACM によって CNAME レコードを書き込むことができます。
要は証明書は更新時に毎回検証をしないといけないが、DNS検証を使用すればRoute53を使用している限り自動的に証明書を更新してくれるので、使用しているwebサービスでいつの間にか証明書の期限切れだった…なんてことがなくなるようだ。
DNSの検証を選択後、次のような画面に移る。下の部分に「Route53でのレコード作成」ボタンがあるが、これはDNS検証専用のサブドメインをアカウントB内のホストゾーンにつくることを示しており、これを選択する。
もしここで「Route53でのレコード作成」ボタンが表示されない or 無効な場合、もしくは結果が失敗した場合は、IAMユーザの権限不足が考えられるのでRoute53とACM周りの権限を見直したほうが良い。
ホームに戻って、以下画像のように状況が「発行済み」となっていればTLS証明書の発行は成功したことになる。
3.2 APIGatewayのカスタムドメインにサブドメインを指定する。
API GatewayでのAPI作成の詳細は省くが、正しくAPIをデプロイできていれば次の用にステージに任意のAPIが表示されていると思う。(今回は試しに作ったhello worldのdevステージを使用する)
api
とし、hello worldのdevステージと紐付けた。実際の設定画面では以下のように設定する。
ベースパスとは
https://<カスタムドメイン名>/<ベースパス>/リソースパス
のような位置づけとなる。API Gatewayで例えば今回のようにリソース/test
にアクセスする場合は、https://sample.nooozui.com/api/test
のようにリクエストする。
設定が完了すると、以下のように見える。
ここで「ターゲットドメイン名」があるが、これをアカウントB(サブドメインのアカウント)のホストゾーンにA(エイリアス)レコードを設定することで完了となる。
3.3 サブドメインのホストゾーンでエイリアスレコード(Aレコード)作成する
「レコードの作成」を選択し、以下のように設定する。
確認
試しにアクセスできるかcurlでGETリクエストしてみる。