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で構成を定義してしまえば、再現性・変更管理が非常に楽になります。