
実践!AWS CDK #21 RDS パラメータグループ
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
今回は RDS の DB クラスターパラメータグループと DB パラメータグループ を作成します。
DB クラスターパラメータグループ が DB クラスターに、DB パラメータグループ が DB インスタンスに適用されるものとなります。
前回の記事はこちら。
AWS 構成図

設計
プロパティは以下の通り。
クラスターパラメータグループ
| 項目 | 値 | 
|---|---|
| ファミリー | aurora-mysql5.7 | 
| パラメータ | time_zone: UTC | 
クラスターパラメータグループはパラメータの指定が必須となっています。よってここでは time_zone の値をデフォルト値 UTC に設定しておきます。
パラメータグループ
| 項目 | 値 | 
|---|---|
| ファミリー | aurora-mysql5.7 | 
| パラメータ | なし | 
こちらはパラメータの値は必須ではないため、特に指定はしません。
残念ながら、どちらも CDK や CFn で作成する場合はリソース名が設定できません。一定のルールに従って自動で決まります。
実装
RDS に関する処理を行うクラスに、ハイライト部分を追記しました。
import * as cdk from '@aws-cdk/core';
import { CfnDBSubnetGroup, CfnDBClusterParameterGroup, CfnDBParameterGroup } from '@aws-cdk/aws-rds';
import { CfnSubnet } from '@aws-cdk/aws-ec2';
import { Resource } from './abstract/resource';
export class Rds extends Resource {
    private readonly subnetDb1a: CfnSubnet;
    private readonly subnetDb1c: CfnSubnet;
    constructor(
        subnetDb1a: CfnSubnet,
        subnetDb1c: CfnSubnet,
    ) {
        super();
        this.subnetDb1a = subnetDb1a;
        this.subnetDb1c = subnetDb1c;
    };
    createResources(scope: cdk.Construct) {
        this.createSubnetGroup(scope);
        this.createClusterParameterGroup(scope);
        this.createParameterGroup(scope);
    }
    private createSubnetGroup(scope: cdk.Construct): CfnDBSubnetGroup {
        const subnetGroup = new CfnDBSubnetGroup(scope, 'SubnetGroupRds', {
            dbSubnetGroupDescription: 'Subnet Group for RDS',
            subnetIds: [this.subnetDb1a.ref, this.subnetDb1c.ref],
            dbSubnetGroupName: this.createResourceName(scope, 'sng-rds')
        });
        return subnetGroup;
    }
    private createClusterParameterGroup(scope: cdk.Construct): CfnDBClusterParameterGroup {
        const clusterParameterGroup = new CfnDBClusterParameterGroup(scope, 'ClusterParameterGroupRds', {
            description: 'Cluster Parameter Group for RDS',
            family: 'aurora-mysql5.7',
            parameters: { time_zone: 'UTC' }
        });
        return clusterParameterGroup;
    }
    private createParameterGroup(scope: cdk.Construct): CfnDBParameterGroup {
        const parameterGroup = new CfnDBParameterGroup(scope, 'ParameterGroupRds', {
            description: 'Parameter Group for RDS',
            family: 'aurora-mysql5.7'
        });
        return parameterGroup;
    }
}
- [参考]:class CfnDBClusterParameterGroup (construct) | AWS CDK API Reference
- [参考]:class CfnDBParameterGroup (construct) | AWS CDK API Reference
いつものパターンなので特にコメントは無し。
メインのプログラムも変更なしです。
テスト
テストコードはこちら。
ハイライト部分を追記しました。
import { expect, countResources, haveResource, anything } from '@aws-cdk/assert';
import * as cdk from '@aws-cdk/core';
import * as Devio from '../../lib/devio-stack';
test('Rds', () => {
    const app = new cdk.App();
    const stack = new Devio.DevioStack(app, 'DevioStack');
    expect(stack).to(countResources('AWS::RDS::DBSubnetGroup', 1));
    expect(stack).to(haveResource('AWS::RDS::DBSubnetGroup', {
        DBSubnetGroupDescription: 'Subnet Group for RDS',
        SubnetIds: anything(),
        DBSubnetGroupName: 'undefined-undefined-sng-rds'
    }));
    expect(stack).to(countResources('AWS::RDS::DBClusterParameterGroup', 1));
    expect(stack).to(haveResource('AWS::RDS::DBClusterParameterGroup', {
        Description: 'Cluster Parameter Group for RDS',
        Family: 'aurora-mysql5.7',
        Parameters: { time_zone: 'UTC' }
    }));
    expect(stack).to(countResources('AWS::RDS::DBParameterGroup', 1));
    expect(stack).to(haveResource('AWS::RDS::DBParameterGroup', {
        Description: 'Parameter Group for RDS',
        Family: 'aurora-mysql5.7'
    }));
});
以下を確認しています。
- DB クラスターパラメータグループのリソースが 1 つあること
- DB パラメータグループのリソースが 1 つあること
- 各リソースのプロパティが正しいこと
確認
マネジメントコンソール上でリソースを確認してみましょう。

それぞれのパラメータグループが作成されています。
クラスターパラメータグループの time_zone 設定も OK。
このグループには 390 のパラメータが存在するようです。

パラメータグループもヨシ。
こちらのパラメータ数は 293。どっちも多すぎ!

CloudFormation 版
今回のコードを CFn で書くと以下のようになります。
ClusterParameterGroupRds:
  Type: AWS::RDS::DBClusterParameterGroup
  Properties:
    Description: Cluster Parameter Group for RDS
    Family: aurora-mysql5.7
    Parameters:
      time_zone: UTC
ParameterGroupRds:
  Type: AWS::RDS::DBParameterGroup
  Properties:
    Description: Parameter Group for RDS
    Family: aurora-mysql5.7
GitHub
今回のソースコードは コチラ です。
おわりに
これで RDS 構築の下準備は完了。
次回は クラスター を作成します。
リンク
- class CfnDBClusterParameterGroup (construct) | AWS CDK API Reference
- class CfnDBParameterGroup (construct) | AWS CDK API Reference
- AWS::RDS::DBClusterParameterGroup | AWS CloudFormation User Guide
- AWS::RDS::DBParameterGroup | AWS CloudFormation User Guide
- DB パラメータグループおよび DB クラスターパラメータグループを使用する | Amazon Aurora User Guide
- リージョンとアベイラビリティーゾーン | Amazon Aurora User Guide
- [AWS::RDS::DBParameterGroup] No apparent way to set group name | GitHub Issues













