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