0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS CloudFormationを使った実務で使えるRDSパラメータグループとオプショングループの作成

Last updated at Posted at 2024-09-28

はじめに

実務でRDSのパラメータグループとオプショングループを設定する際、大量のパラメータ値を効率的に管理する必要がありました。

手動での設定は手間がかかるため、CloudFormationを活用して自動化することになりました。

しかし、初めて取り組んだ際に苦戦した経験があり、このブログではその時の知見を基に、CloudFormationでRDSのパラメータグループやオプショングループを作成する方法を備忘録としてまとめています。

知識整理

今回、必要な知識を簡単に整理していきます。

CloudFormationとは

AWS CloudFormationは、インフラストラクチャをコード(Infrastructure as Code、IaC)として扱い、自動的にAWSリソースを管理・構築するためのツールです。

スクリーンショット 2024-09-28 6.46.19.png
引用画像: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の作成画面

スクリーンショット 2024-09-28 7.19.24.png

パラメータグループ

スクリーンショット 2024-09-28 7.58.19.png

オプショングループ

スクリーンショット 2024-09-28 7.59.18.png

正常にカスタムのパラメータグループとオプショングループが作成できていることが確認できました!

まとめ

今回のブログでは、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の部分を適宜変更してください。

参考記事

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?