Ssoon

[T101-4주차] 04 테라폼 모듈로 재사용 가능한 인프라 생성하기 - (4) 모듈 출력 본문

Terraform 101 Study

[T101-4주차] 04 테라폼 모듈로 재사용 가능한 인프라 생성하기 - (4) 모듈 출력

구구달스 2022. 11. 13. 12:11
CloudNet@ 팀의 가시다님이 진행하는 Terraform 101 Study 04주차 정리입니다.

 

 

GitHub - kschoi728/T101: Terraform 101 Study

Terraform 101 Study. Contribute to kschoi728/T101 development by creating an account on GitHub.

github.com

예제 테라폼 코드에 정의되어 있는 ASG는 실행 중인 서버의 수를 예약된 시간에 확장 및 축소를 지원합니다.

 webserver-cluster module 에 예약된 작업을 사용해 조건부로 리소스를 정의 할 수 있습니다.

🔑 책에는 prod 환경에만 적용하기 위해 prod/services/webserver-cluster/main.tf 에만 적용하였지만 여기서는 stage module 에 적용합니다.

"scale_out_during_business_hours"

recurrence : 0 9 * * * -> 매일 오전 9시에

desire_capacity : 4 -> 서버 수를 4개로

"scale_in_at_night"

recurrence : 0 17 * * * -> 매일 오후 5시에

desire_capacity : 2 -> 서버 수를 2개로

#! # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#! ASG Schedule 설정
#! # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 

resource "aws_autoscaling_schedule" "scale_out_during_business_hours" {
  scheduled_action_name = "scale-out-during-business-hours"
  min_size              = 2
  max_size              = 4
  desired_capacity      = 4
  recurrence            = "0 9 * * *"
}

resource "aws_autoscaling_schedule" "scale_in_at_night" {
  scheduled_action_name = "scale-in-at-night"
  min_size              = 2
  max_size              = 4
  desired_capacity      = 2
  recurrence            = "0 17 * * *"
}

❗ ASG 의 이름을 지정하는 필수 매개변수 (required parameter) 값인   "autoscaling_group_name" 이 누락되어 있습니다.

📌 module 에서도 출력변수 (output variables) 사용하여 값을 반환할 수 있습니다.

 modules/services/webserver-cluster/outputs.tf

   👉 출력변수를 추가합니다.

output "asg_name"

output "asg_name" {
    value = aws_autoscaling_group.ssoon_asg.name
    description = "the name of the auto scaling group"
}

✔   다음 구문을 사용하여 출력변수 (output variables) 에 액세스할 수 있습니다.

module.<MODULE_NAME>.<OUTPUT_NAME>

 stage/services/webserver-cluster/main.tf

   👉 출력변수 (output variables) 를 사용하여  "autoscaling_group_name" 을 정의합니다.

module "webserver_cluster"  {
  source = "../../../modules/services/webserver-cluster"

autoscaling_group_name = module.webserver_cluster.asg_name

resource "aws_autoscaling_schedule" "scale_out_during_business_hours" {
  scheduled_action_name = "scale-out-during-business-hours"
  min_size              = 2
  max_size              = 4
  desired_capacity      = 4
  recurrence            = "0 9 * * *"

  autoscaling_group_name = module.webserver_cluster.asg_name
}

resource "aws_autoscaling_schedule" "scale_in_at_night" {
  scheduled_action_name = "scale-in-at-night"
  min_size              = 2
  max_size              = 4
  desired_capacity      = 2
  recurrence            = "0 17 * * *"

  autoscaling_group_name = module.webserver_cluster.asg_name
}

 

 modules/services/webserver-cluster/outputs.tf

   👉 클러스터가 배포될 때 URL 을 알 수 있도록 출력변수 (output variables) 을 추가합니다.

output "alb_dns_name"

output "alb_dns_name" {
    value = aws_lb.ssoon_alb.alb_dns_name
    description = "the domain name of the load balancer"
}

 stage/services/webserver-cluster/outputs.tf

   👉 module 에서 설정한 출력변수 (output variables) 가  stage 에서 통과 (pass through) 할수 있도록 설정합니다.

module "webserver_cluster"  {
  source = "../../../modules/services/webserver-cluster"

module.webserver_cluster.alb_dns_name

output "alb_dns_name" {
    value = module.webserver_cluster.alb_dns_name
    description = "the domain name of the load balancer"
}

 

🚩 Console 확인

 

📢 CLI 확인

 
Comments