S3バケットで静的コンテンツを配信したい
Last-modified: Sun, 31 Dec 2017 21:02:33 JST (2536d)
Top > S3バケットで静的コンテンツを配信したい
S3バケットで静的コンテンツ(HTMLやJSなど。ようはPHPなどサーバ側でプログラムを動かさないもの)を配信するWebサーバ機能があります。
ここでは、sampledomain.tkにて、S3を公開します。
- ドメインは別途取得済みとします。
バケットの作成
- S3バケットを作成します。バケットを作成するボタンをクリックします。
- バケット名を入れます。ルールとして静的コンテンツを配信するWebサーバ機能を利用する場合、バケット名はそのホスト名を指定する必要があります。参考
- S3のWebサーバ機能を利用した際にアクセスログを取得することができます。
ただし、このログはベストエフォートであり、完全ではない、リアルタイムではないことに注意です。
ログ格納用バケットを別途作成したうえで、サーバーアクセスのログ記録をクリックします。 - ターゲットバケットにログ格納用バケットを選択。
ターゲットプレフィックスは適当に指定します。 - アクセス権の設定です。ここは後から設定するのでそのまま触らず次へ行きます。
- サマリーが出ますので、バケットを作成します。
Webサーバ機能有効化
- 作成したバケットを選択し、プロパティタブをクリック、Static website hostingをクリックします。
- インデックスドキュメントにindex.htmlを入力し、保存します。
エンドポイントとあるのが、アクセス元URLになります。 - Webサーバ機能を有効化しても、403 Forbiddenになります。
これはファイルに外部から(つまりAnonimous)のアクセス権がないからです。 - アクセス権を設定します。作成したバケットを選択し、アクセス権限タブからバケットポリシーをクリックします。
- バケットポリシーエディターに以下の内容を貼り付けます。ホスト名の箇所は適宜書き換えてください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::sampledomain.tk/*" } ] }
- このポリシーは外部から参照のみ権限を付与するため、外部公開されていると警告が出ます。
- あとは公開するファイルをアップロードします。
アップロードボタンをクリックし、ファイルをアップロードします。 - 先ほどForbiddenだったのが見れるようになります。
余談:アクセス権について
- Webサーバ機能を有効化した後、外部の人に参照権限を与えるなら、Webサーバ機能はいらないのでは?という疑問があります。
ここでは、試しにWebサーバ機能を無効化してみます。 - 確かにアクセスできなくなりました。では先ほどのアクセス権設定はどこに効いているのでしょうか?
- 先ほどアップロードしたindex.htmlのプロパティを見てみましょう。
ここに、リンクと書かれたURLがあります。 - なんとアクセスできてしまいました。
つまり、アクセス権設定で読み取り権限を付与した場合、s3-ap-northeast-1.amazonaws.com/<バケット名>/ファイル名でアクセスすることができます。
Webサーバ機能を有効化すると、<バケット名>.s3-website-ap-northeast-1.amazonaws.com/<ファイル名>でアクセスできるようになり、かつ、CNAMEで呼び出すことができるようになります。
つまり、外部に公開するための権限+CNAMEのための設定を行ったという訳ですね。Webサーバ機能は単にCNAME
という訳で、 気を付けましょう。
Counter: 732,
today: 2,
yesterday: 0
このページの参照回数は、732です。