【無料利用枠】AWSでWordPressブログをつくろう Part.3 S3画像保存～SESメール転送編

# はじめに
[Part.1 初期設定～インストール編](https://qiita.com/pike3/items/0c4f194a1ad51cc15da3)
[Part.2 独自ドメイン設定～SSL化編](https://qiita.com/pike3/items/a17b95f664e2a61423fd)
->Part.3 S3画像保存～SESメール転送編
[Part.4 WordPress設定編](https://qiita.com/pike3/items/1bab8dea37be47bcdf0c)

今回の設定は必須ではありませんが、やっておくと便利な設定となります。
S3の設定については、予め設定しておかないとEC2上に画像ファイルが保存されてしまうため、早めの設定をオススメします。

# 概要
デフォルトだと画像ファイルなどの静的コンテンツはEC2上に保存されます。
機能上はそのままでも問題ないのですが、無料利用枠におけるEC2のストレージは限りがあるため、保存先としてはS3を利用すべきです。
また、メール転送サービスはSendGridでもいいのですが、AWSのサービスでまとめたほうが管理しやすいため、今回はSESを利用します。

今回の設定対象は下記の通りです。

* S3への画像保存設定
* SESを利用したメール転送

# S3への画像保存設定
WordPressブログで記事を投稿する際に、よく画像を利用すると思いますが、この画像の保存先がS3となるように設定していきます。
まずはS3バケットから作成していきます。

## S3バケットの作成
下記リンクから「バケットを作成」をクリックします。

https://s3.console.aws.amazon.com/s3/home?region=ap-northeast-1#

任意のバケット名を設定し、「パブリックアクセスをすべてブロック」のチェックを外します。
あとは全てデフォルトのまま「バケットを作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/d250823e-4dd9-29cd-41a7-01752018944b.png)

## S3のACL有効化
作成したS3バケットの「アクセス許可」のタブを開いて、オブジェクト所有者の「編集」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/b7eb80a7-fd8a-75d5-6689-bb30f46f8126.png)

ACLを有効にしておかないと、WordPress経由でS3にファイルを保存できないため、有効にしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/a4dc9bc8-e23c-e696-d573-06edbf8fc5d8.png)


## S3アクセス用のIAMユーザーの作成
この後にインストールするWordPressプラグインの設定で必要になってくるので、IAMユーザーを作成していきます。
下記リンクから「ユーザーを追加」をクリックします。

https://console.aws.amazon.com/iamv2/home?#/users

任意のユーザー名を設定した後、「アクセスキー・プログラムによるアクセス」にチェックを入れて、次にステップに移ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/99c365f8-e24a-cc5b-dda5-e48f27b8014b.png)

既存のポリシーから「AmazonS3FullAccess」にチェックを入れて、あとは全てデフォルトのまま「ユーザーの作成」まで進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/372762c0-46c3-79ab-a0a6-79057a324cd7.png)

作成が完了したら、「アクセスキーID」と「シークレットアクセスキー」が表示されるので、これらをメモしておきます。
※CSVファイルもダウンロードしておくことをオススメします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/56e61eac-f4d3-144f-75b0-006c38fd20e9.png)

## WP Offload Media Liteプラグインの設定
WordPressの画面に移り、プラグインから「WP Offload Media Lite」をインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/05915c94-3f8c-89da-794e-348ea5009e28.png)

WordPressのメニューから「設定」->「Offload Media Lite」をクリックして設定画面を表示します。

STORAGE PROVIDERとして「Amazon S3」を選択して、「Define access keys in wp-config.php」にチェックを入れると以下のような画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/6df3c0ae-b82f-a251-0f0f-ac9f9ff9ff56.png)

access-key-idとsecret-access-keyにそれぞれ先程IAMユーザーを作成した際にメモした情報をアスタリスクにところに置き換えて、メモ帳などでコピーしておきます。

