初心者がローカルのdockerをAWSにアップして動かすまで（その１）

# １．目標
ローカルPC（Windows 11 Home）のDocker Desktopで、WordPressを動かしています。
これをGitHubに登録し、AWSのCodePipelineでデプロイして、ECS Fagateで実行します。
※1. コンテンツは外部公開せず、あくまでも個人的な実験のために作成する（基本的にドメインを買ったりDNS登録したりしない）
※2. DBはRDS、ファイルはS3に保存する

これは四苦八苦しながら、目標達成まで頑張る初心者の作業記録です。
なお、ChatGPTをフル活用して、作業をガイドしてもらいます。
さあどうなるか……？！

# ２．WordPressをセッティング
まず前提として、以下のようなdocker-compose.ymlでスタートします。
```
services:
  db:
    image: mysql:8.0
    container_name: "wordpress-db"
    volumes:
      - ./db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    image: wordpress:6.6-php8.1
    container_name: "wordpress-wp"
    volumes:
      - ./wp-data:/var/www/html
    ports:
      - "8082:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
```
当初は最新のMySQL8.4で実施しようとしましたが、mysql_native_password認証がデフォルトで削除されたため、WordPressから接続する際の設定が少し面倒でした（2024年11月時点。おそらく今後のWordPressのバージョンアップで対応されるはず）。
そのため、確実に作業できるMySQL8.0とWordPress6.6を選択しました。


目標はS3にアップロードすることなので、一旦ローカルでセッティングしてS3対応プラグイン「WP Offload Media Lite」をインストール・有効化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3934396/c3ba7edc-3662-d42e-dc5b-ef6e3ef41643.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3934396/52328e05-2d3b-517e-c7f2-c1f643d1baa8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3934396/3f983bd0-b748-40c8-1f6c-488a5b73edcc.png)

# ３．AWS S3バケット作成
詳細な設定について、記載ない項目については全てデフォルトのまま進めています。
①AWS Management ConsoleでS3バケットを作成します。
・バケット名:my-wordpress-bucket-xxxx
・「パブリックアクセスをすべてブロック」を有効（デフォルトでバケットは非公開に設定）
②IAMの画面に遷移し、ユーザーとポリシーを作成します。
・ユーザー名：wordpress-local-access　※ポリシーを直接アタッチする
　→アクセスキーを作成（ユースケース：コマンドラインインターフェイス (CLI)）
 　アクセスキーIDとシークレットキーをメモします。
・ポリシー名：wordpress-local-access-policy（内容は以下）
```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::my-wordpress-bucket-xxxx"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::my-wordpress-bucket-xxxx/*"
    }
  ]
}
```

おっと。ここでAWS Cliをインストールしていなかったことに気付きました。
以下からインストールします。
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

AWS Cliにて、S3バケットに接続できることを確認します。
これはローカルのdockerからアクセスできることを前もって確認するためです。
```PowerShell:PowerShell
PS C:\Users\testuser> aws --version
aws-cli/2.22.1 Python/3.12.6 Windows/11 exe/AMD64
PS C:\Users\testuser> aws configure
AWS Access Key ID [None]: xxxx（前段でメモしたもの）
AWS Secret Access Key [None]: xxxx（前段でメモしたもの）
Default region name [None]: ap-northeast-1
Default output format [None]: json

PS C:\Users\testuser> aws s3 ls s3://my-wordpress-bucket-xxxx --region ap-northeast-1
```

# ４．WordPressからS3接続
前段でインストールした「WP Offload Media Lite」の設定をしていきます。
WordPressの管理画面にログインし、プラグイン＞WP Offload Media Lite＞Settingに遷移します。
①「Storage Provider」として「Amazon S3」を選択
②「2. Connection Method」は「Define access keys in wp-config.php」を選択
③ wp-config.phpを編集し、追記。私はローカルのディスクをマウントしているので、直接編集します。
```
/* Add any custom values between this line and the "stop editing" line. */

define( 'AS3CF_SETTINGS', serialize( array(
	'provider' => 'aws',
	'access-key-id' => 'xxxx（前段でメモしたもの）',
	'secret-access-key' => 'xxxx（前段でメモしたもの）',
) ) );

/* That's all, stop editing! Happy publishing. */
```
上書きした瞬間、反映されたらしく、画面が勝手に次のページに移行しました。
おかげで画面スクリーンショットを撮り忘れました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3934396/a49cdb05-9740-f02a-aac6-ae815048d7b4.png)
これで画像ファイルなどが自動でS3にアップロードされるようになりました。

# ５．次のステップ
ChatGPT先生は以下のように教えてくれました。
１．ローカルでWordPressを起動し、プラグイン設定を完了。
２．設定済みの環境をDockerイメージとして保存。
３．RDS移行とともに、ECS（Fargate）にデプロイ。
４．デプロイ後にS3設定が有効な状態で運用開始。

今は上記の１が完了したところです。
長くなりそうなので、２以降は別ページに記載します。
はたして無事に目標を達成できるのか？！　乞うご期待ｗ

★続きのページは以下
 https://qiita.com/twilightdragonfly/items/3c62c90e66d83cf9c906