Packer: HCL ์‚ฌ์šฉ

์— ๋งŒ๋“  2014๋…„ 12์›” 16์ผ  ยท  48์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: hashicorp/packer

๋œ ์ž”์ธํ•˜๊ณ  ์ฃผ์„๋„ ํ—ˆ์šฉํ•˜๋Š” YAML(๋˜๋Š” HCL )์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (https://github.com/mitchellh/packer/issues/283 ์ฐธ์กฐ)

JSON์ด ๊ตฌ์„ฑ ํ˜•์‹์ด์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ฃผ์„๊ณผ ๊ฐ™์€ ํ‚ค/๊ฐ’์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(์ด๋ฆ„ ์•ž์— ์ฃผ์„๊ณผ ๊ฐ™์€ ๊ธ€๋ฆฌํ”„๊ฐ€ ๋ถ™๋Š” ๊ฒฝ์šฐ). ์˜ˆ๋ฅผ ๋“ค์–ด:

{
  "builders": [
...
  ],
  "provisioners": [
      {
      "#TODO": "turn this into a puppet manifest",
      "type": "shell",
      "script": "setup.sh"
    },
    {
      "type": "shell",
      "execute_command": "sudo -E /bin/bash '{{ .Path }}'",
      "#": "Run as sudo and remove all the things we don't need",
      "inline": ["DEBIAN_FRONTEND=noninteractive apt-get -y clean autoremove"]
    }
  ]
}
core enhancement post-1.0

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์—ฌ๋Ÿฌ๋ถ„, ์•ˆ๋…•ํ•˜์„ธ์š” ! ์ข‹์€ ์†Œ์‹์ด ์žˆ์–ด์š” ๐ŸŽ‰ ๐Ÿ˜ƒ

๋‚˜๋Š” ์ตœ๊ทผ์— HCL2๋ฅผ ์˜ฎ๊ธฐ๋Š” ๋ฐ ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๊ณ  ์—ฌ๊ธฐ์—์„œ ๊ตฌํ˜„ํ•˜๋Š” PR์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: #8423. ์ผ๋ถ€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์—ฌ๊ธฐ ์—์„œ ์ฐพ์„ ์ˆ˜
์šฐ๋ฆฌ๋Š” ๋ฒ„๊ทธ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์‚ฌ๋ก€๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋งŽ์€ ๋นŒ๋”/ํ”„๋กœ๋น„์ €๋„ˆ/ํ›„์ฒ˜๋ฆฌ์ž๊ฐ€ ์žˆ๊ณ  ์šฐ๋ฆฌ๋Š” ์†Œ๊ทœ๋ชจ ํŒ€์ด๋ฏ€๋กœ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์–ด๋–ค ๋„์›€๋„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ๋ฒ„๊ทธ๋ฅผ ์ฐพ์œผ๋ฉด; HCL ๋ฒ„๊ทธ์ž„์„ ์•Œ๋ฆฌ๋Š” ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค.

Packer๋ฅผ ์„ค์ •ํ•˜๋Š” ํ˜„์žฌ(์ด์ „) ๋ฐฉ๋ฒ•์€ ๊ณ„์† ์ž‘๋™ํ•  ๊ฒƒ์ด๋ฉฐ ํ˜„์žฌ ์ด์ „ ๋ฒ„์ „์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ •๋„๋กœ ํ™•์‹ ์ด ์ƒ๊ธธ ๋•Œ๊นŒ์ง€ ๋‹น๋ถ„๊ฐ„ ๋‘ ๋ฒ„์ „์„ ์™„์ „ํžˆ ์ง€์›ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

์˜ˆ์ œ hcl ํŒŒ์ผ

build {
    sources = [
        "source.amazon-ebs.first",
    ]

    provisioner "shell" {
        inline = [
            "sleep 5"
        ]
    }

    post-processor "shell-local" {
        inline = [
            "sleep 5"
        ]
    }
}

source "amazon-ebs" "first" {
    // access_key = "{{user `aws_access_key`}}"
    // secret_key = "{{user `aws_secret_key`}}"

    ami_name = "hcl2-test"
    region = "us-east-1"
    instance_type = "t2.micro"

    kms_key_id = "c729958f-c6ba-44cd-ab39-35ab68ce0a6c"
    encrypt_boot = true
    source_ami_filter {
        filters {
          virtualization-type = "hvm"
          name =  "amzn-ami-hvm-????.??.?.????????-x86_64-gp2"
          root-device-type = "ebs"
        }
        most_recent = true
        owners = ["amazon"]
    }
    launch_block_device_mappings {
        device_name = "/dev/xvda"
        volume_size = 20
        volume_type = "gp2"
        delete_on_termination = "true"
    }
    launch_block_device_mappings {
        device_name = "/dev/xvdf"
        volume_size = 500
        volume_type = "gp2"
        delete_on_termination = true
        encrypted = true
    }

    ami_regions = ["eu-central-1"]
    run_tags {
        Name = "packer-solr-something"
        stack-name = "DevOps Tools"
    }

    communicator = "ssh"
    ssh_pty = true
    ssh_username = "ec2-user"
    associate_public_ip_address = true
}

์ถ”์‹ : ๋ฌธ์„œ ๋ฐ ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค!

๋ชจ๋“  48 ๋Œ“๊ธ€

cc @pandacalculus

HCL์ด ๊ณง ์ถœ์‹œ๋ฉ๋‹ˆ๋‹ค :์Šค๋งˆ์ผ:

@delitescere ์ด ๋ฌธ์ œ๋Š” #283์˜ ์ค‘๋ณต์ด ์•„๋‹™๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋‹น์‹ ์ด ์ดˆ๊ธฐ ๊ฒŒ์‹œ๋ฌผ์—์„œ ๊ทธ๊ฒƒ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์ง€ ๋งŒ ๋‘ ๋ฌธ์ œ์˜ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์•Œ ์ˆ˜ ์—†๋Š” ํ‚ค๋Š” ํ˜„์žฌ์™€ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฌด์‹œ๋˜๋Š” "์ฃผ์„๊ณผ ๊ฐ™์€" ํ‚ค๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์„ ์ƒํƒœ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๋ ค์ง„ ์ž์ฒด ๋‹ซ๊ธฐ ์ฃผ์„ ์ ‘๋‘์‚ฌ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(์ฆ‰: # , // , ; ).

๋น„ํ‘œ์ค€ JSON, JSON5, YAML ๋˜๋Š” HCL์—์„œ ์ฃผ์„์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋” ํฐ ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋Œ€์ฒด ์ œ์•ˆ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

HCL ์ง€์›์œผ๋กœ์˜ ์ด๋™์— ๋Œ€ํ•œ @sethvargo ์˜ ์˜๊ฒฌ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

@sethvargo

HCL์ด ๊ณง ์ถœ์‹œ๋ฉ๋‹ˆ๋‹ค :์Šค๋งˆ์ผ:

๋ฒˆ๊ฑฐ๋กญ๊ฒŒ ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„์ง ์˜ค๊ณ  ์žˆ์–ด์š” :์Šค๋งˆ์ผ:

์•„์ง HCL ์ž‘์„ฑ์ž๊ฐ€ ์—†๊ณ  ๋‹ค์Œ ๋ช‡ ๊ฐ€์ง€ ๋ฒ„์ „์— ๋Œ€ํ•œ ์˜ต์…˜์œผ๋กœ packer fix ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ž‘์—…์„ ์กฐ๊ธˆ ์—ฐ๊ธฐํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” HCL ์ฟจ์—์ด๋“œ๋ฅผ ๋งˆ์…จ๋‹ค. :+1:

์ด์ œ https://github.com/hashicorp/hcl์ด ์กด์žฌํ•˜๋ฏ€๋กœ json์— ๋Œ€ํ•œ ๋Œ€์•ˆ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? :)

@jevoneearth ๊ฝค ์Šค๋งˆ์ผ:. HCL์€ ์•„์ง ์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

์•„์ง ์ถœ์‹œ ์ค‘์ด๋ฏ€๋กœ ์š”์ฒญ ํฌํ•จ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๊ธฐ์— ์ข‹์€ ์‹œ๊ธฐ์ž…๋‹ˆ๊นŒ? https://github.com/mkheironimus/packergen ์ฐธ์กฐ

@jevoneearth๋Š” hcl์„ ์ถ”๊ฐ€ํ•  ๋•Œ๊นŒ์ง€ ๋Œ€์•ˆ์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ๊ณง ์˜จ๋‹ค?

@mitchellh @sethvargo ๋Š” ๊ท€ํ•˜๊ฐ€ ์–ธ๊ธ‰ํ•œ HCL ์ž‘์„ฑ์ž์ž…๋‹ˆ๋‹ค. https://github.com/hashicorp/hcl/tree/master/hcl/printer

YAML์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ HCL์— ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค.

ํŒจ์ปค๋ฅผ bash ํ•จ์ˆ˜๋กœ ๋ž˜ํ•‘ํ•˜๊ณ  yaml ๋ฅผ json ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋ ค๋ฉด:

ruby -r json -r yaml -e "yaml = YAML.load(File.read(\"$1\")); print yaml.to_json"

(๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฐ˜๋Œ€)

ruby -r json -r yaml -e "json = JSON.parse(File.read(\"$1\")); print YAML::dump(json)"

๋‚˜๋Š” ์ด๋ฏธ ๊ทธ๊ฒƒ์„ ๋งŒ๋“ค์—ˆ๋‹ค. ํ•˜์ง€ ์•Š์•„๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด HCL์„ ์œ„ํ•ด ์ด ํ‹ฐ์ผ“์ด ์กด์žฌํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

2017๋…„ 1์›” 16์ผ ์˜คํ›„ 12์‹œ 31๋ถ„์— Rickard von Essen [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

ํŒจ์ปค๋ฅผ bash ํ•จ์ˆ˜๋กœ ๋ž˜ํ•‘ํ•˜๊ณ  yaml์„ json์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์ผ์ข…์˜ ์‚ฌ์†Œํ•œ ์ผ์ž…๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋ ค๋ฉด:

ruby -r json -r yaml -e "yaml = YAML.load(File.read(\"$1\")); ์ธ์‡„ yaml.to_json"
(๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฐ˜๋Œ€)

ruby -r json -r yaml -e "json = JSON.parse(File.read(\"$1\")); ์ธ์‡„ YAML::dump(json)"
โ€•
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ๋ณด๊ฑฐ๋‚˜ ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐํ•˜์„ธ์š”.

HCL

HashiCorp๋Š” ์Šค์Šค๋กœ์— ๋Œ€ํ•œ ์•ฝ๊ฐ„์˜ ๋ฏฟ์Œ์„ ๋ณด์—ฌ์ฃผ๊ณ  ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ณณ์—์„œ HCL์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. HCL์ด ์ข‹์€ ์•„์ด๋””์–ด์ด๊ณ  ํ•จ๊ป˜ ์‹คํ–‰ํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ HCL์ด ์‹ค์ˆ˜์ด๊ณ  Terraform์ด ์žฌ์•™์ž…๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ํ›„์ž๋Š” ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด ํ‰๊ฐ€์ž/์ฑ„ํƒ์ž๋กœ์„œ ์ด ๋‘ ์ œํ’ˆ์ด "์„œ๋กœ ๋Œ€ํ™”ํ•˜์ง€ ์•Š๋Š” ๋‘ ์ •๋ณด ๊ธฐ๊ด€"์ฒ˜๋Ÿผ ๋Š๊ปด์ง€๋Š” ๊ฒƒ์ด ์šฐ๋ ค์˜ ์›์ธ์ด๋ผ๊ณ  ๋ง์”€๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@sethvargo์™€ ํ•จ๊ป˜ ํ•ด์š”. ๋‹ค์ด์–ด์šธํ”„ ์ธ์žฅ์„ ์“ฐ๊ณ  "HCL์ด ์˜จ๋‹ค"๋ผ๊ณ  ์„ ์–ธํ•ฉ์‹œ๋‹ค. (๊ทธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ทธ๊ฒƒ์„ ์‹คํ˜„ํ•˜์‹ญ์‹œ์˜ค.)

JSON

๊ตฌ๋‘ฃ์ฃผ๊ฑฑ ์ฃผ์„์„ JSON์œผ๋กœ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ Douglas Crockford๊ฐ€ ์ œ๊ณตํ–ˆ์œผ๋ฉฐ Nicholas Chammas๊ฐ€ The Notorious Two Eight Three https://github.com/mitchellh/packer/issues/283#issuecomment -60039068์—์„œ ์˜ˆ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

YAML

Ruby ๊ด‘๋ถ€๋Š” YAML์„ ์ข‹์•„ํ•˜๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ YAML ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฉ‹์ง€๊ณ  2 ๊ฐœ์˜ ๋Œ“๊ธ€ ์ผ ์ „ ๋ฆฌ ์นด๋“œ ํฐ ์—์„ผ์— ์˜ํ•ด ์˜ˆ์‹œ ๋œ https://github.com/mitchellh/packer/issues/1768#issuecomment -272921740 (๋‚ด๊ฐ€ ์‚ฌ์šฉ ์„ ํ˜ธํ•˜๋Š” ๊ฑฐ๋ผ๊ณ ํ•˜์ง€๋งŒ ARGF.read ๋‚˜๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ)

๋“ฑ๋“ฑ

HashiCorp๊ฐ€ ํ•„์š”ํ•œ ๋งŒํผ์˜ ์ œํ’ˆ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์œ ๋‹‰์Šค ์ฒ ํ•™๊ณผ ์ž˜ ๋งž์Šต๋‹ˆ๋‹ค(Peter H. Salus๊ฐ€ A Quarter-Century of Unix(1994)์—์„œ ์š”์•ฝ):

  • ํ•œ ๊ฐ€์ง€ ์ผ์„ ์ž˜ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.
  • ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.
  • ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ํ…์ŠคํŠธ ์ŠคํŠธ๋ฆผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ์ž˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

JSON

$ cat > example.json <<'EOF'
// from: https://www.packer.io/intro/getting-started/vagrant.html
{
    // can't we take this out?
    "variables": {
        "aws_access_key": "", // why is this blank?
        "aws_secret_key": ""  // ditto
    },
    "builders": [{
        "type": "amazon-ebs",
        "access_key": "{{user `aws_access_key`}}",
        "secret_key": "{{user `aws_secret_key`}}",
        "region": "us-west-2",
        "source_ami": "ami-b7a114d7",
        "instance_type": "t2.micro",
        "ssh_username": "ubuntu",
        "ami_name": "packer-example {{timestamp}}",
        "tags": {
            "created_by": "Packer.io/example"
        }
    }],
    "provisioners": [{
        "type": "shell",
        "inline": [
            "sleep 30",
            "sudo apt-get update",
            "sudo apt-get install -y redis-server"
        ]
    }],
    "post-processors": ["vagrant"]
}
EOF

$ packer validate <(jsmin < example.json)
Template validated successfully.

YAML

$ cat > example.yaml <<'EOF'
---
# from: https://www.packer.io/intro/getting-started/vagrant.html

# can't we take this out?
variables:
  aws_access_key: '' # why is this blank?
  aws_secret_key: '' # ditto

builders:
- type: amazon-ebs
  access_key: '{{user `aws_access_key`}}'
  secret_key: '{{user `aws_secret_key`}}'
  region: us-west-2
  source_ami: ami-b7a114d7
  instance_type: t2.micro
  ssh_username: ubuntu
  ami_name: packer-example {{timestamp}}
  tags:
    created_by: Packer.io/example

provisioners:
- type: shell
  inline:
  - sleep 30
  - sudo apt-get update
  - sudo apt-get install -y redis-server

post-processors:
- vagrant
EOF

$ packer validate <(ruby -r json -r yaml -e "print YAML.load(ARGF.read).to_json" < example.yaml)
Template validated successfully.

bitmoji

์ œํ•œ๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด yaml ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ์ž‘์€ ํ™๋ณด๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ์šฐ๋ฆฌ๊ฐ€ ์กฐ์‚ฌํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ์€ ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ 1.0์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋‹ซ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 1.0์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ํ™•์‹คํžˆ HCL์€ Packer์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์–ธ์–ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถ”์‹ : ์—ฌ์ „ํžˆ ๊ฑฐ์˜ ๋ชจ๋“  ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋œ ์ด์œ ๋ฅผ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ, ์ด์ •ํ‘œ ๋ฐ ํƒœ๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๋Œ€๋Œ€์ ์ธ ์ ๊ฒ€์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋ณ„๋„์˜ ๋ฌธ์ œ๊ฐ€ ๋  RFC ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

JSON5, YAML ๋ฐ HCL์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ํ•œ JSON์€ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

@darkn3rd ์šฐ๋ฆฌ Joyent๊ฐ€ master ๋ฅผ ์ถ”์ ํ•˜๋Š” JSON5 ๋ถ„๊ธฐ ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋‹น์‹ ์˜ ๊ณ ํ†ต์„ ๋Š๋ผ๋ฉฐ ์ถฉ๋ถ„ํžˆ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ˜„์žฌ ์ƒํ™ฉ์€ ์‹ค์ œ๋กœ ์‹ค์ œ ์ˆ˜๋Ÿ‰์˜ ํŒจ์ปค ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ์‚ฌ๋žŒ์ด https: //github.com/joyent/packer/tree/f-json5

/me๋Š” ์ด๋ฒˆ ์ฃผ์— ๋ถ„๊ธฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” "๊ณง ์ถœ์‹œ๋ " 3๋…„์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค... ์ €๋Š” ํŒจ์ปค ์ดˆ๋ณด์ž์ด๊ณ  HCL์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฐฉ๊ธˆ ๋‚ด ์นœ๊ตฌ์—๊ฒŒ "ํ—ค์ด lat's ๊ทธ ๋”์ฐํ•œ json์„ HCL๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ hashcorp ๋„๊ตฌ์ž…๋‹ˆ๋‹ค, ๋งž์ฃ ?"๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž˜๋ชปํ–ˆ๋Š”์ง€...

๊ด€์‹ฌ ์žˆ๋Š” ๊ฒฝ์šฐ yacker (Python ์œ ํ‹ธ๋ฆฌํ‹ฐ)๋Š” Packer๋ฅผ YAML-to-JSON ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋กœ ๋ž˜ํ•‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์˜ ์•„๋ฌด๊ฒƒ๋„ ์ง€๊ตฌ ์‚ฐ์‚ฐ์กฐ๊ฐ์ด - ๊ทธ๋ƒฅ ํŒจ์ปค๋กœ ์ œ์–ด๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ์ผ์‹œ์ ์œผ๋กœ JSON์œผ๋กœ ๋ณ€ํ™˜ ํ…œํ”Œ๋ฆฟ ๊ฒƒ์„ YAML - ๋ž˜ํผ ๋ณ€์ˆ˜ ํŒŒ์ผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

https://yacker.readthedocs.io/en/latest/

ํŒจ์ปคํŒ€? ์™œ ์•„์ง๋„ HCL์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์ €๋Š” ๊ฑฐ์˜ 1๋…„ ์ „์— YAML ์ง€์›์„ ์œ„ํ•œ ์ž‘์€ ํŒจ์น˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ž˜ ์ž‘๋™ํ•˜๊ณ  HCL์ด ์˜จ๋‹ค๋Š” ์ด์œ ๋กœ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ 1๋…„์ด ์ง€๋‚˜๋„ ๋ณ€ํ•œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค!
๋ญ๋ผ๊ณ ์š”?

์•„์ง ์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :์œ™ํฌ:

@vtolstov #7023 ์ฐธ์กฐ

HashiCorp์˜ ๋‚ด๋ถ€ ์ œํ’ˆ ๋‹ด๋‹น์ž๋Š” HCL1์„ ๋ฐ”๋กœ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋Œ€์‹  HCL2๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์ง€๋งŒ ์ง€๊ธˆ HCL2 ์ง€์›์„ ์œ„ํ•ด ์ ๊ทน์ ์œผ๋กœ ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ํฌ๊ธฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@SwampDragons ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ ๊ทน์ ์œผ๋กœ ์ž‘์—… ์ค‘์ด๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ข‹์€ ์ง€์ ; ๋ณ‘ํ•ฉํ•˜์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ๋œ PR์„ ๋‹ซ์•˜์„ ๋•Œ ์‹ค์ˆ˜๋กœ ๋‹ซํ˜”์Šต๋‹ˆ๋‹ค.

ํŒจ์ปค๋ฅผ ํ†ตํ•œ HCL2 ์ง€์›์— ์ •๋ง ๊ธฐ์ฉ๋‹ˆ๋‹ค!

@SwampDragons HCL์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” 1.5.0 ๋ฆด๋ฆฌ์Šค์—์„œ ๊ทธ๊ฒƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ์•ฝ์†ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค). ํŒ€์€ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘๋™ํ•˜๋Š” ํ”„๋กœํ† ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์•„์ง ๋‹ค๋“ฌ ๊ฑฐ๋‚˜ ๊ฐ•ํ™”๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์•ž๋‘๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

๋‚˜๋Š” ๋ช‡ ๋…„ ํ›„์— ๋Œ์•„์™”๊ณ  ์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ์—ด๋ ค ์žˆ๋‹ค๋Š” ๊ฒƒ์— ๋†€๋ž์Šต๋‹ˆ๋‹ค.
1.5๋กœ ๋‚˜์˜ค๋‹ˆ ๋‹คํ–‰์ž…๋‹ˆ๋‹ค.

@SwampDragons 1.5.0(๋ฒ ํƒ€ ๋ฒ„์ „ ํฌํ•จ)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋žต์ ์ธ ์ผ์ •์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ณ€๊ฒฝ์ด ๋ณต์žกํ•œ ๊ฒฝ์šฐ(๊ทธ๋ฆฌ๊ณ  ๊ทธ์— ๋Œ€ํ•œ ๋งค์šฐ ์ข‹์€ ์ด์œ ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ) ์™„๋ฒฝํ•˜๊ฒŒ ์ข‹์€ ๋„๊ตฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ํ•ต์‹ฌ ์ •์˜ ํ˜•์‹์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋Œ€์‹  ๋ณ€ํ™˜ํ•˜๋Š” _adapters_๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๊ฐœ๋ฐœ ์œ„ํ—˜๊ณผ ๋น„์šฉ์ด ํ›จ์”ฌ ๋‚ฎ์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ํ˜•์‹ X๋ฅผ JSON์œผ๋กœ?

๊ทธ๋ƒฅ ์ƒ๊ฐ.

๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•˜์ฐฎ๊ฒŒ ์—ฌ๊ธฐ๊ณ  ์‹ถ์ง€ ์•Š์œผ๋ฉฐ ํ•ต์‹ฌ ํ˜•์‹์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์ •๋ง ์ค‘์š”ํ•œ ์ด์œ ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ๊ณ ๋ คํ•  ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ๋กœ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ๊ฒƒ์ด๋ผ๋ฉด yacker์™€ ๊ฐ™์€ _ ์–ธ์–ด ์–ด๋Œ‘ํ„ฐ_๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

@alanbchristie ๊ณต์ •ํ•˜๊ฒŒ @azr ์ด ์ž‘์—… ์žˆ์ง€ ์•Š๋‹ค๊ณ  ๋งํ–ˆ๋“ฏ ์ด ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ๋Š” ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ;) ๊ทธ๊ฐ€ ๋Œ์•„์˜ค๋ฉด ๋‚˜๋Š” ๊ทธ๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์„ ์œ„ํ•ด ์•ฝ๊ฐ„์˜ ์ง„ํ–‰ ์ƒํ™ฉ ์—…๋ฐ์ดํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@NickLarsenNZ ๋‚ด๊ฐ€ ์ƒ์‚ฌ์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ๋กœ๋“œ๋งต์— ๋”ฐ๋ฅด๋ฉด 10์›”์ด๋‚˜ 11

