全力で怠けたい

怠けるために全力を尽くしたいブログ。

既存の RDS の パラメータグループから CloudFormation テンプレートを簡単に作るやり方のメモ。

AWS コンソールから作成した RDS の DB パラメータグループ (DBParameterGroup) のパラメータから CloudFormation テンプレートを簡単に作るやり方のメモ。

AWS のリソースは Cloudmation で管理したいけど、古から伝わる AWS コンソールをポチポチして作成した既存の RDS のパラメータグループのパラメータを1つ1つ目で見ながらテンプレートに転記していく……のは面倒くさいし時間がかかるしなにより間違いが混入しやすいからやりたくない。

=> AWS CLI で DB パラメータグループのパラメーターを取得しちゃえばいい。

RDS の DB パラメータグループから CloudFormation テンプレートを作る

RDS の DB パラメータグループのパラメータは describe-db-parameters で取得できるので、取得結果をいじって CloudFormation テンプレートにしちゃえばいい。

AWS CLI のバージョン。

$ aws --version
aws-cli/1.16.300 Python/2.7.16 Linux/4.14.171-136.231.amzn2.x86_64 botocore/1.13.36

前準備: DB パラメータグループを作る

やり方の手順の前準備として DB パラメータグループを作っておく。

DB パラメータグループのファミリーは何でもいいけど今回は MySQL 5.7 ファミリーの DB パラメータグループを作っておく。

$ aws rds create-db-parameter-group \
    --db-parameter-group-name my-db-parameter-group \
    --db-parameter-group-family mysql5.7 \
    --description 'My DB Parameter Group'

あとでパラメーターの設定値を出力するためにどれでもいいのでパラメーターの設定値を変えておく。 今回は MySQL 5.7 の DB パラメータグループはデフォルトではスロークエリログを出さない設定なので、スロークエリログを出す設定の slow_query_log=1 にしておく。

$ echo '{
    "Parameters": [
        {
            "ApplyMethod": "immediate",
            "Description": "Enable or disable the slow query log",
            "DataType": "boolean",
            "IsModifiable": true,
            "AllowedValues": "0,1",
            "Source": "user",
            "ParameterValue": "1",
            "ParameterName": "slow_query_log",
            "ApplyType": "dynamic"
        }
    ]
}' > input.json

$ aws rds modify-db-parameter-group \
    --db-parameter-group-name my-db-parameter-group \
    --cli-input-json file://input.json
{
    "DBParameterGroupName": "my-db-parameter-group"
}

DB パラメータグループのパラメータの取得

describe-db-parameters で DB パラメータグループのパラメータを取得できる。

$ aws rds describe-db-parameters --db-parameter-group-name my-db-parameter-group --source user > output.json

describe-db-parameters の出力はこんな感じの JSON になっているので、

$ cat output.json
{
    "Parameters": [
        {
            "ApplyMethod": "immediate",
            "Description": "Enable or disable the slow query log",
            "DataType": "boolean",
            "IsModifiable": true,
            "AllowedValues": "0,1",
            "Source": "user",
            "ParameterValue": "1",
            "ParameterName": "slow_query_log",
            "ApplyType": "dynamic"
        }
    ]
}

jq でいい感じに整形する。

$ cat output.json | jq -r '.Parameters[] | .ParameterName + ": " + .ParameterValue'
slow_query_log: 1

DB パラメータグループのテンプレートを作る

DB パラメータグループのテンプレートを作ってさっき出力したパラメータを Parameters のところにコピペする。

AWSTemplateFormatVersion: "2010-09-09"
Description: DB Parameter Group
Resources:
  DBParameterGroup:
    Type: "AWS::RDS::DBParameterGroup"
    Properties:
      Family: mysql5.7
      Description: My DB Parameter Group
      Parameters:
        # ↓さっき出力したパラメータ
        slow_query_log: 1

以上。

参考ページ