TeraTermなどのSSHクライアントでEC2インスタンスに接続して、wp-config.phpを編集します。
Bitnamiの場合は、「/opt/bitnami/wordpress」配下にあります。
（Bitnamiのバージョンによって、場所が異なる場合があります。上記の場所にない場合はBitnamiのバージョンで調べてみてください。）

wp-config.php内の下記の場所にメモ帳に控えていた情報を貼り付けます。

```
define( `AS3CF_SETTINGS`, serialize( array(
    `provider` => `aws`
    `access-key-id` => [アクセスキーID]
    `secret-access-key` => [シークレットアクセスキー]
) ) );
/* That's all. stop editing! Happy publishing */
/** Absolute path to the WordPress directory. */
if ( ! define( `ABSPATH` ) ) {
```

上記の設定を保存したら、WordPressの画面に戻って、「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/794e1a9f-9ace-44fe-6cb6-0068169c5d16.png)

画面が切り替わるので、バケット名が正しいか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/21f31256-a0ae-d77e-1dcc-8944331a4989.png)

また、ADVANCED OPTIONSのチェックをONにします。こちらをONにすると、S3にコピーしたファイルは自動的にローカルサーバーから削除されるので便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/97135ca4-f6f3-4372-2be4-5e2b4cabf6ee.png)

WordPressのメディアライブラリから何か画像ファイルをアップロードして、ファイルのURL欄にs3と書かれていれば成功です。
※AWS ConsoleからS3バケットを中身を見て確認することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/8bbaa3fa-4865-33de-d367-e5e07f4b4988.png)

# SESを利用したメール転送
WordPressにログインがあった際やお問い合わせフォームを作って、お問い合わせがあった場合など、
何かイベントがあった時にメールを送信する機能が必要となります。

SESを利用することで、メール転送の設定を行っていきます。

## SESのSMTP設定
下記リンクから、「Create identity」をクリックします。

https://ap-northeast-1.console.aws.amazon.com/ses/home?region=ap-northeast-1#/

「Email address」を選択して、入力欄にメールアドレスを入力します。その後、「Create identity」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/f54044fc-4a75-0b0a-cb59-0d94b51a0285.png)

入力したメールアドレス宛に確認のメールが届くので、メール内の確認URLをクリックします。
そうすると、「identity status」の項目がVerifiedに変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/30ab1356-becc-4751-7041-dbaf3e450866.png)

次に「SMTP settings」から「Create SMTP credentials」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/58b612b9-ccd2-2473-fe2a-1e6d7a88a5b8.png)

IAM User Nameはデフォルトのまま「作成」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/9b0fba65-1515-693b-2242-1e2a0a18f836.png)

SMTPユーザー名とSMTPパスワードが表示されるので、メモしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/d67c9d76-d1bd-03d5-5d09-515968bda331.png)

## WP Mail SMTPプラグインの設定
WordPressの画面に移り、プラグイン一覧から「WP Mail SMTP by WPForms」をインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/fd85c68c-0080-ca0f-e429-5ed5ec32ae6c.png)

インストールが完了したら、プラグインの設定画面に移り、「このメールを強制使用」にチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/036668ab-0fcc-b907-dafe-de6059052dcc.png)

次にメーラーのうち、「その他のSMTP」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/17ae4cc5-a717-2b42-89d4-0c6dd6929124.png)

SMTPの設定は以下のようにします。
ホスト名はAWS SESの画面から「SMTP endpoint」の項目から確認できます。
SMTPユーザー名とパスワードは先程メモしたものを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2520632/0f70e58b-3a43-0b08-aaaf-573d90fefb3f.png)

以上で設定は完了です。テストメールの送信からメールが送れるか確認してください。


# さいごに
次回で最終回となります。

内容としてはWordpress側の設定（SSL、Backup、ログインURLの変更）になります。
WordPress側のSSLの設定はやっておくべきですが、それ以外は別のやり方もあるので必須ではありません。

https://qiita.com/pike3/items/1bab8dea37be47bcdf0c