Edited at

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

More than 3 years have passed since last update.

日本時間 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 を設定するなりしたほうがよいでしょう。