【AWS入門】S3でWebページをちょっとの設定で公開してみる
S3は素敵
AWS S3はシンプルストレージサービスの略です。じゃんじゃんファイルを置いとけます。
低コストだし、定番すぎて忘れがちだけど超絶クールですよね。
しかもちょっとの設定で、そのままwebページとして公開できるとのこと。
早速やってみましょう!(AWSアカウントがなければこの辺参考に取得してね)
目標
S3を使って、webページを公開する。
用語(適当)
- オブジェクト: ファイルのこと
- バケット: ファイルの入れ物のこと(≒バケツ)
手順
1. バケットの作成
AWSコンソールで S3 を開いて、公開したいバケットを作成しましょう。
バケット名の入力とリージョンを選択します。
はいできました。
2. バケットのウェブサイト設定
1. 作成したバケットの「プロパティ」を選択
2. 「静的ウェブサイトホスティング」のメニューを開く
3. 「ウェブサイトのホスティングを有効にする」を選んで、ファイル名を2ヶ所指定
- インデックスドキュメント
ユーザがファイル名なしにアクセスした時に表示するファイルを指定します。
例えば、http://example.com/ のようなアクセスの際に使用されます。
参考: インデックスドキュメントのサポート
- エラードキュメント
ユーザが存在しないページにアクセスした時などに表示するファイルを指定します。
参考: カスタムエラードキュメントのサポート
上の部分に「エンドポイント」という項目がありますが、これがこのバケットにアクセスする際のURLになります。
バケット名.s3-website-ap-northeast-1.amazonaws.com(東京リージョンの場合)
4. 先ほど指定したファイルをアップロード
ちなみにそれぞれのソースの中身はこんな感じです。
index.html
4xx.html
3. ページにアクセスして確認!!
ダメですね。
これはオブジェクトが「パブリックに読み取り可能」でないことが原因です。
参考: ウェブサイトアクセスに必要なアクセス許可
4. バケットのアクセス許可設定
1.「アクセス許可」のメニューを選んで、「バケットポリシーを追加」を選択
「バケットポリシー」とは、S3のバケット、オブジェクトへのアクセス権限を設定するものになります。
ひとまず先に進みましょう。
2. バケットポリシーを貼り付けて保存
オフィシャルにサンプルがありましたので、そいつを使ってみましょう。
「PublicReadFor…」の文字がありますね。
「バケット内のオブジェクトをパブリックに読み取り可能にする」設定になります。
この他にも様々な設定が可能です。
参考: バケットポリシーの例
あとは、忘れずに今回試すバケット名に書き換えておきましょう。
5. 再度ページにアクセスして確認!!
いけましたね!
ファイル名を指定していないので、インデックスドキュメントで設定した index.html が表示されています。
あとは存在しないURLにアクセスした際に 4xx.html が表示されるかも確認してみましょう。
大丈夫そうですね!
おまけ
アクセスログも残せるよ(ベストエフォートだけど)
バケットへのアクセスをログに残すこともできます(デフォルトでは無効)。ベストエフォートだけど。
ロギング設定自体では追加料金は発生せず、
ログファイルのストレージ料金だけが別途かかる形のようです。
設定自体は簡単です。
1. アクセスログを保存するバケットを作成
2. ロギング対象のバケットに設定を追加(1.で作成したバケットを指定)
3. 設定が反映されるまでしばし待つ
参考: サーバーアクセスのロギング
独自ドメインも使えるよ
使えます。
参考: 独自ドメインを使用して静的ウェブサイトをセットアップする
バケットにリダイレクトの設定ができるよ
特定のオブジェクトに対するリクエストを、
同じバケットの別のオブジェクトや、外部URLにリダイレクトするよう設定することができます。
参考: ウェブページリダイレクトの設定
地味に注意!S3のバケット内は階層構造にないよ
という訳で以下の点に注意です。
http://example.com/fuga
というアクセスがあった時、
S3はまず、バケット内のfugaオブジェクト(fugaファイル)を探します。
fugaオブジェクトがなければ、
http://example.com/fuga/
このように末尾にスラッシュをつけてリダイレクトして(302 Found)、
インデックスドキュメントを探します。
まとめ
S3は素敵。