์ €๋Š” ํŒจ์ปค๋ฅผ ์ฒ˜์Œ ์ ‘ํ•ฉ๋‹ˆ๋‹ค... ํ•˜์ง€๋งŒ ์†”์งํžˆ ๋งํ•ด์„œ, ์ด๊ฒƒ์ด 5-6๋…„ ๋™์•ˆ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๋ฌธ์ œ์˜€๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ƒ๋‹นํžˆ ๋‚™๋‹ดํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋งค์šฐ ์‹ค๋ง์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ค‘์— jq ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์„์„ ์ œ๊ฑฐํ•˜๋ฉด ์ œ๊ฑฐํ•  jq๋กœ ์ž‘์„ฑ๋œ ์ฃผ์„ 1๊ฐœ๋งˆ๋‹ค 99๊ฐœ์˜ ์ฃผ์„์ด ์ž‘์„ฑ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํŒจ์ปค์— ์˜ํ•ด ๊ตฌํ˜„๋œ json์ด ์ด ์ž‘์—…์— ์ ํ•ฉํ•˜์ง€ ์•Š์€ ๋ฐฉ๋ฒ•์„ ๋ฉฐ์น  ๋™์•ˆ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฃผ์„์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ/๊ตฌ์„ฑ ๋ณต์ œ๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค๋Š” ์‚ฌ์‹ค(์™œ ํŒจ์ปค json์„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ? ๊ตฌ์„ฑ ์žฌ์‚ฌ์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์˜์‚ฌ ์ปดํŒŒ์ผ๋Ÿฌ).

