前回は、S3 + CloudFront の静的ウェブサイトホスティングのCloudFront経由でS3にアクセスするところまで実施ました。
今回は、PowerCMS X からS3にコンテンツを同期できるように進めていきます。
今回は、以下の2つのプラグインを利用します。
この2つのプラグインを利用するには、AWS SDK for PHP が必須です。composerでのインストールが必要となりますので、PowerCMS X に必要な composerってなに?を参照にcomposerをインストールしてください。
まずは、AWS SDK for PHP をインストールします。SSHで環境に入ってPowerCMS X のインストールディレクトリに移動してください。
$ cd /var/www/powercmsx/
以下のコマンドを実行してPowerCMS X インストールディレクトリ直下にAWS SDK for PHPをインストールします。
$ composer require aws/aws-sdk-php
PowerCMS X インストールディレクトリ直下にcomposer.json, composer.lock, vendorディレクトリができました。
環境変数にcomposer_autoloadのPathを追記します。
AppPropertiesプラグインを有効にすると管理画面で環境変数を設定できますが、Pathの指定はできませんので直接config.jsonに記述します。
$ vi config.json
"composer_autoload" : "/var/www/powercmsx/vendor/autoload.php"
PowerCMS X からS3やCloudFrontを操作できるようにするためにAWSアクセスキーを取得します。
AWS IAMにて、PowerCMS X 専用のユーザーを作成します。
AWSコンソールにログインして検索窓に「IAM」といれ、表示されたサービス「IAM」をクリックします。
IAMダッシュボードに移動しました。「ユーザー」をクリックします。
「ユーザーを追加」をクリックします。
ユーザー名はわかりやすく「powercmsx」としました。
AWS認証情報タイプを選択では、「アクセスキー - プログラムによるアクセス」にチェックを入れます。
直接コンソールにログインすることはないため、「パスワード - AWSマネージメントコンソールへアクセス」にはチェックを入れません。
次のステップへ進みます。
アクセス許可の設定で、「既存のポリシーを直接アタッチ」を選択します。
※以降は最短で許可を付与する例ですので、各位のセキュリティポリシーに合わせて設定してください。
ポリシーのフィルタで「S3」を検索し、「AmazonS3FullAccess」にチェックを入れます。
つづけて、ポリシーのフィルタで「CloudFront」を検索し、「CloudFrontFullAccess」にチェックを入れます。
次のステップへ進みます。
タグは必要に応じて作成してください。
確認画面で「AmazonS3FullAccess」「CloudFrontFullAccess」がアタッチされることを確認して、「ユーザー作成」をクリックしてください。
ユーザーが作成されました。
忘れずに、アクセスキーIDと、シークレットアクセスキーをセキュリティを考慮した任意の場所へ保存してください。
PowerCMS X + S3 + CloudFront で静的ウェブサイトホスティング 1(S3篇)でACLを無効にしましたが、AWS_S3プラグインではACLの設定が必要でしたので修正します。
ストレージ → S3 を選択してください。
バケットから当該バケットの詳細に入ります。
アクセス許可タブに移動します。
オブジェクト所有者の編集ボタンをクリックします。
「ACL有効」を選択し、「私は、ACLが復元されることを了承します。」にチェックをいれて、「変更の保存」をクリックします。
ブロックパブリックアクセス(バケット設定)の編集をクリックします。
以下の2つのチェックを外して「変更の保存」をクリックします。
これでACL経由でS3にアクセスできるようになりました。
AWS_S3プラグイン、AWS_CloudFrontプラグインを有効化します。

↓
AWS_S3プラグイン、AWS_CloudFrontプラグインの動作を制御する環境変数は、適宜、管理画面の環境変数から登録してください。ここではデフォルト値で進めますので環境変数は登録しないで進めます。
AWS_S3プラグインのプラグイン設定を開きます。
以下の内容で設定します。
| アクセスキー | AWSアクセスキーの取得で保存しておいた、アクセスキーIDを入力します。 |
|---|---|
| シークレットアクセスキー | AWSアクセスキーの取得で保存しておいた、シークレットアクセスキーを入力します。 |
上記まではシステムスペースで登録します。以下は同期したいスペースで設定してください。
| バケット名 | 同期したいバケットの名前を入力します。 |
|---|---|
| リージョン | バケットのあるリージョンを入力します。 |
| ACL | 今回はフルコントロールのユーザーを作ったので「bucket_owner_full_control」とします。 |
| 拡張子 | 同期する拡張子を限定する場合は入力してください。 |
| キャッシュ有効期限 | デフォルトは1日となっているので必要に応じて修正してください。 |
AWS_CloudFrontプラグインのプラグイン設定を開きます。
以下の内容で設定します。
| アクセスキー | AWSアクセスキーの取得で保存しておいた、アクセスキーIDを入力します。 |
|---|---|
| シークレットアクセスキー | AWSアクセスキーの取得で保存しておいた、シークレットアクセスキーを入力します。 |
上記まではシステムスペースで登録します。以下は同期したいスペースで設定してください。
| ディストリビューションID | CloudFrontのディストリビューションIDを入力します。 |
|---|---|
| リージョン | ディストリビューションのあるリージョンを入力します。 |
| 無効化のトリガー | 今回はファイルの更新時とファイルの削除時にキャッシュをパージするようにしました。 |
| ディレクトリ・インデックスファイル名 | 「index.html」とし、「ディレクトリのみを無効化」のチェックを外します。 これにより、「/dirname/index.html」が更新された時、「/dirname/」のキャッシュをあわせてパージします。 |
ほかは必要に応じて設定してください。
これで設定は完了です。
以下のコマンドで初期同期します。
$ cd /var/www/powercmsx/
$ sudo -u apache php ./tools/worker.php --verbose --task_ids aws_s3_synchronize_s3
必要なファイルが以下のように、「アップロードしました。」となれば成功です。
今回はここまでになります。お疲れさまでした!