AWS CLIのコマンド一覧（Amazon Aurora編）

# はじめに
この投稿はアイスタイル [Advent Calendar 2023](https://qiita.com/advent-calendar/2023/istyle) の20日目の記事です。
アイスタイルのDBREチームに所属している新卒1年目のisomです。

アイスタイルでは様々なデータベースを使っているのですが、その一部にAmazon Auroraを利用しています。
必要に応じてAuroraのスケールアウト・スケールアップを手作業で行うのですが、そこで利用されるコマンドの統一がされていなかったため、今回AWSの勉強もかねて、動作検証を重ねよく使用するCLIの一覧を作成しました。


# 実行環境
AWS CLI バージョン2～

# CLI 出力フォーマットについて
[ユーザガイド](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-usage-output-format.html)
下記のオプションをコマンドにつけることで、出力フォーマットを指定することができます
|オプション|説明|
|:-----------|:-----------|
|```--output json```| JSON 文字列としてフォーマットされる|
|```--output yaml```| YAML 文字列としてフォーマットされる|
|```--output text```| AWS CLI の出力がタブ区切りの行に整形されて出力される|
|```--output table```| テーブルとしてフォーマットされる|



# コマンド一覧
## Aurora クラスター一覧
[ドキュメント](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/describe-db-instances.html)

**【入力項目】**
- Aurora クラスター名

**【出力項目】**
- インスタンス名
- インスタンスクラス
- AZ
- CA
- メンテナンスウィンドウ
- 拡張モニタリングの詳細度
- モニタリングロール
- パラメータグループ
- タグ

```
aws rds describe-db-instances \
--filters "Name=db-cluster-id,Values=<Aurora クラスター名>" \
--query 'DBInstances[*].{InstanceName: DBInstanceIdentifier, InstanceClass:DBInstanceClass,AZ:AvailabilityZone,CA:CACertificateIdentifier, PreferredMaintenanceWindow:PreferredMaintenanceWindow, CopyTagsToSnapshot:CopyTagsToSnapshot, MonitoringRoleArn:MonitoringRoleArn,MonitoringInterval:MonitoringInterval, DBParameterGroups:DBParameterGroups,Tags:TagList}'
```


```:出力例

[
    {
        "InstanceName": "database-sample-instance-1",
        "InstanceClass": "db.t4g.medium",
        "AZ": "ap-northeast-1a",
        "CA": "rds-ca-2019",
        "PreferredMaintenanceWindow": "fri:16:01-fri:16:31",
        "CopyTagsToSnapshot": true,
        "MonitoringRoleArn": "arn:aws:iam::xxxxxxxxxx",
        "MonitoringInterval": 60,
        "DBParameterGroups": [
            {
                "DBParameterGroupName": "db-sample",
                "ParameterApplyStatus": "in-sync"
            }
        ],
        "Tags": [
            {
                "Key": "sample1",
                "Value": "sample1"
            },
           
        ]
    }
]
```


## Aurora クラスター内のインスタンス一覧(ライター・リーダー確認)
[ドキュメント](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/describe-db-clusters.html)

**【入力項目】**
- Aurora クラスター名

**【出力項目】**
- インスタンス名
- ライターかの真偽値（ライターならtrueを返します）

```
aws rds describe-db-clusters  \
--db-cluster-identifier <Aurora クラスター名>  \
--query 'DBClusters[*].DBClusterMembers[*].{InstanceName: DBInstanceIdentifier, IsClusterWriter:IsClusterWriter}'  \
--output table
```


```:出力例
-------------------------------------------------------------------
|                       DescribeDBClusters                        |
+---------------------------------------------+-------------------+
|                InstanceName                 |  IsClusterWriter  |
+---------------------------------------------+-------------------+
|  database-sample-instance-1                 |  False            |
|  database-sample-instance-2                 |  True             |
+---------------------------------------------+-------------------+
```

## Aurora クラスター起動
[ユーザガイド](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-cluster-stop-start.html#aurora-cluster-start)　[ドキュメント](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/start-db-cluster.html)

```
aws rds start-db-cluster --db-cluster-identifier <Aurora クラスター名>

(例)
aws rds start-db-cluster --db-cluster-identifier database-sample-cluster
```

## Aurora クラスター停止
[ユーザガイド](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-cluster-stop-start.html)　[ドキュメント](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/stop-db-cluster.html)

:::note warn
DBクラスターは最大7日間停止できます。
放置すると7日後に自動で起動され、課金されるので注意してください
:::
```
aws rds stop-db-cluster --db-cluster-identifier <Aurora クラスター名>
 
(例)
aws rds stop-db-cluster --db-cluster-identifier database-sample-cluster
```

## スケールアウト
[ユーザガイド](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)　[ドキュメント](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/create-db-instance.html)

**【入力項目】**
- 新しく作成するインスタンス名
- Aurora クラスター名
- インスタンスタイプ
- AZ
- パラメータグループ
- メンテナンスウィンドウ
- モニタリングロール
- 拡張モニタリングの詳細度
- タグのキー、バリュー（スペース区切りで複数指定可）

必要に応じてオプションを追加・削除してください

```
aws rds create-db-instance  \
--db-instance-identifier <新しく作成するインスタンス名>  \
--db-cluster-identifier <Aurora クラスター名>  \
--engine aurora-mysql --db-instance-class <インスタンスタイプ>  \
--availability-zone <AZ>  \
--db-parameter-group-name <パラメータグループ> \
--preferred-maintenance-window <メンテナンスウィンドウ> \
--monitoring-role-arn <モニタリングロール> \
--monitoring-interval <拡張モニタリングの詳細度> \
--copy-tags-to-snapshot \
--tags Key=<キー1>,Value=<バリュー1> Key=<キー2>,Value=<バリュー2>

```

## フェイルオーバー
[ドキュメント](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/failover-db-cluster.html)

**【入力項目】**
- Aurora クラスター名
- ライターにしたいインスタンス名

```
aws rds failover-db-cluster  \
--db-cluster-identifier <Aurora クラスター名>  \
--target-db-instance-identifier <ライターにしたいインスタンス名>
 
 
（例）
aws rds failover-db-cluster  \
--db-cluster-identifier database-sample-cluster  \
--target-db-instance-identifier database-sample-instance-1
```

## インスタンスクラス変更
スケールアップ、スケールダウンに使います。
[ドキュメント](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/modify-db-instance.html)

【入力項目】

- インスタンス名
- インスタンスクラス

【オプションの説明】
|オプション|説明|
|:-----------|:-----------|
|`--apply-immediately`|すぐに適用|
|`--no-apply-immediately`|次のメンテナンスウィンドウ中に適用|

```
aws rds modify-db-instance  \
--db-instance-identifier <インスタンス名>  \
--db-instance-class <インスタンスクラス>  \
--apply-immediately
 
 
（例）
aws rds modify-db-instance  \
--db-instance-identifier database-sample-instance-1  \
--db-instance-class db.t3.medium  \
--apply-immediately
```
コマンドを実行し、jsonが出力されたら成功　完了までに<b>10分ほど</b>かかります。

## インスタンス削除
[ユーザガイド](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_DeleteInstance.html)　[ドキュメント](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/describe-db-instances.html)

**【入力項目】**
- 削除したいインスタンス名

**【オプションの説明】**
|オプション|説明|
|:-----------|:-----------|
|`--no-delete-automated-backups`|自動バックアップを保持|
|`--delete-automated-backups`|自動バックアップを保持しない|
|`--final-db-snapshot-identifier <スナップショット名>`|最終スナップショットを作成|
|`--skip-final-snapshot`|最終スナップショットを作成しない|


```
aws rds delete-db-instance  \
--db-instance-identifier <削除したいインスタンス名>  \
--skip-final-snapshot  \
--delete-automated-backups
 
 
（例）
aws rds delete-db-instance  \
--db-instance-identifier database-sample-instance-1  \
--skip-final-snapshot \
--delete-automated-backups

```


# まとめ
最後まで読んでいただきありがとうございました。
CLIの記載方法が最初はわからず苦労しましたが、ドキュメントやユーザガイドを読み進めていくうちに理解できました。
AWSのドキュメントやユーザガイドはAWS初心者の私にも読みやすくてありがたかったです🙏

今回のCLIは一度作成すれば流用できるので、ぜひ使ってみてください！