262
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
262
Help us understand the problem. What are the problem?