Route53でDDNSみたいなことをする（ための準備）

#IAMでRoute53レコード更新用のグループとユーザを作成 
####グループの作成（説明は最小）
![スクリーンショット 2021-04-15 110948.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293888/9f1681ce-6b65-16af-439d-f30e71d788f6.png)
ポリシーは「AmazonRoute53AutoNamingRegistrantAccess」を選択。多分これが一番権限が少ないと思います。
![スクリーンショット 2021-04-15 111106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293888/3ff9e9c5-5afa-ea0f-4be9-57c1ce107422.png)
最後に確認画面でグループを作成。(このSSではポリシーは設定されていません）![スクリーンショット 2021-04-15 111116.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293888/c33dc03d-9e37-74cc-2b9e-73eaa0e51dcf.png)![スクリーンショット 2021-04-15 111129.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293888/d0b7a053-14c4-007e-caf4-43cee2fb3412.png)

####ユーザの作成
![スクリーンショット 2021-04-15 111142.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293888/dde6e108-5899-deeb-442d-69115c1c1a35.png)![スクリーンショット 2021-04-15 111156.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293888/2620b4e7-1aec-16b3-6258-cfeb86920725.png)
先程作成したグループを割り当て![スクリーンショット 2021-04-15 111208.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293888/9afba2b1-094c-d3ac-a1b7-7c7feeeca46b.png)
タグは自由に。![スクリーンショット 2021-04-15 111217.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293888/24e995c4-d4eb-7722-22b2-3c8ba4b6c558.png)
![スクリーンショット 2021-04-15 111225.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293888/bc34c1ef-53ba-1a7c-a519-fbdc0065a8ba.png)
忘れないようにアクセスキーとシークレットキーが記載されているcsvをダウンロードしておきましょう。
![スクリーンショット 2021-04-15 111237.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293888/6f905b34-8c2f-820a-bd8c-6941db06fa19.png)

#オンプレLinux上での操作(今回はubuntu)
####AWSユーザの登録
AWSCLIとJQがインストールされていること。
ここでアクセスキーとシークレットキーを使ってユーザを作成。

```bash
$ aws configure --profile route53ddns

AWS Access Key ID [None]: ACCESS_KEY
AWS Secret Access Key [None]: SECRET_KEY
Default region name [None]: #入力無し
Default output format [None]: #入力無し
```

```bash
$ aws configure list --profile route53ddns
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile         route53ddns           manual    --profile
access_key     ******************** shared-credentials-file
secret_key     ******************** shared-credentials-file
    region                <not set>             None    None
```

####IP更新用JSONのテンプレートを作成
"//"はJSON上ではコメントにならないので削除してね☆

```json
{
        "Changes":
        [
                {
                // 更新なのでUPSERT
                "Action":"UPSERT",
                "ResourceRecordSet":
                        {
                        // 更新したいレコードの設定（今回はAレコードなので以下）
                        "Name":"{%HOST%}.example.net",
                        "Type":"A",
                        "TTL":300,
                        "ResourceRecords":
                                [
                                        {
                                        // 取得をどこから行うかによるが、
                                        // 今回は取得したJSONにダブルクォーテーションがついているのでこっちはつけない。
                                        "Value":{%IP%}	
                                        }
                                ]
                        }
                }
        ]
}
```

####グローバルIPを取得してファイルに保存
httpbin.org/ipからjson形式で取得可能。
取得出来るならどこから取得してもヨシ

```bash
$ curl httpbin.org/ip > globalip.json
$ cat globalip.json
{
  "origin": "MY_GLOBAL_IP"
}
```

jqで抽出して変数にセット。

```bash
$ test=$(jq ".origin" globalip.json)
```

sedで作っていたテンプレートの値を置き換えて、別ファイルに出力。

```bash
sed -e "s/{%IP%}/${test}/g;s/{%HOST%}/test/g" dyndns.tmpl > update.json
```

####ファイルを指定して更新を実行

```bash
$ aws route53 change-resource-record-sets --profile route53ddns --hosted-zone-id HOST_ZONE_ID --change-batch file:///UPDATE_JSON_LOCAL_PATH
{
    "ChangeInfo": {
        "Id": "/change/*********************",
        "Status": "PENDING",
        "SubmittedAt": "2021-04-15T02:54:55.544Z"
    }
}
$
```

Route53のコンソールで対象にしたレコードの値が更新されていれば成功。
これをcronなりを使って自動化すれば多分出来る。たぶん。（まだやってない）

主に参考にさせていただいた記事：[Route53でダイナミックDNS](https://qiita.com/keys/items/264a64c2841875d51cdd)

2021/05/06追記：
certbotを使ってnginxとletencryptでssl化したので参照したサイト(機械翻訳かな？)：[Ubuntu 20.04でLet’s Encryptを使用してNginxを保護する方法](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04-ja)

2021/05/20追記：
[GitHub](https://github.com/K-MountainBook/route53_script)