はじめに
実務でRDSのパラメータグループとオプショングループを設定する際、大量のパラメータ値を効率的に管理する必要がありました。
手動での設定は手間がかかるため、CloudFormationを活用して自動化することになりました。
しかし、初めて取り組んだ際に苦戦した経験があり、このブログではその時の知見を基に、CloudFormationでRDSのパラメータグループやオプショングループを作成する方法を備忘録としてまとめています。
知識整理
今回、必要な知識を簡単に整理していきます。
CloudFormationとは
AWS CloudFormationは、インフラストラクチャをコード(Infrastructure as Code、IaC)として扱い、自動的にAWSリソースを管理・構築するためのツールです。
引用画像:https://zenn.dev/hi_ka_ru/articles/72af4e42ab3c98
テンプレートを作成することで、サーバーやネットワーク、データベースなどのリソースを一括で作成し、環境を標準化・自動化できます。
パラメータグループとは
Amazon RDSのパラメータグループは、RDSデータベースのパフォーマンスや動作を制御するための設定を集めたものです。
各RDSエンジンには、デフォルトのパラメータグループが存在しますが、必要に応じてカスタムパラメータグループを作成して、特定のデータベース要件に合わせた設定を適用することが可能です。
オプショングループとは
オプショングループは、RDSインスタンスに追加機能を提供するために使用されます。例えば、監視やバックアップ、暗号化など、デフォルトでは含まれていない機能を追加するために使用されます。
特にAurora MySQLでは、オプショングループを活用することで、データベースの拡張機能を柔軟に設定できます。
補足事項
PostgreSQLでは、オプショングループ(Option Group)を作成することはできません。
Amazon RDSでは、オプショングループは主にMySQL、Oracle、Microsoft SQL Serverなどのデータベースエンジンに対して提供される機能となります。一方、PostgreSQLやAurora PostgreSQLはオプショングループをサポートしておらず、代わりにパラメータグループを使用します。
実務で使えるCloudFormationテンプレート
ここでは、実務で使用可能な4つのCloudFormationテンプレートを紹介します。
MySQLとPostgreSQL、そしてAuroraクラスター構成におけるパラメータグループとオプショングループの作成を自動化するためのテンプレートです。
1. RDS MySQL 8.0 パラメータグループとオプショングループ
MySQL 8.0を使ったRDSインスタンスで、パラメータグループとオプショングループを設定するテンプレートです。パフォーマンス向上のために、各種設定をカスタマイズすることができます。
AWSTemplateFormatVersion: "2010-09-09"
Description: CloudFormation template to create RDS MySQL 8.0 Parameter Group and Option Group
Parameters:
DBFamily:
Description: MySQL DB Parameter Group Family
Type: String
Default: mysql8.0
OptionGroupName:
Description: The name of the Option Group
Type: String
Default: my-mysql-option-group
Resources:
MyDBParameterGroup:
Type: AWS::RDS::DBParameterGroup
Properties:
Description: MySQL 8.0 Parameter Group
Family: !Ref DBFamily
Parameters:
max_connections: "500"
innodb_flush_log_at_trx_commit: "2"
MyDBOptionGroup:
Type: AWS::RDS::OptionGroup
Properties:
EngineName: mysql
MajorEngineVersion: "8.0"
OptionGroupDescription: MySQL 8.0 Option Group
OptionConfigurations:
- OptionName: MARIADB_AUDIT_PLUGIN
Outputs:
ParameterGroupName:
Description: The name of the created MySQL Parameter Group
Value: !Ref MyDBParameterGroup
OptionGroupName:
Description: The name of the created MySQL Option Group
Value: !Ref MyDBOptionGroup
2. RDS PostgreSQL 13 パラメータグループ
PostgreSQL 13用のRDSインスタンスでは、オプショングループをサポートしていませんが、パラメータグループを設定することで、データベースのパフォーマンスや挙動を調整可能です。
AWSTemplateFormatVersion: "2010-09-09"
Description: CloudFormation template to create RDS PostgreSQL 13 Parameter Group
Parameters:
DBFamily:
Description: PostgreSQL DB Parameter Group Family
Type: String
Default: postgres13
Resources:
MyDBParameterGroup:
Type: AWS::RDS::DBParameterGroup
Properties:
Description: PostgreSQL 13 Parameter Group
Family: !Ref DBFamily
Parameters:
max_connections: "200"
log_statement: "all"
max_worker_processes: "8"
Outputs:
ParameterGroupName:
Description: The name of the created PostgreSQL Parameter Group
Value: !Ref MyDBParameterGroup
3. Aurora MySQL 8.0 クラスターおよびインスタンス用 パラメータグループとオプショングループ
Aurora MySQL 8.0クラスターを使う場合、クラスター全体に適用されるパラメータグループと、個々のインスタンスに適用されるパラメータグループを別々に設定できます。
さらに、オプショングループを使用して、追加機能を実装することも可能です。
AWSTemplateFormatVersion: "2010-09-09"
Description: CloudFormation template to create Aurora MySQL 8.0 Cluster and Instance Parameter Group
Parameters:
DBClusterFamily:
Description: Aurora MySQL DB Cluster Parameter Group Family
Type: String
Default: aurora-mysql8.0
DBInstanceFamily:
Description: Aurora MySQL DB Instance Parameter Group Family
Type: String
Default: aurora-mysql8.0
Resources:
MyDBClusterParameterGroup:
Type: AWS::RDS::DBClusterParameterGroup
Properties:
Description: Aurora MySQL 8.0 Cluster Parameter Group
Family: !Ref DBClusterFamily
Parameters:
character_set_server: utf8mb4
slow_query_log: "1"
MyDBInstanceParameterGroup:
Type: AWS::RDS::DBParameterGroup
Properties:
Description: Aurora MySQL 8.0 Instance Parameter Group
Family: !Ref DBInstanceFamily
Parameters:
max_connections: "500"
MyDBOptionGroup:
Type: AWS::RDS::OptionGroup
Properties:
EngineName: aurora-mysql
MajorEngineVersion: "8.0"
OptionGroupDescription: Aurora MySQL 8.0 Option Group
OptionConfigurations: []
Outputs:
ClusterParameterGroupName:
Description: The name of the created Aurora MySQL Cluster Parameter Group
Value: !Ref MyDBClusterParameterGroup
InstanceParameterGroupName:
Description: The name of the created Aurora MySQL Instance Parameter Group
Value: !Ref MyDBInstanceParameterGroup
OptionGroupName:
Description: The name of the created Aurora MySQL Option Group
Value: !Ref MyDBOptionGroup
4. Aurora PostgreSQL 13 クラスターおよびインスタンス用 パラメータグループ
Aurora PostgreSQL 13の場合も、クラスターとインスタンスそれぞれに適用するパラメータグループを作成し、データベースの挙動をカスタマイズすることができます。
AWSTemplateFormatVersion: "2010-09-09"
Description: CloudFormation template to create Aurora PostgreSQL 13 Cluster and Instance Parameter Group
Parameters:
DBClusterFamily:
Description: Aurora PostgreSQL DB Cluster Parameter Group Family
Type: String
Default: aurora-postgresql13
DBInstanceFamily:
Description: Aurora PostgreSQL DB Instance Parameter Group Family
Type: String
Default: aurora-postgresql13
Resources:
MyDBClusterParameterGroup:
Type: AWS::RDS::DBClusterParameterGroup
Properties:
Description: Aurora PostgreSQL 13 Cluster Parameter Group
Family: !Ref DBClusterFamily
Parameters:
max_connections: "300"
log_statement: "ddl"
MyDBInstanceParameterGroup:
Type: AWS::RDS::DBParameterGroup
Properties:
Description: Aurora PostgreSQL 13 Instance Parameter Group
Family: !Ref DBInstanceFamily
Parameters:
max_connections: "200"
Outputs:
ClusterParameterGroupName:
Description: The name of the created Aurora PostgreSQL Cluster Parameter Group
Value: !Ref MyDBClusterParameterGroup
InstanceParameterGroupName:
Description: The name of the created Aurora PostgreSQL Instance Parameter Group
Value: !Ref MyDBInstanceParameterGroup
CloudFormationでの実行手順と作成
Amazon RDSのパラメータグループとオプショングループを作成するには、AWS CloudFormationを使用して以下の手順に従って設定します。
手順
AWS Management Console にログイン
AWSアカウントにログインし、CloudFormationコンソールにアクセスします。
CloudFormationスタックの作成
「Create stack(スタックの作成)」を選択し、テンプレートをアップロードするか、テンプレートファイルのS3 URLを入力します。
テンプレート記述
CloudFormationテンプレートをYAMLまたはJSON形式で記述し、作成したパラメータグループやオプショングループを定義します。
CloudFormationの作成画面
パラメータグループ
オプショングループ
正常にカスタムのパラメータグループとオプショングループが作成できていることが確認できました!
まとめ
今回のブログでは、AWS CloudFormationを使って、RDSやAuroraのパラメータグループとオプショングループを自動的に作成するテンプレートの例を紹介しました。
パラメータ設定は、データベースの性能に大きく影響するため、要件に合わせた適切な設定が必要です。
CloudFormationを活用することで、手間のかかる設定作業を効率化し、セキュリティとパフォーマンスを維持しながらAWSリソースを運用できるようになります。
おまけ
ここでは、AWS CloudShellを使用して、カスタムのRDSパラメータグループとオプショングループをCSV形式で取得するためのコマンドをご紹介します。
RDSパラメータグループの取得
まず、カスタムのRDSパラメータグループを取得し、CSV形式に変換します。
aws rds describe-db-parameter-groups --query 'DBParameterGroups[?DBParameterGroupFamily==`mysql8.0`].{DBParameterGroupName:DBParameterGroupName,Description:Description}' --output text | sed 's/\t/,/g' > parameter_groups.csv
RDSオプショングループの取得
次に、カスタムのオプショングループを取得するコマンドです。
aws rds describe-option-groups --query 'OptionGroupsList[?EngineName==`mysql`].{OptionGroupName:OptionGroupName,Description:OptionGroupDescription}' --output text | sed 's/\t/,/g' > option_groups.csv
上記のコマンドはMySQLバージョン8.0のパラメータグループとオプショングループに特化しています。
他のエンジンやバージョンを取得したい場合は、mysql8.0やmysqlの部分を適宜変更してください。
参考記事