尝试使用Terraform来构建RDS
首先
由于开始学习Terraform,我准备将我的学习笔记兼作发布。我已经执行了以下三个发布内容并进行了RDS的构建。
1. 安装Terraform并使用其在AWS上创建EC2实例。
2. 使用Terraform设置IAM并通过会话管理器连接到EC2实例。
3. 使用Terraform设置安全组以便EC2实例可以进行HTTP连接。
向Terraform中添加RDS的定义
定义用于RDS连接的安全组。
这次,连接到RDS将从EC2进行。因此,我们将只允许从EC2所分配的安全组连接到RDS。
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
}
只允许连接到设置的安全组ID的source_security_group_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设置
密码以明文形式设置可能有些微妙,但这次我们直接进行了设置。
通过使用密码生成器和SSM参数存储,似乎可以在Terraform文件中不定义明文密码进行操作,这将是另一个机会。
使用Terraform创建了安全组和RDS
执行Terraform的计划应用
执行Terraform的plan apply命令,在AWS上创建资源。
terraform plan
terraform apply
连接到EC2并连接到RDS。
连接到使用Session Manager创建的EC2实例。
我們以與以下相同的方式連接到EC2。
在EC2上安装mysql。
sudo yum install mysql
使用mysql命令连接到RDS
mysql -u username -h RDSのエンドポイント -p
用户,请使用在rds.tf上设置的用户名和密码。
您可以从AWS控制台确认要设置的RDS终端节点。
删除已创建的资源
运行 Terraform destroy 命令,将删除 AWS 上的资源。
terraform destroy
最后一点
这次我在执行terraform destroy时,设置了将在删除rds时保留快照的配置,但是由于没有设置final_snapshot_identifier,导致destroy出现了错误。
虽然这是理所当然的事情,但在练习阶段已经意识到应用成功并不意味着能顺利进行destroy,这真是太好了。