์†Œ์Œ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ž ๊น€; @azr ์ด ๋Œ์•„์™”๊ณ  ๊ธฐํšŒ๊ฐ€ ์žˆ์„ ๋•Œ ๋ฒ ํƒ€ ๋นŒ๋“œ ์ œ๊ณต์„ ํฌํ•จํ•˜์—ฌ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„, ์•ˆ๋…•ํ•˜์„ธ์š” ! ์ข‹์€ ์†Œ์‹์ด ์žˆ์–ด์š” ๐ŸŽ‰ ๐Ÿ˜ƒ

๋‚˜๋Š” ์ตœ๊ทผ์— HCL2๋ฅผ ์˜ฎ๊ธฐ๋Š” ๋ฐ ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๊ณ  ์—ฌ๊ธฐ์—์„œ ๊ตฌํ˜„ํ•˜๋Š” PR์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: #8423. ์ผ๋ถ€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์—ฌ๊ธฐ ์—์„œ ์ฐพ์„ ์ˆ˜
์šฐ๋ฆฌ๋Š” ๋ฒ„๊ทธ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์‚ฌ๋ก€๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋งŽ์€ ๋นŒ๋”/ํ”„๋กœ๋น„์ €๋„ˆ/ํ›„์ฒ˜๋ฆฌ์ž๊ฐ€ ์žˆ๊ณ  ์šฐ๋ฆฌ๋Š” ์†Œ๊ทœ๋ชจ ํŒ€์ด๋ฏ€๋กœ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์–ด๋–ค ๋„์›€๋„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ๋ฒ„๊ทธ๋ฅผ ์ฐพ์œผ๋ฉด; HCL ๋ฒ„๊ทธ์ž„์„ ์•Œ๋ฆฌ๋Š” ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค.

