KJH
Packer 본문
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 |