実践!AWS CDK #21 RDS パラメータグループ
はじめに
今回は 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