PowerCMS X + S3 + CloudFront で静的ウェブサイトホスティング 1(S3篇)

PowerCMS X で構築しているサイトを、EC2からS3 + CloudFront の静的ウェブサイトホスティングに変えたいとのご依頼をいただきました。
現在の構成は基本的に静的サイトですが、フォームやページングなどが動的なので、AWS Lambdaを活用したり、JSで実装したりと諸々考えなければならないですね。

まずはS3で静的サイトが見れるところまで検証してみます。

AWSコンソールにログインし、ストレージ → S3 を選択してください。

AWSコンソールでS3メニューへ推移する図

バケットから「バケットを作成」をクリックします。

バケット作成の画面 バケット作成ボタン

バケット名は、そのままエンドポイント・アクセスURLとなります。ウェブのURLルールでユニークな値となる必要があります。
リージョンは東京としてます。お使いのリージョンを指定してください。

バケットを作成の設定画面

オブジェクト所有者は、特に理由がなければ「ACL無効」としてください。

オブジェクトの所有者設定画面

バケットのパブリックアクセス設定をします。

静的ホスティング用ですので、チェックを外して、すべての人のアクセスを許可します。
公開されますよ、と警告されますが、問題ないので承認にチェックします。

バケットのパブリックアクセス設定画面

バケットのバージョニングですが、バージョンはCMSで管理できるので「無効にする」にチェックを入れます。
S3側でバージョン管理してもよいのですが、バージョン分も課金対象となりますので注意してください。

バケットのバージョニング設定画面

デフォルトの暗号化は、サーバ側の暗号化を「有効にする」にして、暗号化キータイプは、「Amazon S3 マネージドキー」とします。

デフォルトの暗号化設定画面

「バケットを作成」をクリックします。

バケットを作成のボタン

バケットが作成されました。名前欄をクリックして詳細画面に入ります。

バケット一覧の画面

「アクセス許可」タブに移動して、バケットポリシーの「編集」をクリックします。

アクセス許可設定画面

デフォルトで以下のような値が入ると思います。

ポリシー設定画面

以下のように設定しましょう。


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::バケット名/*"
        }
    ]
}

Version IAMポリシーの文法のバージョンで、ずっと2012-10-17から変わっていないようです。
Sid ポリシードキュメントに対して任意で設定する識別子です。ステートメントごとに設定ができますが、ポリシー内で重複してはいけません。
Effect 許可一覧 Allow(ホワイトリスト)、禁止一覧 Deny(ブラックリスト)にするのかを設定します。
Principal だれ(Principal)に対して許可、拒否するのかを指定します。指定できる代表的なプリンシパルは下記になります。
  • AWSアカウント/ルートユーザー
  • IAMユーザー
  • IAMロール
  • AWSサービス
"Principal": { "AWS": "*" }だと全てのユーザーに対して許可となります。
Action 許可、もしくは、拒否するアクションを指定します。
s3:GetObjectは読み込みを許可しています。
Resource 一連のステートメントをどのリソースに反映するかを記述します。
ポリシーの少し上にバケットARNの記載があるのでコピペしましょう。
バケットARNが記載されている箇所の説明

編集が終わったら「変更の保存」をクリックして保存します。

変更の保存のボタン

「プロパティ」タブをクリックします。

プロパティ設定画面

静的ウェブサイトホスティングの「編集」をクリックします。

静的ウェブサイトホスティング設定画面

静的ウェブサイトホスティングは、「有効にする」にチェックします。
ホスティングタイプは、「静的ウェブサイトをホストする」にチェックします。
インデックスドキュメントは「index.html」を指定します。 エラードキュメントは「error.html」を指定します。

静的ウェブサイトホスティング編集画面

「変更の保存」をクリックして保存します。

変更の保存ボタン

設定はこれで完了です。お疲れさまでした。
それでは、動作の確認をしてみましょう。
まずは、動作確認用のhtmlを作成します。適当なhtmlファイルを作成して、「index.html」とします。

オブジェクトタブをクリックします。

オブジェクトタブの説明

「アップロード」をクリックします。

アップロードボタン

「ファイルを追加」から追加するか、ドラッグアンドドロップで先程のindex.htmlファイルを追加します。

ファイル追加画面

オブジェクトにファイルが追加されました。
「index.html」をクリックして詳細に入ります。

s3-hosting-23

プロパティにオブジェクトURLが記載されています。こちらをクリックしてみましょう。

オブジェクト一覧画面

ブラウザにテストで作成したhtmlの内容が表示されました!ただ、まだhttpとなっています。https化はCloudFrontで設定します。

ブラウザにテストで作成したHTMLが表示された画面

今回はここまでになります。お疲れさまでした。