👻

Amazon CloudFront の障害に備えてフェイルオーバーを設定する

2020/10/01に公開

日本時間 2014/11/27 の AM9時〜AM11時頃まで、全世界的に Amazon CloudFront に障害がありました。

CDNとして CloudFront を利用しつつ、障害時にはフェイルオーバーする方法をまとめました。

S3

CloudFrontのOriginがS3でない場合は、この項の設定は関係ありません。

CloudFrontのOriginとしてS3を使う場合、以下のようにします。

  • file.example.jp のような、使いたいドメイン名で S3バケット を作る
  • Static Website Hosting を有効にしておく

ドメイン名のバケットで Static Website Hosting が有効になっていないと、後述の Route53 の Alias Target に設定できません。

Health Check

Route53 の Health Checks を利用します。

  • Specify Endpoint By: Domain Name
  • Domain Name: 利用しているCloudFrontのドメイン名 ( xxx.cloudfront.net )
  • Path: 何らかの、存在するパス

としておきます。

パスは存在するのであればよいので、/index.html でも /robots.txt でも、好きなものを設定しておきましょう。死活監視用なので、あまりファイルサイズが大きくないものが適切かと思われます。

定期的に、上記で設定された CloudFrontのパス にHTTPリクエストが飛んできて、死活監視されます。

Route53

Route53 は Health Checks と連動して、DNSが返す内容を変えることができます。

例えば file.example.jp をCDNのドメイン名として使う場合、

Primary

  • Name: file.example.jp
  • Type: Aレコード
  • Alias: Yes
  • Alias Target: 利用しているCloudFront ( xxx.cloudfront.net )
  • Routing Policy: Failover
  • Failover Record Type: Primary
  • Evaluate Target Health: No
  • Associate with Health Check: Yes
  • Health Check to Associate: 前項で設定した Health Check

Secondary

  • Name: file.example.jp
  • Type: Aレコード
  • Alias: Yes
  • Alias Target: 利用しているS3 ( file.example.jp.s3-website-ap-northeast-1.amazonaws.com )
  • Routing Policy: Failover
  • Failover Record Type: Secondary
  • Evaluate Target Health: No
  • Associate with Health Check: No

とします。

もし、OriginがS3でない場合は、Secondaryの内容を、Originに直接アクセスが行くようにIPなりELBなどを設定するだけです。

OriginがELBならば

  • Alias: Yes
  • Alias Target: Origin ELB ( xxx.ap-northeast-1.elb.amazonaws.com. )

別のレコードセット(ドメイン)ならば

  • Alias: Yes
  • Alias Target: Origin Recode Set ( www.example.jp )

IPアドレスならば

  • Alias: No
  • Value: xxx.xxx.xxx.xxx

使い方

前述の設定をしておくと、例として使ったドメイン名 file.example.jp にアクセスしたときに、CloudFront が生きている間は CloudFront にアクセスするように、Route53 によって名前解決されます。

CloudFront が死んで、Health Check で設定した閾値を超えた場合、Secondary の S3(あるいは設定したOrigin) にアクセスするように名前解決されるように変わります。

注意点

CloudFront が死んだ場合、そのアクセスはフェイルオーバー先に切り替わります。もしそれが大量のアクセスであればフェイルオーバー先にかなりの負荷がかかることになります。

必要に応じて、フェイルオーバー先に別の CDN を利用したり、ELBであれば Auto Scaling を設定するなりしたほうがよいでしょう。

この記事はQiitaの記事をエクスポートしたものです

Discussion