AWS S3バケットへの静的ファイルの同期 (AWS_S3プラグイン)

静的ファイルを Amazon Simple Storage Service(S3) に同期します。
AWS_CloudFrontプラグインと併用が可能です。AWS_CloudFrontプラグインと併用する場合、ファイルの更新・削除後に S3へ同期、その後にキャッシュをパージします。
このプラグインの動作には PowerCMS X ver.3.0 以上が必要です。

AWS S3バケットとファイル同期

制限事項

このプラグインによって同期されるのは PowerCMS X によって出力・削除されたファイルのみとなります。FTPなどで直接設置・削除したファイルは対象外となります。
同期処理は 1ファイル単位で行われます。

リンクURL機能を使ってプレビューリンクを追加する

スコープの設定で「リンクURL」にS3バケットのURLを入力して、「」にチェックを入れて設定を保存すると、管理画面の

リンクURL機能を使うと公開ファイルへのリンクを追加できます

設定・環境変数の設定

AWS SDK for PHP をインストールします。パスは include_path の配下であればどこでも構いません(autoload.phpのパスを環境変数 composer_autoload に指定します)。

$ composer require aws/aws-sdk-php

AWS_S3プラグイン用の環境変数を指定します。config.jsonに記述する場合は、Web経由で config.jsonにアクセスできないように制限をかけてください。

  1. composer_autoload : composerでインストールしたパスの autoload.phpのパスを指定します。
  2. aws_s3_queue_interval : キューの実行間隔をミリ秒で指定します。初期値は 100 です。aws_s3_realtime_sync 指定のある時も同期処理に指定したミリ秒分の間隔を空けて処理をします。
  3. aws_s3_realtime_sync : 管理画面操作時に、リアルタイムで同期する時に「true」とします。初期値は「true」で、falseの時、処理はキューに登録され、次回の定期実行タスク実行時に行われます。
  4. aws_s3_cache_max_age : アップロードしたファイルに対して CacheControl:max-age を設定します。初期値は 86400(1日)です。
  5. aws_s3_realtime_maxsize : 「aws_s3_realtime_sync」指定のある時も、このサイズを超えるファイルはキューによって同期されます。初期値は 20971520(20MB)です。
  6. aws_s3_exclude_exts : 処理対象外の拡張子をカンマ区切りで指定します。指定のない場合は、環境変数「denied_exts」に指定されている拡張子のファイルが対象外となります。プラグイン設定が指定されているときはそちらが優先されます。
        "composer_autoload" : "/var/www/PowerCMSX/vendor/autoload.php",
        "aws_s3_queue_interval" : 100,
        "aws_s3_realtime_sync": true,
        "aws_s3_cache_max_age" : 86400,
        "aws_s3_realtime_maxsize": 20971520,
        "aws_s3_exclude_exts" : ""

※ 「composer_autoload」の指定がないとプラグインを有効化できません
※ 環境変数「denied_exts」に指定されている拡張子は 環境変数「denied_exts」の初期値 別ウィンドウで開きます でご確認ください。
※「aws_s3_realtime_sync」指定のある時も、実際の処理は __destruct (非同期処理を含むすべての処理が行われた後) に実行されるため、多少のタイムラグが生じます。
※「aws_s3_realtime_sync」指定のある時も、以下の場合はキューによって同期します。

  • 同期対象のファイルの容量が 20MB(環境変数 aws_s3_realtime_maxsize指定値)を超える時
  • PowerCMS Xの処理時間が 50分(max_exec_time - 10分)を超えている時

プラグイン設定

プラグインを有効化し、設定を行います。プラグイン設定は、システム、スペースなどのスコープごとに設定します。

  • アクセスキー(システムのみ) : APIへアクセスするためのアクセスキーを登録します。
  • シークレットアクセスキー(システムのみ) : APIへアクセスするためのシークレットアクセスキーを登録します。
  • システム設定を利用(スペースのみ) : システムの設定をスペースで継承する時にチェックします。
  • バケット名 : AWS S3 のバケット名を指定します。指定のないスコープでは何の処理も行いません。
  • リージョン : リージョンを指定します。初期値は「ap-northeast-1」(東京リージョン)です。
  • ACL : ACL(アクセスコントロールリスト)を指定します。
  • 拡張子 : 同期するファイルの拡張子を限定する場合にカンマ区切りで拡張子を指定してください。指定のない場合は環境変数「aws_s3_exclude_exts」または「denied_exts」に指定のないものが同期対象となります。*を指定すると全てのファイルが同期対象となります。
  • キャッシュ有効期限 : キャッシュの有効期限を秒で指定します。拡張子=秒のカンマ区切りで拡張子毎の有効期限を設定できます(例:default=86400,png=604800,jpg=604800,webp=604800)。

同期されるタイミング

  • ファイルが新規作成された時
  • ファイルが更新された時 (ページの内容に変更があってパブリッシュされた、もしくは上書きアップロードされた時)
  • ファイルが削除された時

すべてのファイルを同期する

task_ids に「aws_s3_synchronize_s3」を指定して worker.php を実行することで、すべてのファイル(除外設定されているものを除く)をアップロード、削除フラグのあるもの(除外設定されているものを除く)については削除します。

cd /path/to/PowerCMSX; sudo -u apache php ./tools/worker.php --verbose --task_ids aws_s3_synchronize_s3


※ AWS、Amazon S3 および CloudFront は、AWS の米国およびその他の国における登録商標です。