PowerCMS X で構築しているサイトを、EC2からS3 + CloudFront の静的ウェブサイトホスティングに変えたいとのご依頼をいただきました。
現在の構成は基本的に静的サイトですが、フォームやページングなどが動的なので、AWS Lambdaを活用したり、JSで実装したりと諸々考えなければならないですね。
まずは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)に対して許可、拒否するのかを指定します。指定できる代表的なプリンシパルは下記になります。
|
| Action | 許可、もしくは、拒否するアクションを指定します。 s3:GetObjectは読み込みを許可しています。 |
| Resource | 一連のステートメントをどのリソースに反映するかを記述します。 ポリシーの少し上にバケットARNの記載があるのでコピペしましょう。 |
編集が終わったら「変更の保存」をクリックして保存します。
「プロパティ」タブをクリックします。
静的ウェブサイトホスティングの「編集」をクリックします。
静的ウェブサイトホスティングは、「有効にする」にチェックします。
ホスティングタイプは、「静的ウェブサイトをホストする」にチェックします。
インデックスドキュメントは「index.html」を指定します。
エラードキュメントは「error.html」を指定します。
「変更の保存」をクリックして保存します。
設定はこれで完了です。お疲れさまでした。
それでは、動作の確認をしてみましょう。
まずは、動作確認用のhtmlを作成します。適当なhtmlファイルを作成して、「index.html」とします。
オブジェクトタブをクリックします。
「アップロード」をクリックします。
「ファイルを追加」から追加するか、ドラッグアンドドロップで先程のindex.htmlファイルを追加します。
オブジェクトにファイルが追加されました。
「index.html」をクリックして詳細に入ります。
プロパティにオブジェクトURLが記載されています。こちらをクリックしてみましょう。
ブラウザにテストで作成したhtmlの内容が表示されました!ただ、まだhttpとなっています。https化はCloudFrontで設定します。
今回はここまでになります。お疲れさまでした。