1. Terraform Docs 예시
DB Subnet Group
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_subnet_group
DB Instance
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_instance
예시:
인수 등:
2. Terraform 코드 작성
# 19_rds.tf
resource "aws_db_subnet_group" "pmh-dbsg" {
name = "pmh-dbsg"
subnet_ids = [aws_subnet.pmh_dba.id, aws_subnet.pmh_dbc.id]
}
resource "aws_db_instance" "pmh_dbins" {
allocated_storage = 20
storage_type = "gp2"
engine = "mysql"
engine_version = "8.0"
instance_class = "db.t2.micro"
db_name = "wordpress"
identifier = "mydb"
username = "root"
password = "12341234"
parameter_group_name = "default.mysql8.0"
availability_zone = "ap-northeast-2a"
db_subnet_group_name = aws_db_subnet_group.pmh-dbsg.id
vpc_security_group_ids = [aws_security_group.pmh_sg.id]
skip_final_snapshot = true
tags = {
Name = "pmh-db"
}
}
resource "aws_ami_from_instance" "pmh_ami"
pmh_ami 라는 이름의 이미지 생성
resource "aws_db_subnet_group" "pmh-dbsg"
pmh-dbsg 라는 이름의 DB 서브넷 그룹 생성
(앞서 만든 서브넷 ID 포함)
resource "aws_db_instance" "pmh_dbins"
pmh_dbins 라는 이름의 DB 인스턴스 생성
1. allocated_storage: 할당된 스토리지 크기 (20GB)
2. storage_type: 스토리지 유형 (일반용 SSD)
3.engine: 사용할 데이터베이스 엔진 (MySQL)
4. engine_version: 데이터베이스 엔진 버전 (8.0)
5. instance_class: 인스턴스 유형 (db.t2.micro)
6. db_name: 데이터베이스 이름 (wordpress)
7. identifier: DB 인스턴스 식별자 (mydb)
8. username 및 password: 데이터베이스 인증에 사용할 사용자 이름과 비밀번호
9. parameter_group_name: 사용할 DB 파라미터 그룹 이름
10. availability_zone: 사용할 가용 영역 (ap-northeast-2a)
11. db_subnet_group_name: DB 인스턴스가 속할 DB 서브넷 그룹 이름 (앞서 만든 DB 서브넷 그룹 id)
12. vpc_security_group_ids: DB 인스턴스에 적용할 보안 그룹 ID (앞서 만든 보안 그룹 id)
13. skip_final_snapshot: 인스턴스 삭제 시 최종 스냅샷을 생성하지 않음
tags = { Name = "pmh-db" }
리소스에 태그 지정
(DB에 식별 가능한 이름 지정)
3. Terraform 분석 및 적용
terraform 파일이 있는 위치에서 아래 명령어 실행
# 변경 사항 검토 및 확인
terraform plan
# (대화형 승인 없이)변경 사용항 적용
terraform apply -auto-approve
4. 결과
+ 변수처리하는 방법
tag 변수 파일 생성
# var.tf
variable "tag" {
type = string
default = "pmh"
}
# 19_rds.tf
resource "aws_db_subnet_group" "pmh-dbsg" {
name = "${var.tag}-dbsg"
subnet_ids = concat(aws_subnet.pmh_db[*].id)
}
resource "aws_db_instance" "pmh_dbins" {
allocated_storage = 20
storage_type = "gp2"
engine = "mysql"
engine_version = "8.0"
instance_class = "db.t2.micro"
db_name = "wordpress"
identifier = "mydb"
username = "root"
password = "12341234"
parameter_group_name = "default.mysql8.0"
availability_zone = "${var.region}a"
db_subnet_group_name = aws_db_subnet_group.pmh-dbsg.id
vpc_security_group_ids = [aws_security_group.pmh_sg.id]
skip_final_snapshot = true
tags = {
Name = "${var.tag}-db"
}
}
'AWS > Terraform' 카테고리의 다른 글
[AWS Terraform]EKS 구축 (0) | 2023.07.16 |
---|---|
[AWS Terraform]Wordpress EC2 인스턴스 생성 (0) | 2023.07.15 |
[AWS Terraform 기초]19. AutoScaling Group에 ALB 연결 (0) | 2023.07.13 |
[AWS Terraform 기초]18. AutoScaling Group 생성 (0) | 2023.07.13 |
[AWS Terraform 기초]17. Launch Template(시작 템플릿) 생성 (0) | 2023.07.13 |