AWS CLIでDB系の操作をした時に、やりたいことを実現するためにいろいろと調べたことのまとめを、99%自分用メモとして、1%は社内向け情報共有として本記事を書きました。
DBのパラメータグループの中から特定のパラメータの値を変更する例
aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name <myParameterGroupName> \
--parameters "ParameterName=binlog_format,ParameterValue=MIXED,ApplyMethod=pending-reboot" \
"ParameterName=read_only,ParameterValue=1,ApplyMethod=immediate" \
"ParameterName=sql_mode,ParameterValue='STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_ENGINE_SUBSTITUTION',ApplyMethod=immediate" \
--no-cli-pager
memo
- 変更したいパラメータの
Apply type
の値によってApplyMethod
に指定できる値が違う-
Apply type
がDynamic
のものはApplyMethod=immediate
が使える -
Apply type
がStatic
のものはApplyMethod=pending-reboot
じゃないとダメ
→DB再起動しないと値が反映されない
-
- String型のパラメータの値に
,
(カンマ)を含めたい場合は'
(シングルクォーテーション)で囲む
DBのパラメータグループの中から特定のパラメータ名と値を取得する例
aws rds describe-db-cluster-parameters \
--db-cluster-parameter-group-name <myParameterGroupName> \
--query 'Parameters[?ParameterName == `binlog_format` ||
ParameterName == `read_only` ||
ParameterName == `sql_mode`].{Name:ParameterName,Value:ParameterValue}' \
--output table \
--no-cli-pager
出力結果
-------------------------------------------------------------------------------------------------------------------------------------------------------
| DescribeDBClusterParameters |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------+
| Name | Value |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------+
| binlog_format| MIXED |
| read_only | 1 |
| sql_mode | STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------+
memo
-
--query
オプションでoptput情報の絞り込みをした。 -
--output table
で表形式で出力される。指定しないとjson形式。
フィルタリングについての覚書
-
describe-db-cluster-parameters
のoptput情報の親がParameters[]
-
[?ParameterName == `binlog_format`
部分は絞り込み条件- 文字列は
`
(バッククォート)で」囲む。 - 今回は
ParameterName
を3つ抽出したいので||
で結合している。 - 1つの場合は
[?ParameterName == `binlog_format`]
となる。
- 文字列は
-
Parameters[]
の中からParameterNameとParameterValueのみ抽出-
{}
内は抽出する項目にラベルを付与するための記述- これをやると表形式の場合は列名のように出力される。
json形式の場合はラベル:値
というように出力される。
- これをやると表形式の場合は列名のように出力される。
- 抽出する項目にラベルを付与しない場合は、
{...}
部分は[ParameterName,ParameterValue]
のように記載する。この場合は値のみ出力される。
-
DBインスタンスの情報を取得する例
aws rds describe-db-instances \
--query 'DBInstances[?contains(DBInstanceIdentifier,`dev`)].{
DBClusterIdentifier:DBClusterIdentifier
, DBInstanceIdentifier:DBInstanceIdentifier
, DBParameterGroupName:DBParameterGroups[0].DBParameterGroupName
, EngineVersion:EngineVersion
, Status:DBInstanceStatus
}' \
--output table \
--no-cli-pager
出力結果
-----------------------------------------------------------------------------------------------------------------------
| DescribeDBInstances |
+---------------------+----------------------------+------------------------+---------------------------+-------------+
| DBClusterIdentifier | DBInstanceIdentifier | DBParameterGroupName | EngineVersion | Status |
+---------------------+----------------------------+------------------------+---------------------------+-------------+
| testrdbdev57 | testrdbdev57-instance-1 | testrdbdev-aurora57 | 5.7.mysql_aurora.2.11.2 | available |
| testrdbdev57 | testrdbdev57-instance-2 | testrdbdev-aurora57 | 5.7.mysql_aurora.2.11.2 | available |
| testrdbdevsb57 | testrdbdevsb57-instance-1 | testrdbdevsb-aurora57 | 5.7.mysql_aurora.2.11.1 | available |
| testrdbdevsb57 | testrdbdevsb57-instance-2 | testrdbdevsb-aurora57 | 5.7.mysql_aurora.2.11.1 | available |
+---------------------+----------------------------+------------------------+---------------------------+-------------+
フィルタリングについての覚書
-
?contains(DBInstanceIdentifier,`dev`)
でDBInstanceIdentifier
に指定の文字列を含むものだけ抽出している。 -
DBParameterGroups
は配列型なので[0]
とすることで1要素のみ抽出している。
→ パラメータグループを1つしか割当していないと分かっていたので決め打ち
DBクラスターからライターインスタンスの情報を取得する例
aws rds describe-db-clusters \
--query 'DBClusters[?contains(DBClusterIdentifier,`green`)].{
DBClusterIdentifier:DBClusterIdentifier
, InstanceIdentifier:DBClusterMembers[?IsClusterWriter==`true`]|[0].DBInstanceIdentifier
, WriterInstance:DBClusterMembers[?IsClusterWriter==`true`]|[0].IsClusterWriter
}' \
--output table \
--no-cli-pager
出力結果
----------------------------------------------------------------------------
| DescribeDBClusters |
+---------------------+---------------------------------+------------------+
| DBClusterIdentifier | InstanceIdentifier | WriterInstance |
+---------------------+---------------------------------+------------------+
| shard1-green-xxxxxx | shard1-instance-2-green-xxxxxx | True |
| shard2-green-xxxxxx | shard2-instance-1-green-xxxxxx | True |
| shard3-green-xxxxxx | shard3-instance-1-green-xxxxxx | True |
| shard4-green-xxxxxx | shard4-instance-1-green-xxxxxx | True |
| shard5-green-xxxxxx | shard5-instance-1-green-xxxxxx | True |
| shard6-green-xxxxxx | shard6-instance-2-green-xxxxxx | True |
+---------------------+---------------------------------+------------------+
memo
- Blue/Greenデプロイを作成した時に、Green環境のライターインスタンスのIdentifierが取得したかった。
フィルタリングについての覚書
-
?IsClusterWriter==`true`
で絞り込みすることによってライターインスタンスのみ取得できた。
(A or B or C) and D という条件で絞り込みする例
aws rds describe-db-instances \
--query 'DBInstances[?contains(DBInstanceIdentifier,`A`) ||
contains(DBInstanceIdentifier,`B`) ||
contains(DBInstanceIdentifier,`C`)] |
[?contains(DBInstanceIdentifier,`D`)].{
DBInstanceIdentifier:DBInstanceIdentifier
, EngineVersion:EngineVersion
, Status:DBInstanceStatus
, ParameterGroupName:DBParameterGroups[0].DBParameterGroupName
, ParameterStatus:DBParameterGroups[0].ParameterApplyStatus
}' \
--output table \
--no-cli-pager