第4回【いろいろなサービス使ってみよう編その1】¶
4回目からはよく使われる(と私が思っている)サービスについて特徴と概要を理解する方向ですすめていきます。
今回は、CloudFrontとRoute53を触ってみます。それぞれCDNとDNSのマネージドサービスです。
これらは他の多くのサービスとは異なり、リージョナルに関係ないグローバルなサービスとなっています。
ついでに、CloudFrontにアタッチしてSSL化を可能にするACMというサービスについても触れてみます(ACMはリージョナルなサービスです)。
CloudFront¶
https://aws.amazon.com/jp/cloudfront/
CDN(content delivery network)のサービス。
世界中のエッジロケーションにキャッシュすることで物理的な距離によるレイテンシを低減。高速な通信。
エッジロケーション上にキャッシュがある場合にはオリジン(S3バケットなど)に通信しにいかないので、変更を反映したい場合にはInvalidationリクエストを行う必要がある(実行後、クリアされるまでしばらくかかる)
オリジンにS3バケットを指定して静的Webコンテンツ(SPA含む)を配信するのがメジャーな使い方。
ACMでSSL証明書を配置できる。
キャッシュクリアのためのInvalidationリクエストもそうだが、サービスの特性上、設定変更後に反映が完了するまでにしばらく(10分くらい?)時間がかかる。
気長に待ちましょう。
Lambda@Edgeを使ってプログラムロジックによってリクエストやレスポンスを動的にカスタマイズできる。
利用例:画像imageの自動リサイズなど Amazon CloudFront & Lambda@Edge で画像をリサイズする
AWS WAFをアタッチして特定のIPアドレスからしか許可しない設定などが可能(リリース前の本番環境や検証環境などを限定公開にしたりなど)。
S3バケットをオリジンとして配信する場合の要注意点(ハマりどころ)¶
↓これ
https://dev.classmethod.jp/articles/s3-cloudfront-redirect/
東京リージョンにS3バケットを作成してCloudFrontで配信、という手順をいっぺんにやろうとして間違ってないはずなのになぜかCF→S3にアクセスできなくてハマったことがあった。
↓(S3バケット側の話だが)これも地味にハマりどころ
CFから自動で設定されるバケットポリシーは"s3:GetObject"のAllowのみだが"s3:ListBucket"も追加で許可しないと存在しないファイルへのアクセスのレスポンスが404ではなく403になる。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/404-error-nosuchkey-s3/
Route53¶
https://aws.amazon.com/jp/route53/
DNSのサービス。可用性と信頼性が極めて高い。
他サービスと連携していろいろ使う。
Route53独自のレコードとしてA(Alias)レコードというものがあり、これをよく使う。
- CloudFrontで独自ドメインで配信させたいとき。
- ApiGatewayで独自ドメインでAPIを公開させたいとき。
- SESでのメール配信(MXレコード、DKIMとSPF用のTXTレコード)
ちなみに、このredmineのドメインもRoute53で管理してます(ドメイン自体はお名前ドットコムで購入。サブドメインをRoute53で管理)。
参考:親ドメインを移行しないでサブドメインの DNS サービスを Amazon Route 53 に移行
参考:Route53でサブドメインだけ管理する方法
ACM(AWS Certificate Manager)¶
https://aws.amazon.com/jp/certificate-manager/
SSL証明書のサービス。
無料で使えるドメイン検証 (DV)の証明書を発行してくれる。
証明書の更新すら自動でやってくれて超便利。
ただし自動更新に失敗しないように注意する必要あり(1年毎に自動更新されるが、設定で指定しているFQDNのURLへのアクセスが200(OK)を返すようになっている必要がある)
EV, OVに対応したい場合には別で買った証明書をインポートして使える。
この場合更新は手動。
ドメインは別に購入する必要あり(お名前ドットコムなど。AWS上でも買える)。
前述のCloudFrontやApiGateway、およびELBに設定できる。
注意点は、CloudFrontに適用するACMはバージニア北部リージョンでリソースを作成する必要があるということです。
CloudFrontの画面上でACMを選択できますが、バージニア北部リージョンに作成しないと選択肢に出てきません。
関連して、前述のLambda@EdgeもLambdaのリソースをバージニア北部リージョンに作成する必要があります。
お掃除タイム¶
CloudFrontの料金
Route53の料金
ACMの料金
Route53は1ホストゾーンにつき月$0.5の料金がかかります(日割りはないので作った時点で課金が発生します...が、作成後12時間以内に削除されたホストゾーンについては無料)。
CloudFrontは1年間の無料枠があります。無料枠がない場合は通信量に応じて課金されます。
ACMは無料。