こんにちは、ちゃりおです。
サイトのドメイン変更とかで、リダイレクトサーバが必要なことがあると思います。
「Route53 + Cloudfront + S3ウェブサイトホスティング」の組み合わせで低コストかつ簡単に実現できます。
こんな人におすすめです。
- リダイレクトのためだけに、EC2を建てるのももったいない
- リダイレクトのルールをAWSのコンソールから見たい
- できるだけ安く実現したい
- HTTPSにも対応させたい
概要
使用するサービスは以下です。
- S3
- Cloudfront
- Route53
料金はアクセス数によりますが、だいたいは1~3USD/月くらいになると思います。
マネージドサービスのみなので、運用の手間もかかりません。
S3
S3ウェブサイトホスティングのリダイレクトルールを使用します。
S3ウェブサイトホスティングは静的Webサイトをホスティングする機能です。
リダイレクトルールは、JSONでリダイレクトのルールを定義することができます。
S3でのリダイレクトの実現方法は何点かありますが、今回は一番自由度が高い方法を紹介します。
(HTTPSが必要な場合)Cloudfront
S3ウェブサイトホスティング単体では、HTTPSのリダイレクトができないためCloudfrontを使用します。
HTTPSリダイレクトが不要な場合は、Cloudfrontは不要です。
Route53
CloudfrontのCNAMEをRoute53に登録します。
Cloudfront使用しない場合は、S3のエンドポイントをRoute53に直接登録します。
S3ウェブサイトホスティングでHTTP,HTTPSのリダイレクトサーバを作る
S3バケットの作成・ウェブサイトホスティングの有効化
リダイレクト元のドメイン名と同じ名前でバケットを作成します。(リダイレクト元がhoge.comだったらバケット名もhoge.com)
作成時の設定はデフォルトで大丈夫です。
バケットの作成ができたらウェブサイトホスティングを有効化します。
ホスティングタイプでリダイレクトにしてもいいですが、今回は細かくルールを設定したいためウェブサイトホスティングを選択します。
インデックスドキュメントとエラードキュメントに値が入っていないとエラーになります。
ファイルは存在しなくてもいいので、適当な値をいれます。
リダイレクトルールの設定
スクロールして、リダイレクトルールを設定します。
ルールを設定したら、「変更の保存」を押して、Webサイトホスティングを有効化します。
例えば以下のように設定するとリダイレクト元のパスに応じて、リダイレクト先のパスにリダイレクトできます。
[
{
"Condition": {
"KeyPrefixEquals": "<リダイレクト元のパス>"
},
"Redirect": {
"HostName": "<リダイレクト先 ホスト名>",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "<リダイレクト先のパス>"
}
},
]
構文については、下記URLの「高度な条件付きリダイレクトの設定」を参照します。
以前はXMLでルールを定義していたのですが、現在はJSONで定義しないとエラーになります。
(Unknown Error
An unexpected error occurred.
API response
Expected params.WebsiteConfiguration.RoutingRules to be an Array)
(HTTPSが必要な場合)ACMの作成
HTTPSでもリダイレクトできるように、ACMで証明書を作成します。
Cloudfrontで使用するため、リージョン「us-east-1」で作る必要があります。
AWS Certificate Manager での証明書の準備
(HTTPSが必要な場合)Cloudfrontの設定
最低限以下の箇所を設定する必要があります。
- Origin Domain Name: ウェブサイトエンドポイント
- SSL Certificate: 一つ前の手順ACMの作成で作った証明書
- Alternate Domain Names(CNAMEs): リダイレクト元のホスト名(Route53に登録する)
ウェブサイトエンドポイント
CloudFront を使用して、Amazon S3 でホストされた静的ウェブサイトを公開するにはどうすればよいですか?
Route53に登録
最後にRoute53のエイリアスレコードを登録します。
Cloudfrontの設定が上手くいっていれば、ディストリビューションの選択から選べるはずです。
Cloudfront使用しない場合は、S3のバケットをエイリアスレコードで設定します。
まとめ
S3ウェブサイトホスティングのリダイレクトルールについてでした。
リダイレクトルールのXMLとか、Cloudfront周りで少しハマりました。
低コストかつ簡単に実現できるので、また機会があればS3リダイレクトは使っていきたいと思います。