ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Terraform] aws_launch_configuration, aws_launch_template 차이점
    공부/Error 2025. 11. 19. 13:29

    어디보자.. 무슨오류지..

     

    실습 과제를 진행하는 과정에서 Auto scaling 부분에서 다음과 같은 에러가 발생했다.

    Error: Reference to undeclared resource
    
    on asg.tf line 2, in resource "aws_autoscaling_group" "example-asg":
    2: launch_configuration = aws_launch_configuration.example_launchconfig.name
    
    A managed resource "aws_launch_configuration" "example_launchconfig" has not
    been declared in the root module.

     

    내용은 관리되는 리소스 "aws_launch_configuration" "example_launchconfig"가 루트 모듈에 선언되지 않았습니다.

    인데, 내가 실습하는 계정은 최근에 생성된 계정으로, AWS 최신계정에 대한 Launch Configuration 을 공식적으로

    지원 종료해버렸으니..당연히 리소스 생성이 안되는거 였다..

     

    그래서 이 기회에 둘의 차이, 어떻게 코드를 작성해야할지 정리하고 넘어가야겠다 생각했다.

     

    일단 둘 다 그래서 어떤 기능인지 정의하면,

    Auto Scaling 그룹에서 EC2 Instance를 시작할 때 사용하는 인스턴스 설정 템플릿 이다.

    둘의 차이점을 비교하면 다음과 같다.

    항목 Launch Configuration Launch Template
    정의 Auto Scaling 그룹에서 EC2 인스턴스를 시작할 때 사용하는 인스턴스 설정 템플릿 Auto Scaling 그룹 및 단독 EC2 인스턴스 실행 시 사용하는 최신 인스턴스 설정 템플릿
    포함 정보 AMI ID, 인스턴스 유형, 키 페어, 보안 그룹, 블록 디바이스 매핑 등 기본 구성 동일 + 네트워크 인터페이스, IAM 역할, T2 무제한 CPU, 전용 호스트 등 고급 옵션 포함
    수정 가능 여부 생성 후 수정 불가, 변경하려면 새로 생성해야 함 여러 버전 관리 지원, 설정 업데이트 및 다양한 버전 운영 가능
    지원 인스턴스 온디맨드 인스턴스만 지원 온디맨드 + 스팟 인스턴스 모두 지원, 복수 인스턴스 유형 선택, CPU 아키텍처 혼합 가능
    활용 범위 Auto Scaling 그룹 내 인스턴스 생성에만 사용 Auto Scaling 그룹 + 단독 인스턴스 실행에도 사용 가능
    장점/제약 단순하고 표준화된 환경 제공, 하지만 유연성 부족 더 유연하고 최신 기능 지원, 관리와 자동화에 적합
    현재 상태 AWS에서 지원 종료(deprecated), 신규 계정/리전에서는 사용 불가 AWS에서 권장되는 최신 방식

    그래서 예를 들어 코드로 비교해보면 lauch configuration은 다음과 같다. 

    resource "aws_launch_configuration" "example_config" {
      name_prefix   = "example-config"
      image_id      = data.aws_ami.my_amazonlinux2.id
      instance_type = "t2.micro"
      security_groups = [aws_security_group.example_sg.id]
      key_name      = "my-key"
    }
    
    resource "aws_autoscaling_group" "example_asg" {
      launch_configuration = aws_launch_configuration.example_config.name
      vpc_zone_identifier  = [aws_subnet.example_subnet.id, aws_subnet.example_subnet2.id]
    
      min_size         = 1
      max_size         = 4
      desired_capacity = 2
    }

     

    launch template의 코드로 작성하게 되면 다음과 같다.

    resource "aws_launch_template" "example_template" {
      name_prefix = "example-template"
      image_id = data.aws_ami.my_amazonlinux2.id
      instance_type = "t2.micro"
    
      network_interfaces {
        associate_public_ip_address = true
        security_groups = [aws_security_group.example_sg.id]
      }
    
      tag_specifications {
        resource_type = "instance"
        tags = {
          Name = "example-instance"
        }
      }
    }
    
    resource "aws_autoscaling_group" "example_asg" {
      vpc_zone_identifier = [aws_subnet.example_subnet.id, aws_subnet.example_subnet2.id]
    
      min_size = 1
      max_size = 4
      desired_capacity = 2
    
      launch_template {
        id = aws_launch_template.example_template.id
        version = "$Latest"
      }
    
      tag {
        key = "Name"
        value = "terraform-asg"
        propagate_at_launch = true
      }
    }
Designed by Tistory.