ECSでWordPress構築

## はじめに
ECSでWordPressを立ち上げてみました。前提環境（VPC、ALB、RDS等）はTerraformにて過去記事で作成しているので本記事ではコンソール上でのFargate構築にフォーカスします。

## 構成

![構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812406/57493ad4-46da-49b5-a40e-a356e13089a7.png)

## Dockefileの作成
- DockerhubからWordPressの公式イメージを使用
[Wordpress-公式イメージ](https://hub.docker.com/_/wordpress)
- S3（メディアファイル）とCloudFront（CDN）のプラグインは以下からダウンロード
[Amazon S3、DigitalOcean Spaces、Google Cloud Storage 向けの WP Offload Media Lite](https://wordpress.org/plugins/amazon-s3-and-cloudfront/#description)
```
FROM wordpress:6.7.2-php8.1-apache

RUN set -ex; \
    apt-get update && apt-get install -y \
        wget \
        unzip \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# プラグイン関連の作業ディレクトリ変更
WORKDIR /usr/src/wordpress/wp-content/plugins

RUN set -ex; \
    wget -q -O amazon-s3-and-cloudfront.zip https://downloads.wordpress.org/plugin/amazon-s3-and-cloudfront.3.2.11.zip \
    && unzip -q -o '*.zip' -d /usr/src/wordpress/wp-content/plugins \
    && chown -R www-data:www-data /usr/src/wordpress/wp-content/plugins \
    && rm -f '*.zip'

RUN chown -R www-data:www-data /var/www/html

# 作業ディレクトリをデフォルトに変更
WORKDIR /var/www/html
```

## ECRにプッシュ
```
$ docker push hogehoge.dkr.ecr.ap-northeast-1.amazonaws.com/wordpress:latest
The push refers to repository [hogehoge.dkr.ecr.ap-northeast-1.amazonaws.com/wordpress]
latest: digest: sha256:ebf95d66d646e28adfdf395bfa7cbbcc4b9f4cce803050370e5b12 size: 856
```

## ECS
### クラスタの作成
![202503027_000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812406/70e62717-4909-43f9-b2b8-1500c0a17b1d.jpeg)

### タスク定義の作成
![202503027_000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812406/972242ec-147f-4de1-9f72-986471374ee5.jpeg)

![202503027_000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812406/650d1ed0-9d1a-4905-a5f2-3f81625c7f83.jpeg)


#### DBへの接続確立のために追加します。値のタイプをValueformにするとSSMパラメータを参照してしまうので注意。

![202503027_000012.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812406/f453175a-33ea-4199-a21e-7aba7c2c2bc7.jpeg)



### サービスの作成
- ↓に加えてネットワーキング設定で上の構成でのVPC、パブリックサブネットとSG、ロードバランシング設定では既存のLB、TG、Listnerを使用する。
![202503027_000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812406/db1e309c-6a58-415f-beb3-761822a5cd70.jpeg)

## 確認
### ヘルスチェック
- ターゲットタイプがIPかつ上で作成したタスクのプライベートIPがターゲットとして登録されている
![202503027_000010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812406/5d56c9b3-db9d-4bcc-a52d-7ad44111cf95.jpeg)


### リクエスト 

| 項目                  | 説明                                                      
|-----------------------|----------------------------------------------------------
| HTTPステータスコード  | `HTTP/1.1 302 Found` リダイレクトの発生を示す             
| Location              | リダイレクト先URL 独自ドメインにリダイレクトされている                                        
| Server               | MWとOSがドッカーイメージのものと一致 (`Apache/2.4.62 (Debian)`)        
| X-Powered-By         | PHP (`PHP/8.1.32`)       
| X-Redirect-By        | WordPressがリダイレクトを行っている              
| Cache-Control        | キャッシュ設定がCaching Disabled（オリジンから）

![202503027_000015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812406/d24db8a8-78fb-4651-b8cd-d7aab5ad1b31.jpeg)

### WordPress
![202503027_000011.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812406/83938283-a335-4e29-9f78-b9e061ab8d54.jpeg)


### 最後に
次回は今回コンソールで作成したパラメータから、TerraformでECRリポジトリ、ECSクラスタ、タスク定義、サービスを作成するテンプレートを作成してみる。