IaC(Infrastructure as Code)

Packer Part. 2 (Builder)

cwchoiit 2024. 3. 14. 11:20
728x90
반응형
SMALL
728x90
SMALL

 

Builder

Packer에서 Builder는 어떤 이미지를 만들것이냐?에 대한 물음이다. 예를 들어 Amazon EBS에 대한 이미지를 만들고 싶다면 Builder는 Amazon EBS가 된다. 그래서 Builder에 대해 간략하게 알아보자.

 

Null Builder

null 빌더는 말 그대로 아무것도 만들어내지 않겠다는 의미이다. 이걸 그럼 왜쓰냐? 일반적으로 디버깅이 필요할 때 사용한다고 한다. (공식문서 참조) 우리도 이 Null builder로 각종 테스트를 해보자.

 

 

versions.pkr.hcl

packer {
    required_version = "~> 1.7"

    required_plugins {
        amazon = {
            version = "~> 1.0"
            source = "github.com/hashicorp/amazon"
        }
    }
}

 

sources.pkr.hcl

source "null" "one" {
    communicator = "none"
}

source "null" "two" {
    communicator = "none"
}

저번 시간에도 source가 바로 어떻게 빌드할 것인지에 대한 내용이라고 했는데, 이처럼 null은 뭐가 거의 없다. communicator = "none"이 의미하는 건 이 빌더랑 Packer가 통신하는 방법(SSH, WinRM)은 필요 없다는 의미이다.

 

main.pkr.hcl

# Without name
build {
    sources = [
        "source.null.one",
        "source.null.two",
    ]
}

# With name
build {
    name = "cwchoiit-packer"

    sources = [
        "source.null.one",
        "source.null.two",
    ]
}

# Fill-in (기존 source를 확장하는 기능, 근데 원래 있던 것을 변경하는 것은 불가능하다. 예를 들어, 기존에 null.one이 가지고 있던 communicator를 여기서 변경하는 행위)
build {
    name = "cwchoiit-packer-fill-in"
    
    source "null.one" {
        name = "terraform"
    }

    source "null.two" {
        name = "vault"
    }
}

이 부분을 보면 세 개의 build 블록으로 나뉘어져 있다. 빌드의 이름이 없는 경우, 빌드의 이름이 있는 경우, 빌드의 이름이 있고 source를 expand하는 경우 총 세가지다. 이런 각각의 방법으로 build를 할 수가 있다는 것을 보여준다.

 

빌드를 해보자.

packer build .

 

이렇게 각 빌드별로 달라지는 Outputs을 볼 수 있다. 

 

Build only/except

원하는 것만 빌드하고 싶을 때 사용하는 옵션을 알아보자.

packer build -only=null.one .

이처럼 원하는 소스만 빌드할 수 있다.

 

특정 소스만 제외하고 빌드를 하고 싶다면 except 옵션을 사용하면 된다.

packer build -except=null.one .

제외 시킨 것 말고 다 빌드가 되는 모습이다.

 

728x90
반응형
LIST

'IaC(Infrastructure as Code)' 카테고리의 다른 글

Packer Part. 4 (Data Source)  (0) 2024.03.14
Packer Part. 3 (Provisioner)  (0) 2024.03.14
Packer Part. 1  (0) 2024.03.14
Terraform Provisioner/EC2 Userdata  (2) 2024.03.11
terraform_remote_state  (0) 2024.03.10