Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

KJH

Packer 본문

DevOps

Packer

모이스쳐라이징 2023. 10. 17. 00:47

Packer는 Hashicorp에서 제공하는 서버 이미지 생성 자동화 도구이고,
수작업으로 머신에 들어가서 작업하는 내용을 선언형 프로그래밍으로 자동화 합니다!

 

※ packer 빌드 파일은 hcl로 작성됨

예제는 azure를 기반으로 작성 되어 있습니다

packer {
  required_plugins {
    azure = {
      version = ">= 1.0.0"
      source  = "github.com/hashicorp/azure"
    }
  }
}

 

변수 선언 방법

variable "AZURE_CLIENT_ID" {
  type    = string
  default = ""
}

 

중복을 방지하기 위해 시간 단위로 변수 선언 방법

locals { timestamp = regex_replace(timestamp(), "[ - TZ:]", "")}

 

azure 이미지 갤러리에 있는 base이미지 버전으로 vm을 만들고 신규 버전으로 올리는 작업

source "azure-arm" "packer-windows" {
  async_resourcegroup_delete        = true
  client_id                         = "${var.AZURE_CLIENT_ID}"
  client_secret                     = "${var.AZURE_CLIENT_SECRET}"
  communicator                      = "winrm"
  location                          = "${var.region}"
  managed_image_name                = "Packer-${local.timestamp}"
  managed_image_resource_group_name = "${var.resource_group}"
  os_type                           = "Windows"
  subscription_id = "${var.AZURE_SUBSCRIPTION_ID}"
  tenant_id       = "${var.AZURE_TENANT_ID}"
  vm_size         = "Standard_F4s_v2"
  shared_image_gallery {
    subscription   = "${var.AZURE_SUBSCRIPTION_ID}"
    resource_group = "${var.resource_group}"
    gallery_name   = "${var.gallery_name}"
    image_name     = "${var.gallery_image_name}"
    image_version  = "${var.get_gallery_version}"
  }

  shared_image_gallery_destination {
    resource_group      = "${var.resource_group}"
    gallery_name        = "${var.gallery_name}"
    image_name          = "${var.gallery_image_name}"
    image_version       = "${var.post_gallery_version}"
    replication_regions = ["${var.region}"]
  }
  shared_image_gallery_timeout = "120m"
  winrm_insecure  = "true"
  winrm_timeout   = "3m"
  winrm_use_ssl   = "true"
  winrm_username  = "${var.VM_username}"
  winrm_password  = "${var.VM_password}"
}
build {
  sources = ["source.azure-arm.packer-windows"]

  provisioner "powershell" {
    environment_vars = ["AZURE_CLIENT_ID=${var.VM_CLIENT_ID}","AZURE_CLIENT_SECRET=${var.VM_CLIENT_SECRET}","AZURE_TENANT_ID=${var.AZURE_TENANT_ID}"]
    script           = "./${var.build_path}/init.ps1"
  }
}

 

 

윈도우 기반일 경우 작업이 끝난 후 머신을 일반화 해야 이미지로 생성 가능

& $Env:SystemRoot\System32\Sysprep\Sysprep.exe /oobe /generalize /shutdown

 

주로 사용하는 packer cli

packer init azure-update.pkr.hcl
packer build  \
   -var AZURE_CLIENT_ID=$(azureClientId) \
   -var AZURE_CLIENT_SECRET=$(azureClientSecret) \
   -var AZURE_TENANT_ID=$(azureTenantId) \
   -var VM_CLIENT_ID=$(vmCleintID) \
   -var VM_CLIENT_SECRET=$(vmClientSecret) \
   -var AZURE_SUBSCRIPTION_ID=$(azureSubscription) \
   -var VM_username=$(vmUserName) \
   -var VM_password=$(VMpassword) \
   -var gallery_image_name=$(galleryImageName) \
   -var get_gallery_version=$(getGalleryImageVersion) \
   -var post_gallery_version=$(postGalleryImageVersion) \
   -var build_path=$(buildPath) \
   ./azure-update.pkr.hcl

'DevOps' 카테고리의 다른 글

Prometheus (Windows exporter)  (0) 2023.10.20
azure keyvault secrets provider  (0) 2023.10.17
blackbox exporter 배포 및 alertmanager slack 설정  (0) 2022.11.06
Istio - 3(설치 및 예제)  (0) 2021.12.05
Istio - 2 (architecture)  (0) 2021.12.04