terraformでのwordpress構築+SSL化

#本記事は、copilotで下書を書いています。
#terraformでの構築部分はこちらの記事を参考にして実施いたしました.。
 https://qiita.com/koseiinfratop/items/a307393ed74dca01ab86



### はじめに
今回はTerraformを使用してAWS環境上にWordPressサイトを構築し、SSLでセキュリティを強化する方法を紹介します。Terraformはインフラストラクチャーのコード化を可能にし、繰り返し可能な方法でサーバーをデプロイすることができます。

### １章：Terraformファイル準備
まず、AWSのようなクラウドプロバイダーで使用するためのTerraformファイルを準備します。これには、ネットワーク設定、サーバーインスタンス、データベース、その他必要なリソースの定義が含まれます。

今回用意したファイルは下記の9つです。
上4つがterraformの設定ファイルで、残りがwordpressを構築するための設定ファイルです。各ファイルの内容と説明はページ下部に記載しております。


| ファイル名| 説明 |
|:-:|:-:|
|  main.tf |  Terraformの設定ファイル |
| terraform.tfstate  | インフラストラクチャの状態ファイル  |
|  terraform.tfvars | 変数定義ファイル  |
|  variable.tf | 変数宣言ファイル  |
|  wordpress_config.sh | WordPressの設定スクリプト  |
|  init.sh | 初期設定スクリプト  |
|   nginx_config.sh | Nginx設定スクリプト   |
|  nginx_default | Nginxのデフォルト設定ファイル  |
|  prepareWordPress.sql |  WordPressのデータベース設定スクリプト |



**cloud9の環境に「handson」のフォルダを作成し各ファイルを配置**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3328060/becf41ba-0b34-1130-d6f4-d28baea87624.png)

### ２章：実行
下記3つのコマンドを実行することで、Terraformはmain.tfに記述された設定に基づいて、WordPressのインフラストラクチャを構築します。また、他のスクリプト（init.sh、nginx_config.sh、wordpress_config.shなど）は、必要なソフトウェアのインストールや設定を行います

`terraform fmt `
このコマンドは、Terraform設定ファイル（main.tfなど）を整形します。これにより、コードが読みやすくなり、潜在的なエラーが見つけやすくなります。


`terraform plan`
このコマンドは、Terraformが行う予定の操作を表示します。これにより、何が作成、更新、または削除されるかを確認できます。これは、意図しない変更を適用する前に、設定が期待通りであることを確認するためのステップです。

`terraform apply`
最後に、このコマンドは実際にリソースを作成、更新、または削除します。terraform planで表示された操作が期待通りであることを確認した後に、このコマンドを実行します。


### ３章：WordPress初期設定
今回の設定だとwordpressのサーバーのIPが可変なので
固定IPへの紐づけ、およびドメインの取得を行います。
その後Route53でドメイン経由でのアクセスができるようにいたします。

下記のサイトを参考に実施いたしました

https://tanojinfrom30.com/2021/03/12/get-mydomain/

### ４章：SSL化
今回は**Really Simple SSL**というwordpressのプラグインをインストールしてSSL化を行いました
3章同様に下記サイトを参考にしましたが、躓いた点などを記載いたします。

https://tanojinfrom30.com/2021/03/13/wordpress-https/

#### 1:管理コンソールへのログイン時に、クッキーが効かずログインできない。
→この場合、`/var/www/html/wordpress/wp-config.php`に下記を追記して、
wordpressのEC2インスタンスのIPと揃えることにより、ログインができました。
```wp-config.php
/* Add any custom values between this line and the "stop editing" line. */
define('RELOCATE',true);
define('WP_HOME','http://XX.XX.XX.XX/wordpress');
define('WP_SITEURL','http://XX.XX.XX.XX/wordpress'); 
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3328060/4d3c8c7e-55a5-9bc7-f054-ea48f522d352.png)

#### 2:SSL有効化後`wp-config.php`が編集できずに、プラグイン「Really Simple SSL」でエラーが発生。
下記コード内容を`wp-config.php`へ追記
```wp-config.php
define('RELOCATE',true);
define('WP_HOME','http://tech-hobby1.com/wordpress');
define('WP_SITEURL','http://tech-hobby1.com/wordpress');

$_SERVER['HTTPS']='on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
```

#### 3:「Really Simple SSL」でのセキュリティチェックにて警告が発生。
下記コード内容を`wp-config.php`へ追記
```
//Begin Really Simple SSL session cookie settings
@ini_set('session.cookie_httponly', true);
@ini_set('session.cookie_secure', true);
@ini_set('session.use_only_cookies', true);
//END Really Simple SSL cookie settings
```

### おわりに：
下記画面ショットのようにwordpressのサイトをterrafrmで構築し、SSL化をすることができました。
Terraformを使用することで、WordPressサイトの構築とSSL化を効率的かつ安全に行うことができます。このガイドが皆さんのプロジェクトに役立つことを願っています。どうぞ実践してみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3328060/9448aff2-9e0c-ec20-1db2-008045001306.png)