0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Terraform学習ログ Part3:RDSパラメーターグループ・オプショングループ・DBサブネットグループを理解する

Last updated at Posted at 2025-11-05

Terraform学習3日目。
今日はRDSの「内部設定」をTerraformでどう管理するかを学びました。
特に、パラメーターグループ/オプショングループ/サブネットグループといった、RDSを動かすための“裏側の設定”を理解しました。

1. RDS パラメーターグループとは
RDS(データベース)の内部設定(my.cnfなど)をまとめた設定集。

Terraformを使えば、
「文字コード」「接続数」「ログ設定」などのDB動作を一括で管理・変更できます。

Terraformリソース:aws_db_parameter_group

主な属性は以下の通りです。

name
family
parameter
tags

2. オプショングループとは
RDSに**追加機能(拡張機能)**を有効化するための設定集。

具体的には以下のような拡張機能を有効にします。

MySQL の Audit Plugin(監査ログ)

SQL Server の Transparent Data Encryption(暗号化)

Oracle の OEM エージェント

Terraformリソース:aws_db_option_group

主な属性は以下の通りです。

name
engine_name *
major_engine_version
option
tags

3. サブネットグループとは
RDSインスタンスを配置するサブネットの集まり(セット)。

💡 RDSはVPC内で動作しますが、「どのサブネットに配置するか」を指定する必要があります。
その指定をまとめたのが DB Subnet Group です。

Terraformリソース:aws_db_subnet_group

主な属性は以下の通りです。

name
subnet_ids *
tags

4. ランダム文字列の自動生成(randomプロバイダー)
RDSのDBパスワードなどに使うため、
hashicorp/random プロバイダーを使って安全な文字列を自動生成します。

Terraformリソース:random_password

length *
upper
lower
number
special
override_special

これを使うことで、
Terraformで「かぶらない名前」や「安全なパスワード」を自動生成できます。

5. RDS本体設定(aws_db_instance)
RDSの本体となるリソース。
ここで、エンジン・接続情報・ストレージ・ネットワークなどをまとめて設定します。

(1) 基本設定

aws_db_instance (基本設定)
engine *
engine_version
identifier *
instance_class *
username *
password *
tags

(2) ストレージ設定

aws_db_storage(ストレージ)
allocated_storage
max_allocated_storage
storage_type
storage_encrypted

(3) ネットワーク設定

aws_db_instance (ネットワーク)
multi_az
availability_zone
db_subnet_group_name
vpc_security_group_ids
publicly_accessible
port

(4) DB設定(内部設定)

aws_db_instance (DB設定)
name
parameter_group_name
option_group_name

(5) バックアップ設定

aws_db_instance (バックアップ)
backup_window
backup_retention_period
maintenance_window
auto_minor_version_upgrade

(6) 削除防止系の設定

aws_db_instance (削除防止)
deletion_protection
skip_final_snapshot
apply_immediately

6. RDSの注意点:パスワードはtfstateに平文で保存される
RDSインスタンスをTerraformで作成すると、
パスワードがクリアテキスト(平文)でtfstateファイルに保存される点に注意が必要です。

つまり、本来パスワードを知るべきでない人でも、tfstateを見ればパスワードが分かってしまう危険があります。

対応策1:後からパスワードを変更する

Terraformで作成した後に、
AWSコンソールやCLIなどで直接パスワードを更新。

→ tfstate内の古いパスワードが使えなくなるので安全性が高まります。

対応策2:運用で回避(アクセス権制御)

管理者と開発者でtfstateファイルへのアクセス権限を分離。
パスワードやtfstateを参照できる人を制限することでリスクを軽減します。

7. RDS削除時の注意点
RDSインスタンスを削除する場合、誤操作を防ぐための属性を明示的に設定する必要があります。

deletion_protection = false
skip_final_snapshot = true
apply_immediately   = true

これらを設定していないと、Terraformが削除をブロックしてしまう場合があります。

まとめ:RDSは「見えない部分の設計」が重要

今回の学びのポイント:
RDSのパラメーター・オプション・サブネットグループの関係を理解
TerraformでDBの動作設定(my.cnf相当)をコード化
tfstateにパスワードが残るリスクと対処法を理解
RDSの構築はEC2よりもパラメータが多く複雑ですが、
一度Terraformで構成を定義してしまえば、再現性・変更管理が非常に楽になります。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?