インフラ

S3ウェブサイトホスティングでHTTP,HTTPSのリダイレクトサーバを作る

こんにちは、ちゃりおです。

サイトのドメイン変更とかで、リダイレクトサーバが必要なことがあると思います。
「Route53 + Cloudfront + S3ウェブサイトホスティング」の組み合わせで低コストかつ簡単に実現できます。

こんな人におすすめです。

  • リダイレクトのためだけに、EC2を建てるのももったいない
  • リダイレクトのルールをAWSのコンソールから見たい
  • できるだけ安く実現したい
  • HTTPSにも対応させたい

概要

使用するサービスは以下です。

  • S3
  • Cloudfront
  • Route53

料金はアクセス数によりますが、だいたいは1~3USD/月くらいになると思います。

静的ウェブサイトをホスティングする

マネージドサービスのみなので、運用の手間もかかりません。

S3

S3ウェブサイトホスティングのリダイレクトルールを使用します。
S3ウェブサイトホスティングは静的Webサイトをホスティングする機能です。

リダイレクトルールは、JSONでリダイレクトのルールを定義することができます。
S3でのリダイレクトの実現方法は何点かありますが、今回は一番自由度が高い方法を紹介します。

S3 (オプション) ウェブページリダイレクトの設定

(HTTPSが必要な場合)Cloudfront

S3ウェブサイトホスティング単体では、HTTPSのリダイレクトができないためCloudfrontを使用します。
HTTPSリダイレクトが不要な場合は、Cloudfrontは不要です。

Route53

CloudfrontのCNAMEをRoute53に登録します。
Cloudfront使用しない場合は、S3のエンドポイントをRoute53に直接登録します。

S3ウェブサイトホスティングでHTTP,HTTPSのリダイレクトサーバを作る

S3バケットの作成・ウェブサイトホスティングの有効化

リダイレクト元のドメイン名と同じ名前でバケットを作成します。(リダイレクト元がhoge.comだったらバケット名もhoge.com)
作成時の設定はデフォルトで大丈夫です。

バケットの作成ができたらウェブサイトホスティングを有効化します。

ホスティングタイプでリダイレクトにしてもいいですが、今回は細かくルールを設定したいためウェブサイトホスティングを選択します。

インデックスドキュメントとエラードキュメントに値が入っていないとエラーになります。
ファイルは存在しなくてもいいので、適当な値をいれます。

リダイレクトルールの設定

スクロールして、リダイレクトルールを設定します。
ルールを設定したら、「変更の保存」を押して、Webサイトホスティングを有効化します。

redirectrule

例えば以下のように設定するとリダイレクト元のパスに応じて、リダイレクト先のパスにリダイレクトできます。

[
    {
        "Condition": {
            "KeyPrefixEquals": "<リダイレクト元のパス>"
        },
        "Redirect": {
            "HostName": "<リダイレクト先 ホスト名>",
            "HttpRedirectCode": "301",
            "Protocol": "https",
            "ReplaceKeyPrefixWith": "<リダイレクト先のパス>"
        }
    },
]

構文については、下記URLの「高度な条件付きリダイレクトの設定」を参照します。

S3 (オプション) ウェブページリダイレクトの設定

以前は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の設定が上手くいっていれば、ディストリビューションの選択から選べるはずです。

route53

Cloudfront使用しない場合は、S3のバケットをエイリアスレコードで設定します。

まとめ

S3ウェブサイトホスティングのリダイレクトルールについてでした。
リダイレクトルールのXMLとか、Cloudfront周りで少しハマりました。

低コストかつ簡単に実現できるので、また機会があればS3リダイレクトは使っていきたいと思います。

Amzonで「AWS」の本を見てみる

楽天で「AWS」の本をみてみる!!

10分でできるWordpress記事の移行 リダイレクトの設定までこんにちは、ちゃりおです。 最近、当ブログの記事の整理を行っています。 ブログ記事移行の流れは以下だと思います。 移行元から記事...
AWSでファイルサーバを構築する方法を比較してみた(EBS・EFS・S3)最近AWS上で、NFSでファイルサーバを構築することがありました。 AWSはサービスの種類がものすごいです。 そのため、ファイルサー...
aws saa
AWS初心者が3週間でAWSソリューションアーキテクト(SAA)を取った勉強法こんにちは、ちゃりお(@chari7311)です! 以前社内の事情でAWSソリューションアーキテクトを3週間で取るよう言われました。 ...