この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
今回は RDS の DB クラスターパラメータグループと DB パラメータグループ を作成します。
DB クラスターパラメータグループ が DB クラスターに、DB パラメータグループ が DB インスタンスに適用されるものとなります。
前回の記事はこちら。
AWS 構成図
設計
プロパティは以下の通り。
クラスターパラメータグループ
項目 | 値 |
---|---|
ファミリー | aurora-mysql5.7 |
パラメータ | time_zone: UTC |
クラスターパラメータグループはパラメータの指定が必須となっています。よってここでは time_zone
の値をデフォルト値 UTC
に設定しておきます。
パラメータグループ
項目 | 値 |
---|---|
ファミリー | aurora-mysql5.7 |
パラメータ | なし |
こちらはパラメータの値は必須ではないため、特に指定はしません。
残念ながら、どちらも CDK や CFn で作成する場合はリソース名が設定できません。一定のルールに従って自動で決まります。
実装
RDS に関する処理を行うクラスに、ハイライト部分を追記しました。
lib/resource/rds.ts
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
いつものパターンなので特にコメントは無し。
メインのプログラムも変更なしです。
テスト
テストコードはこちら。
ハイライト部分を追記しました。
test/resource/rds.test.ts
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