Packer๋ฅผ ์„ค์ •ํ•˜๋Š” ํ˜„์žฌ(์ด์ „) ๋ฐฉ๋ฒ•์€ ๊ณ„์† ์ž‘๋™ํ•  ๊ฒƒ์ด๋ฉฐ ํ˜„์žฌ ์ด์ „ ๋ฒ„์ „์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ •๋„๋กœ ํ™•์‹ ์ด ์ƒ๊ธธ ๋•Œ๊นŒ์ง€ ๋‹น๋ถ„๊ฐ„ ๋‘ ๋ฒ„์ „์„ ์™„์ „ํžˆ ์ง€์›ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

์˜ˆ์ œ hcl ํŒŒ์ผ

build {
    sources = [
        "source.amazon-ebs.first",
    ]

    provisioner "shell" {
        inline = [
            "sleep 5"
        ]
    }

    post-processor "shell-local" {
        inline = [
            "sleep 5"
        ]
    }
}

source "amazon-ebs" "first" {
    // access_key = "{{user `aws_access_key`}}"
    // secret_key = "{{user `aws_secret_key`}}"

    ami_name = "hcl2-test"
    region = "us-east-1"
    instance_type = "t2.micro"

    kms_key_id = "c729958f-c6ba-44cd-ab39-35ab68ce0a6c"
    encrypt_boot = true
    source_ami_filter {
        filters {
          virtualization-type = "hvm"
          name =  "amzn-ami-hvm-????.??.?.????????-x86_64-gp2"
          root-device-type = "ebs"
        }
        most_recent = true
        owners = ["amazon"]
    }
    launch_block_device_mappings {
        device_name = "/dev/xvda"
        volume_size = 20
        volume_type = "gp2"
        delete_on_termination = "true"
    }
    launch_block_device_mappings {
        device_name = "/dev/xvdf"
        volume_size = 500
        volume_type = "gp2"
        delete_on_termination = true
        encrypted = true
    }

    ami_regions = ["eu-central-1"]
    run_tags {
        Name = "packer-solr-something"
        stack-name = "DevOps Tools"
    }

    communicator = "ssh"
    ssh_pty = true
    ssh_username = "ec2-user"
    associate_public_ip_address = true
}

