목차

01. 사전조건

  1. 환경준비 를 참조하여, 환경을 준비 합니다.
  2. Terraform으로 Log Workspace생성 이 되어 있어야 합니다.

02. 환경변수 설정

  • 반복적으로 사용되는 값을 Linux환경변수로 정의 합니다.
  • RESOURCE_GROUP_NAME="RG_packer_handson"
    LOCATION="koreacentral"

03. Azure 로그인 및 구독설정

  • Azuer cli 명령어로 로그인하고, 유효한 구독을 설정합니다. (구독이 1개라면, 해당 작업은 건너뛰어도 됩니다.)
  • az login
    
    az account list
    
    az account set --subscription "{subscription id}"


04. 리소스 그룹생성

  • Azure Managed Disks를 배포할 리소스그룹을 생성 합니다.
  • az group create -n $RESOURCE_GROUP_NAME -l $LOCATION

05. Azure 자격 증명 만들기

  • Packer는 'service principal'을 사용하여 Azure를 인증합니다.Azure 'service principal'은 앱, 서비스 및 Packer와 같은 자동화 도구를 사용할 수 있는 보안 ID입니다.'service principal'은 Azure에서 수행할 수 있는 작업에 대한 사용 권한은 사용자가 제어하고 정의합니다.

    명령어
    az ad sp create-for-rbac --name PackerPrincipal --query "{ client_id: appId, client_secret: password, tenant_id: tenant }"
    명령어 실행 결과
    {
      "client_id": "d67xxxxx-xxxxxxx-449f-a6d6-xxxxxxxxx",
      "client_secret": "cxxxxxxxxx-32a6-xxxx-abe2-xxxxxxxxx",
      "tenant_id": "22921252-xxxx-4ab3-ac9a-xxxxxxxxxx"
    }


  • Azure를 인증하기 위해az account show를 사용하여 Azure 구독 ID를 가져와야 합니다.

    명령어
    az account show --query "{ subscription_id: id }"
    명령어 실행 결과
    {
      "subscription_id": "xxxx-xxxx-xxxx-xxxx"
    }


06. Packer 템플릿 정의

  • Visual Studio Code를 실행하고, WSL Terminal을 실행합니다.
  • Git Clone로 IaC Template을 복제 합니다.

    Git Clone
    git https://github.com/Sanses/IaC.git
    cd IaC/packer-azurelinuximage
    
    ls -al
    ubuntu.json
    Variables.json
    
  • variables.json을 열고 Azuer 자격증명, 구독 정보, Log Workspace를 정의 합니다.

    variables.json
    {
      "CLIENT_ID": "{CLIENT_ID}",
      "CLIENT_SECRET": "{CLIENT_SECRET}",
      "TENANT_ID": "{TENANT_ID}",
      "SUBSCRIPTION_ID": "{SUBSCRIPTION_ID}",
      "RESOURCE_GROUP_NAME": "{RESOURCE_GROUP_NAME}",
      "PACKER_IMAGE_NAME": "PackerImage",
      "LOCATION": "koreacentral",
      "WORKSAPCE_ID": "{WORKSAPCE_ID}",
      "PRIMARY_KEY": "{PRIMARY_KEY}"
    }
  • ubuntu.json  정의

    • provisioners에 '03. Terraform으로 Log Workspace생성'한 Log Agent를 설치하도록 정의되었습니다.
       
    • ubuntu.json
      {
          "builders": [{
            "type": "azure-arm",
        
            "client_id": "{{user `CLIENT_ID`}}",
            "client_secret": "{{user `CLIENT_SECRET`}}",
            "tenant_id": "{{user `TENANT_ID`}}",
            "subscription_id": "{{user `SUBSCRIPTION_ID`}}",
        
            "managed_image_resource_group_name": "{{user `RESOURCE_GROUP_NAME`}}",
            "managed_image_name": "{{user `PACKER_IMAGE_NAME`}}",
        
            "os_type": "Linux",
            "image_publisher": "Canonical",
            "image_offer": "UbuntuServer",
            "image_sku": "16.04-LTS",
        
            "azure_tags": {
                "dept": "Engineering",
                "task": "Image deployment"
            },
        
            "location": "{{user `LOCATION`}}",
            "vm_size": "Standard_DS2_v2"
          }],
          "provisioners": [
           {
              "type": "shell",
              "pause_before": "5s",
              "inline": [
                  "wget https://raw.githubusercontent.com/Microsoft/OMS-Agent-for-Linux/master/installer/scripts/onboard_agent.sh",
      
                  "chmod 777 onboard_agent.sh",
      
                  "sh onboard_agent.sh -w {{user `WORKSPACE_ID`}} -s {{user `PRIMARY_KEY`}} -d opinsights.azure.com",
                  "sudo /opt/microsoft/omsagent/bin/service_control restart {user `WORKSPACE_ID`}}"
              ]
            }                    
          ]
      }

07. Packer 빌드

  • Packer 템플릿을 빌드 합니다.
    • 명령어
      packer build -var-file=variables.json ubuntu.json
      명령어 실행 결과
      Build 'azure-arm' finished.
      
      ==> Builds finished. The artifacts of successful builds are:
      --> azure-arm: Azure.ResourceManagement.VMImage:
      
      OSType: Linux
      ManagedImageResourceGroupName: RG_packer_handson
      ManagedImageName: PackerImage
      ManagedImageId: /subscriptions/xxxxxxxxx-4b46-4305-b5ac-xxxxxxxxx/resourceGroups/RG_packer_handson/providers/Microsoft.Compute/images/PackerImage
      ManagedImageLocation: koreacentral
    • Packer Image 생성 결과




  • No labels