IaC(Infrastructure as Code)

Packer Part. 4 (Data Source)

cwchoiit 2024. 3. 14. 16:51
728x90
반응형
SMALL
728x90
SMALL

 

Data Source

Terraform에서 알던 Data Source와 정확히 일치한다. 그래서 바로 예제 코드를 실행해보면서 어떻게 동작하는지 보자.

 

versions.pkr.hcl

packer {
    required_version = "~> 1.7"

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

 

sources.pkr.hcl

여기서 data 블록이 Data Source이다. Ubuntu AMI를 Data Source로 가져오는 방식을 취했다. 이 방법의 이점은 source가 많아지는데 같은 Ubuntu AMI를 사용할 때 중복 코드를 제거해줄 수 있겠다.

data "amazon-ami" "ubuntu" {
    filters = {
        virtualization-type = "hvm"
        name = "ubuntu/images/*ubuntu-focal-20.04-amd64-server-*"
        root-device-type = "ebs"
    }

    owners = ["099720109477"]
    most_recent = true
}

source "amazon-ebs" "ubuntu" {
    instance_type = "t2.micro"
    region = "ap-northeast-2"
    subnet_id = "subnet-0b23fd05b5919269e"
    associate_public_ip_address = true
    ssh_interface = "public_ip"
    source_ami = data.amazon-ami.ubuntu.id

    ssh_username = "ubuntu"
}

 

main.pkr.hcl

여기서도 Data Source 하나가 더 사용된다. amazon-secretsmanager 라는 Data Source이다. 

data "amazon-secretsmanager" "cwchoiit" {
    name = "cwchoiit"
    key = "test"
}

build {
    name = "cwchoiit-packer"

    source "amazon-ebs.ubuntu" {
        name = "nginx"
        ami_name = "cwchoiit-packer-nginx"
    }

    provisioner "shell" {
        inline = [
            "sudo apt-get update",
            "echo Secret is ${data.amazon-secretsmanager.cwchoiit.value}"
        ]
    }

    provisioner "file" {
        source = "${path.root}/files/index.html"
        destination = "/tmp/index.html"
    }

    provisioner "shell" {
        inline = [
            "echo ${source.name} and ${source.type}",
            "whoami",
            "sudo apt-get install -y nginx",
            "sudo cp /tmp/index.html /var/www/html/index.html"
        ]
    }
}

 

AWS에서 제공하는 Secrets Manager 서비스에 대한 Data Source이다. Sensitive한 데이터를 저장하고 보관할 때 이 서비스를 활용할 수 있겠다. name 속성은 Secret Manager의 Secret name을 나타낸다. key는 해당 데이터에 들어가 있는 Key/Value의 Key를 나타낸다.

저 값을 가져오는 Data Source라고 생각하면 된다. 그리고 그 아래는 전에 봤던 build 블록이다. 그리고 provisioner에서 보면 Secret의 value값을 찍는 명령어가 보인다. 한번 build 해보자.

packer build .

 

이런식으로 Terraform과 정확히 동일하게 같은 개념으로 Data Source를 이해할 수 있었다.

728x90
반응형
LIST

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

Ansible Part. 1 (Inventory)  (3) 2024.03.17
Packer Part. 5 (Post Processor)  (2) 2024.03.15
Packer Part. 3 (Provisioner)  (0) 2024.03.14
Packer Part. 2 (Builder)  (0) 2024.03.14
Packer Part. 1  (0) 2024.03.14