MENU
オンライン講座開催中

WordPress画像をAmazon S3へ自動保存する方法【AWS EC2 + Amazon Linux 2023】

WordPress画像をAmazon S3へ自動保存する方法【AWS EC2 + Amazon Linux 2023】
目次

はじめに

EC2上で動かしているWordPress(charakatsu.com)の画像ファイルをAmazon S3に自動同期する仕組みを作りました。

画像をS3に移すことで、EC2への負荷を減らし、障害時のリスクも分散できます。


小学生でもわかる説明

今まではWordPressにアップロードした画像がEC2のサーバーの中だけに保存されていました。

これをS3(AWSの倉庫)にも自動でコピーする仕組みを作りました。

WordPressに画像をアップロード
  ↓
EC2のサーバーに保存
  ↓ 5分ごとに自動コピー
S3(クラウドの倉庫)にも保存

EC2が壊れても、S3に画像が残るので安心です。


今回やったこと

① S3バケット(charakatsu-media)を作成
② バケットポリシーを設定(公開アクセスを許可)
③ 同期スクリプトを作成
④ cronで5分ごとに自動同期

実際にやったこと

① S3バケットを作成

AWSコンソールで charakatsu-media という名前のバケットを作成しました。

設定のポイントは**「パブリックアクセスをすべてブロック」をオフ**にすること。画像を公開するバケットなので必要な設定です。

② バケットポリシーを設定

json

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::charakatsu-media/*"
    },
    {
      "Sid": "EC2WriteAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::XXXXXXXXXXXX:role/EC2-S3-Backup-Role"
      },
      "Action": [
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::charakatsu-media",
        "arn:aws:s3:::charakatsu-media/*"
      ]
    }
  ]
}

③ 同期スクリプトを作成

EC2にSSH接続して以下を実行しました。

bash

cat > ~/s3sync.sh << 'EOF'
#!/bin/bash
aws s3 sync /var/www/html/wordpress/wp-content/uploads/ s3://charakatsu-media/wp-content/uploads/ --region ap-northeast-1
EOF
chmod +x ~/s3sync.sh

手動で実行して動作確認しました。

bash

./s3sync.sh

28件の画像ファイルがS3に同期されました。

④ cronで自動化

5分ごとに自動同期されるようにcronを設定しました。

bash

echo "*/5 * * * * /home/ec2-user/s3sync.sh" | crontab -

設定確認:

bash

crontab -l
# */5 * * * * /home/ec2-user/s3sync.sh

ハマったポイント

WP Offload Media LiteがPHP 8.5に対応していない

最初はWordPressプラグイン(WP Offload Media Lite)でS3配信しようとしましたが、PHP 8.5との相性問題でプラグインが正常に動作しませんでした。

プラグインに頼らずAWS CLIで直接同期する方法に切り替えて解決しました。

IMDSv2の問題

EC2のメタデータサービスがIMDSv2必須になっていたため、一部のツールがIAMロールを認識できない問題が発生しました。

AWSコンソールでIMDSv2を「オプション」に変更することで解決しました。


やったこと まとめ

① S3バケット作成 ② バケットポリシー設定 ③ 同期スクリプト作成 ④ cronで5分ごとに自動同期


今後の課題

次の記事では、WordPressの画像URLをS3に書き換えてS3から直接配信する設定を解説しています。

→【続編】【EC2 + Amazon Linux 2023】WordPressの画像URLをS3に書き換える方法【DB直接編集】


まとめ

項目設定前設定後
画像の保存先EC2のみEC2 + S3に自動同期
同期方法手動5分ごとに自動
EC2障害時画像消失リスクありS3に画像が残る

学習時間は約4時間。プラグインのトラブル対応が一番時間がかかりました。

  • URLをコピーしました!
目次