[JAWS-UG CLI] SES:#1 Incoming用ドメインの追加



前提条件
========


SESへの権限
-----------

SESに対してフル権限があること。


AWS CLI
-------

以下のバージョンで動作確認済

* AWS CLI 1.10.63

```bash:コマンド:
aws --version
```

```text:結果(例):
      aws-cli/1.10.63 Python/2.7.11 Darwin/15.6.0 botocore/1.4.53
```

バージョンが古い場合は最新版に更新しましょう。

```bash:コマンド:
sudo -H pip install -U awscli
```


0. 準備
=======


0.1. リージョンの決定
---------------------

```bash:変数の設定:
export AWS_DEFAULT_REGION='us-west-2'
```

0.2. 変数の確認
---------------

プロファイルが想定のものになっていることを確認します。

```bash:変数の確認:
aws configure list
```

```text:結果(例):
            Name                    Value             Type    Location
            ----                    -----             ----    --------
         profile       lambdaFull-prjz-mbp13        env    AWS_DEFAULT_PROFILE
      access_key     ****************XXXX shared-credentials-file
      secret_key     ****************XXXX shared-credentials-file
          region        us-west-2        env    AWS_DEFAULT_REGION
```


1. 事前作業
===========


ドメインの決定
--------------

```bash:変数の設定:
SES_IDENTITY='<SESで利用するドメイン名>'
```


2. ドメインの登録
=================

```bash:コマンド:
aws ses list-identities \
        --query "Identities[?contains(@, \`${SES_IDENTITY}\`)]"
```

```json:結果(例):
      []
```

```bash:変数の設定:
FILE_SES_IDENTITY="${SES_IDENTITY}-verify.json" \
        && echo ${FILE_SES_IDENTITY}
```

```bash:変数の確認:
cat << ETX

        SES_IDENTITY:      ${SES_IDENTITY}
        FILE_SES_IDENTITY: ${FILE_SES_IDENTITY}

ETX
```

```bash:コマンド:
aws ses verify-domain-identity \
        --domain ${SES_IDENTITY} \
        > ${FILE_SES_IDENTITY}

      cat ${FILE_SES_IDENTITY}
```

```json:結果(例):
      {
        "VerificationToken": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx="
      }
```

```bash:変数の設定:
SES_TOKEN_VERIFY=$( \
        cat ${FILE_SES_IDENTITY} \
          | jp.py 'VerificationToken' \
          | sed 's/"//g' \
      ) \
        && echo ${SES_TOKEN_VERIFY}
```

```text:結果(例):
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

```bash:コマンド:
aws ses get-identity-verification-attributes \
        --identities ${SES_IDENTITY}
```

```json:結果(例):
      {
        "VerificationAttributes": {
          "example.jp": {
              "VerificationToken": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
              "VerificationStatus": "Pending"
          }
        }
      }
```


3. DNSへの登録
==============

```bash:TXTレコード例:
echo "_amazonses.${SES_IDENTITY}. 3600 IN TXT \"${SES_TOKEN_VERIFY}\""
```

```bash:MXレコード例:
echo "${SES_IDENTITY}. 3600 IN MX 10 inbound-smtp.${AWS_DEFAULT_REGION}.amazonaws.com."
```

```bash:コマンド:
dig txt _amazonses.${SES_IDENTITY}. | grep ^_amazonses
```

```text:結果(例)
      _amazonses.example.jp.      3600    IN      TXT     "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
```

```bash:コマンド:
dig mx ${SES_IDENTITY}. | grep MX | grep ^${SES_IDENTITY}
```

```text:結果(例)
      example.jp.         3600    IN      MX      10 inbound-smtp.us-west-2.amazonaws.com.
```


名前が引けるようになると、数分ほどでVerificationStatusがSuccessになるはずです。

```bash:コマンド:
aws ses get-identity-verification-attributes \
        --identities ${SES_IDENTITY}
```

```json:結果(例):
      {
        "VerificationAttributes": {
          "example.jp": {
              "VerificationToken": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
              "VerificationStatus": "Success"
          }
        }
      }
```

```bash:コマンド:
aws ses list-identities \
        --query "Identities[?contains(@, \`${SES_IDENTITY}\`)]"
```

```json:結果(例):
      [
        "example.jp"
      ]
```

```bash:コマンド:
aws ses list-identities 
```

```json:結果(例):
      {
        "Identities": [
          "example.jp"
        ]
      }
```


完了
====