はじめに
Terraformの勉強を始めたので備忘録を兼ねて行ったことを投稿しようと思います。
以下の3つの投稿内容を実施した上でRDSの構築を行なっています。
TerraformをインストールしてTerraformでAWS上にEC2作ってみる
TerraformでIAMを設定してEC2にセッションマネージャー経由で接続してみる
Terraformでセキュリティグループを設定してEC2にhttp接続する
TerraformにRDSの定義を追加
RDS接続用のセキュリティグループを定義する
今回、RDSへの接続はEC2から行います。
その為、RDSへの接続はEC2に付与されるセキュリティグループからのみ許可するようにします。
resource "aws_security_group" "test_rds" {
name = "tf_test_rds"
tags = {
Name = "tf_test_rds"
}
}
resource "aws_security_group_rule" "rds" {
type = "ingress"
from_port = 3306
to_port = 3306
protocol = "tcp"
source_security_group_id = aws_security_group.test.id
security_group_id = aws_security_group.test_rds.id
}
source_security_group_id
に設定されたセキュリティグループIDのみ接続を許可
aws_security_group.test.id
は以下で作成したセキュリティグループです
https://qiita.com/kakita-yzrh/items/6bdc11f2882c67a949ad#http%E6%8E%A5%E7%B6%9A%E7%94%A8%E3%81%AE%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E5%AE%9A%E7%BE%A9
RDSインスタンスを定義する
RDSに関する情報を定義していきます。
resource "aws_db_instance" "test" {
allocated_storage = 10
engine = "mysql"
engine_version = "8.0.31"
instance_class = "db.t2.micro"
storage_type = "gp2"
username = "username"
password = "password"
backup_retention_period = 0
skip_final_snapshot = true
vpc_security_group_ids = [
aws_security_group.test_rds.id
]
tags = {
Name = "tf_test"
}
}
vpc_security_group_ids
に定義したRDS接続用のセキュリティグループIDを設定
password
は平文で設定するのは微妙ですが、今回はそのまま設定しています
パスワード生成用プロバイダーとSSM Parameter Storeを利用するとterraformのファイルには平文パスワードを定義せずに運用できるようですが、それはまた別の機会に
Terraformで定義したセキュリティグループとRDSを作成
Terraformのplan applyを実行
terraformのplan applyを実行して、AWS上にリソースを作成します。
terraform plan
terraform apply
EC2に接続してRDSに接続する
セッションマネージャーで作成したEC2に接続する
以下と同様にEC2に接続します。
EC2にmysqlをインストール
sudo yum install mysql
mysqlコマンドでRDSに接続する
mysql -u username -h RDSのエンドポイント -p
ユーザー、パスワードはrds.tf
で設定したもの
ホストに設定するRDSのエンドポイントはAWSコンソールから確認
作成したリソースの削除
terraform の destroyを実行して、AWS上のリソースを削除します。
terraform destroy
さいごに
今回、terraform destroy
した時にrdsの削除時にスナップショットを残す設定になっていたがfinal_snapshot_identifier
を設定していなかった為、destroyでエラーになりました。
当たり前のことですがapplyできたものが正常にdestroyできるとは限らないことに練習の段階で気付けて良かったです。