55/120

김건호·2022년 4월 28일
0
post-custom-banner

Packer

자동화된 이미지 빌더(클라우드 이미지 및 컨테이너 이미지 빌더)

https://www.packer.io/

Packer 설치

https://learn.hashicorp.com/tutorials/packer/get-started-install-cli?in=packer/aws-get-started

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install packer

Packer Template

이미지를 빌드하기 위한 선언과 명령으로 구성된 파일

  • HCL2
    - Packer 1.5.0 부터 사용
    - Packer 1.7.0 부터 공식/기본 방법
    - 현재 버전 1.8.X(2022-04-27 기준)
    - .pkr.hcl
  • JSON
    - .pkr.json

Block

  • packer: Packer 버전 및 플러그인 버전 정의
  • source: 빌드할 이미지의 소스 정의
  • build: 이미지 빌드(source, provisioner, post-processor 구성)
  • provisioner: 프로비저닝 플러그인
  • post-processor: 프로비저닝 후 실행할 작업 정의
  • variable: 변수
  • locals: 로컬 값

AWS 이미지 빌드 예제

mkdir -p packer/aws-ubuntu
cd packer/aws-ubuntu

aws-ubuntu.pkr.hcl

packer {
  required_plugins {
    amazon = {
      version = ">= 0.0.1"
      source  = "github.com/hashicorp/amazon"
    }
  }
}

source "amazon-ebs" "ubuntu" {
  ami_name      = "learn-packer-linux-aws"
  instance_type = "t2.micro"
  region        = "us-west-2"
  source_ami_filter {
    filters = {
      name                = "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*"
      root-device-type    = "ebs"
      virtualization-type = "hvm"
    }
    most_recent = true
    owners      = ["099720109477"]
  }
  ssh_username = "ubuntu"
}

build {
  name    = "learn-packer"
  sources = [
    "source.amazon-ebs.ubuntu"
  ]
  
  provisioner "shell" {
    environment_vars = [
      "FOO=hello world",
    ]
    inline = [
      "echo Installing Redis",
      "sleep 30",
      "sudo apt-get update",
      "sudo apt-get install -y redis-server",
      "echo \"FOO is $FOO\" > example.txt",
    ]
  }
}
packer init .
packer fmt .
packer validate .
packer build .

terraform 프로젝트

terraform으로 auzre database for MySQL flexible server 생성

#DB Subnet
resource "azurerm_subnet" "DBsubnet" {
  name                 = "DBsubnet"
  resource_group_name  = azurerm_resource_group.rg.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes     = ["10.0.2.0/24"]
  service_endpoints    = ["Microsoft.Storage"]

  delegation {
    name = "fs"
    service_delegation {
      name = "Microsoft.DBforMySQL/flexibleServers"
      actions = [
        "Microsoft.Network/virtualNetworks/subnets/join/action",
      ]
    }
  }
}

# Private DNS Zone
resource "azurerm_private_dns_zone" "wp" {
  name                = "wp.mysql.database.azure.com"
  resource_group_name = azurerm_resource_group.rg.name
}


resource "azurerm_private_dns_zone_virtual_network_link" "wplink" {
  name                  = "dbVnetZone.com"
  private_dns_zone_name = azurerm_private_dns_zone.wp.name
  virtual_network_id    = azurerm_virtual_network.vnet.id
  resource_group_name   = azurerm_resource_group.rg.name
}

resource "azurerm_mysql_flexible_server" "flexibleServer" {
  name                   = ""
  resource_group_name    = azurerm_resource_group.rg.name
  location               = azurerm_resource_group.rg.location
  administrator_login    = ""
  administrator_password = ""
  delegated_subnet_id    = azurerm_subnet.DBsubnet.id
  private_dns_zone_id    = azurerm_private_dns_zone.wp.id
  sku_name               = "GP_Standard_D2ds_v4"
  version                = "8.0.21"
  depends_on             = [azurerm_private_dns_zone_virtual_network_link.wplink]


}

profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽
post-custom-banner

0개의 댓글