์ถ”์‹ : ๋ฌธ์„œ ๋ฐ ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค!

์ด๊ฒƒ์€ ์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค @azr , ๋‹น์‹ ๊ณผ ํŒ€ ๋•๋ถ„์ž…๋‹ˆ๋‹ค.

WRT: JSON ์ง€์› ์ค‘๋‹จ.
HCL/HCL2์˜ ๋‚ด์žฅ JSON ์ง€์›์„ ํ™œ์šฉํ•˜๋ ค๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๊นŒ?

json2hcl ๋ณ€ํ™˜๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? HCL๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹ถ์€ Netflix OSS์—์„œ ํŒจ์ปค ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž˜ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์ €๋Š” ์ด ๋ณ€ํ™”์— ํฅ๋ถ„ํ•ฉ๋‹ˆ๋‹ค!

@darkn3rd ์‚ฌ์šฉ์ž๊ฐ€ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ๋ฐ ํŽธ์ง‘ ์ž‘์—…์„ ๋„ˆ๋ฌด ๋งŽ์ด ํ•˜์ง€ ์•Š๊ณ ๋„ ๋น ๋ฅด๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒจ์ปค๋ณ„ ๋ณ€ํ™˜๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

@mexisme HCL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” JSON์„ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€๋งŒ ํ˜•์‹์ด ์•ฝ๊ฐ„ ๋ณ€๊ฒฝ๋˜์–ด ์ผ๋ถ€ ํŽธ์ง‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™˜๊ธฐ๊ฐ€ ํŒŒ์ผ์„ JSON(๋˜๋Š” ๋ฌด์–ธ๊ฐ€)์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋„๋ก ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


