-
[52일차] Terraform & Full Stack 애플리케이션 구성_02교육/코드스테이츠 2023. 2. 9. 20:50
- RDS
DB는 서브넷 그룹이 필요하다.
deletion_protection = true 를 통해 terraform destroy 시 RDS를 제외해서 나머지를 삭제함.
# db 서브넷 resource "aws_db_subnet_group" "rds_subnet" { name = "db_subnet_group" subnet_ids = [aws_subnet.private-subnet1.id, aws_subnet.private-subnet2.id] } # RDS resource "aws_db_instance" "test_db" { allocated_storage = 8 skip_final_snapshot = true deletion_protection = true # RDS를 제외해서 나머지를 삭제함 engine = "mysql" engine_version = "8.0.28" instance_class = "db.t3.micro" db_name = "testdb" username = "admin" password = "${var.RDS_password}" vpc_security_group_ids = [aws_security_group.db-sg.id] db_subnet_group_name = aws_db_subnet_group.rds_subnet.name tags = { Name = "rds-instance"} }
- Load Balancer
output을 따로 설정해 apply 후에도 자동으로 dns주소가 자동으로 나오게 만들었다.
attachment를 통해 Lb에 인스턴스를 연결 시켰다.
# apply 후 dns 자동 접속 output "name" { value = aws_lb.test-lb.dns_name description = "domain name" } # 로드 밸런서 resource "aws_lb" "test-lb" { name = "test-lb" internal = false load_balancer_type = "application" security_groups = [aws_security_group.web-sg.id] subnets = [aws_subnet.public-subnet1.id, aws_subnet.public-subnet2.id] enable_cross_zone_load_balancing = true } resource "aws_lb_target_group_attachment" "test-tg" { target_group_arn = aws_lb_target_group.test-tg.arn target_id = aws_instance.test-web.id port = 8080 } # 타겟 그룹 resource "aws_lb_target_group" "test-tg" { name = "test-tg" port = 8080 protocol = "HTTP" vpc_id = aws_vpc.test_vpc.id health_check { interval =30 healthy_threshold = 3 path = "/" unhealthy_threshold = 3 } } # 리스너 resource "aws_lb_listener" "test-listener" { load_balancer_arn = aws_lb.test-lb.arn port = 80 protocol = "HTTP" default_action { type = "forward" target_group_arn = aws_lb_target_group.test-tg.arn } }
- Auto Scailing Group
키 페어 설정 명령어
ssh-keygen -t rsa -b 4069 -C {jihoooon555@gmail.com} -f "./testpubkey" -N ""
# 키 페어 설정 resource "aws_key_pair" "terraform-key-pair" { key_name = "testpubkey" public_key = file("./testpubkey.pub") tags = { description = "terraform key pair" } } # 오토스케일링 resource "aws_autoscaling_group" "test_asg" { min_size = 1 max_size = 3 health_check_type = "ELB" desired_capacity = 2 target_group_arns = [aws_lb_target_group.test-tg.arn] launch_configuration = aws_launch_configuration.test_launch_config.name vpc_zone_identifier = [aws_subnet.public-subnet1.id, aws_subnet.public-subnet2.id] tag { key = "Name" value = "test_asg" propagate_at_launch = true } } # 시작 구성 resource "aws_launch_configuration" "test_launch_config" { name_prefix = "ec2-" image_id = "ami-0cb1d752d27600adb" instance_type = "t2.micro" key_name = aws_key_pair.terraform-key-pair.key_name security_groups = [aws_security_group.web-sg.id] associate_public_ip_address = true user_data = <<-EOF #!/bin/bash echo "Hello, World" > index.html nohup busybox httpd -f -p ${var.server_port} & EOF lifecycle { create_before_destroy = true } }
테라폼으로 구축 완료후 로드밸런서의 DNS로 접속하여 확인할 수 있다.
=================================================================
참고 문서
Terraform Registry
registry.terraform.io
https://spacelift.io/blog/terraform-aws-vpc
How to Build AWS VPC & Subnets using Terraform - Step by Step
In this post, we discuss how to develop a basic AWS VPC using Terraform - building them from scratch and using certified published modules.
spacelift.io
GitHub - brikis98/terraform-up-and-running-code: Code samples for the book "Terraform: Up & Running" by Yevgeniy Brikman
Code samples for the book "Terraform: Up & Running" by Yevgeniy Brikman - GitHub - brikis98/terraform-up-and-running-code: Code samples for the book "Terraform: Up & Running&...
github.com
'교육 > 코드스테이츠' 카테고리의 다른 글
[55일차] yaml 명세를 이용해 로컬 배포 (0) 2023.02.14 [54일차] 쿠버네티스의 주요 컴포넌트 (0) 2023.02.13 [51일차] Terraform & Full Stack 애플리케이션 구성 (0) 2023.02.09 [50일차] Terraform (0) 2023.02.07 [49일차] Lambda 이미지 리사이징 (0) 2023.02.06