Route 53 の ALIAS レコードとして API Gateway と VPC Endpoint (Interfaceタイプ) がサポートされました!

TL;DR

  • API Gateway にはカスタムドメイン設定があり、独自の FQDN を設定できた
  • ただし Route 53 で設定しようとしても、これまで「エッジ最適化」でないと ALIAS として設定できなかった
    • CloudFront として設定できていた
  • このほど API Gateway エンドポイントを Alias ターゲットとして指定できるようになった
  • そのため Regional でも選択できるようになり、CNAME で設定する必要がなくなった
  • 同時に VPC エンドポイントに対しても ALIAS 設定できるようになった

Route 53 エイリアス機能アップデート!

みなさん Route 53 使ってますか!(挨拶)

AWS でサービス運営している場合、DNS には Route 53 を使うと便利です。AWS の各サービス / リソースを便利に使う独自機能がそろっているためですが、そのうちのひとつにエイリアス (ALIAS) レコードと呼ばれる機能があります。

エイリアスレコードそのものの説明は、今回のアップデートに関連する経緯も含めて下の方に説明を書いておきましたのでそちらをご参照ください。今回、下記のサービスもエイリアスレコードのターゲットとして選択・指定できるようになったということです。

API Gateway

API Gateway を設定するには、まずカスタムドメインの設定をする必要があります。API Gateway カスタムドメインは「エッジ最適化」と「Regional」の二種類がありますので、今回試しに下記のようなカスタムドメイン(二つ)を作成しました。

「Regional」の場合は d-ngvh4j****.execute-api.ap-northeast-1.amazonaws.com 、「エッジ最適化」の場合は dywqpsrl5****.cloudfront.netというような FQDN がターゲットドメイン名として設定されます。Route 53 でエイリアスを作成する場合、カスタムドメインに該当する FQDN を指定すると、このように選択肢に出てきました。

他のエイリアスと違い、カスタムドメイン名を正確に指定しないと選択肢に現れないので注意してください

VPCエンドポイント

VPC エンドポイントもエイリアスレコードの候補に現れるようになりました。ただし Interface タイプのみ で、Gateway タイプのエンドポイントは今回のサポート外となります。

'18/12 現時点では下記のサービスが対象となります(参考 : Interface VPC Endpoints (AWS PrivateLink) - Amazon Virtual Private Cloud )。

  • Amazon API Gateway
  • AWS CloudFormation
  • Amazon CloudWatch / 同 Events / 同 Logs
  • AWS CodeBuild
  • AWS Config
  • Amazon EC2 API
  • Elastic Load Balancing API
  • AWS Key Management Service (KMS)
  • Amazon Kinesis Data Streams
  • Amazon SageMaker / 同 Runtime / 同 Notebook Instance
  • AWS Secrets Manager
  • AWS Security Token Service
  • AWS Service Catalog
  • Amazon SNS
  • Amazon SQS
  • AWS Systems Manager

DynamoDB と S3 以外、といったほうが早いかも知れませんね。

VPC エンドポイントはサブネットごとの DNS 名+全体の DNS 名が払い出されるのですが、それぞれに対してエイリアスを設定できます。例えば以下の画像は、3サブネットにまたがって作成したので、都合 4エントリが表示されました。

まとめ:そもそもエイリアスレコードとは

例えばとある、以下のような DNS 名をもつ ELB があったとして、

  • awesome-aws-service-1029384756.ap-northeast-1.elb.amazonaws.com

この ELB に下記のような FQDN でアクセスさせようとしたとします。

  • awesome.example.com

ELB の DNS 名に対する IP アドレスは不定 1 なので、A レコードで書くわけにはいきません。そのため、 Route 53 以外では CNAME レコードを書くことになります2 。こんな感じです。

$ORIGIN example.com.
awesome 300 IN CNAME awesome-aws-service-1029384756.ap-northeast-1.elb.amazonaws.com.

これでも悪くないんですが、1回の名前解決で CNAME とその先の A レコードと、2回のクエリが発生することになりますし、何より Zone Apex (または「ルートドメイン」)が相手では CNAME は使えません。

Amazon Route 53 のエイリアスレコードを使えば、そんな問題は解決します。ただしこれまで、エイリアス先(ターゲット)として指定できるサービスは下記に限定されていました。

  • CloudFront ディストリビューション
  • ローカル化されたサブドメインがある Elastic Beanstalk 環境
  • ELB ロードバランサー
  • Amazon S3 バケット(静的ウェブホスティング設定がされたもの)

厳密に言えば、API Gateway はカスタムドメインを「エッジ最適化」にすることで、払い出されるダーゲットドメイン名が CloudFront のアドレスになりますので、これを手動で指定してあげることで設定はできました。しかし Regional の場合は前述の通り、execute-api.ap-northeast-1.amazonaws.com というドメインになりますので、この手が使えませんでした。

しかしそれも過去のこと。これからはどちらのタイプだとしても普通にエイリアスレコードを設定できます。API Gateway に Zone Apex を使うケースは少ないかも知れませんが、出来ないよりは良いですね。

繰り返しになりますが、AWS リソースを使う上で、Route 53 を使うといろいろと便利になります。DNS をまだオンプレミスで運用されているところは是非検討してみてください!

脚注


  1. ELB は負荷に応じて自動的にスケール(増減)しますし、何らかの理由で別の IP アドレスにフェイルオーバーすることもあります 
  2. Route 53 以外の DNS 実装でも、独自にエイリアスレコードと同様の機能を持っているものもあります。PowerDNS とか。