โš ๏ธ ์ฒซ ๋ฒˆ์งธ ์˜ˆ์ œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ์ข€ ๋” ํ…Œ๋ผํฌ๋ฐ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์˜ˆ์ œ hcl ํŒŒ์ผ

build {
    sources = [
        "source.amazon-ebs.first",
    ]

    provisioner "shell" {
        inline = [
            "sleep 5"
        ]
    }

    post-processor "shell-local" {
        inline = [
            "sleep 5"
        ]
    }
}

source "amazon-ebs" "first" {
    // access_key = "{{user `aws_access_key`}}"
    // secret_key = "{{user `aws_secret_key`}}"

    ami_name = "hcl2-test"
    region = "us-east-1"
    instance_type = "t2.micro"

    kms_key_id = "c729958f-c6ba-44cd-ab39-35ab68ce0a6c"
    encrypt_boot = true
    source_ami_filter {
        filters {
          virtualization-type = "hvm"
          name =  "amzn-ami-hvm-????.??.?.????????-x86_64-gp2"
          root-device-type = "ebs"
        }
        most_recent = true
        owners = ["amazon"]
    }
    launch_block_device_mappings {
        device_name = "/dev/xvda"
        volume_size = 20
        volume_type = "gp2"
        delete_on_termination = "true"
    }
    launch_block_device_mappings {
        device_name = "/dev/xvdf"
        volume_size = 500
        volume_type = "gp2"
        delete_on_termination = true
        encrypted = true
    }

    ami_regions = ["eu-central-1"]
    run_tags {
        Name = "packer-solr-something"
        stack-name = "DevOps Tools"
    }

    communicator = "ssh"
    ssh_pty = true
    ssh_username = "ec2-user"
    associate_public_ip_address = true
}

์ƒˆ๋กœ์šด ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์—ฌ๊ธฐ ์—์„œ ์ฐพ์„ ์ˆ˜

์ด ๋ฌธ์ œ๋Š” _30์ผ_ โณ ๋™์•ˆ ํ์‡„๋˜์—ˆ์œผ๋ฏ€๋กœ ์ž ๊ทธ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ํ™œ์„ฑ ๋ฌธ์ œ๋ฅผ ์ฐพ๊ณ  ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์™€ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์กฐ์‚ฌ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์บก์ฒ˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด๊ณ  ๋ฌธ์ œ ํ…œํ”Œ๋ฆฟ์„ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