목차

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

1 Comment

  1. Anonymous

    Prince FQFJIFpYrkkhOLNW 6 17 2022 priligy dapoxetine buy Despite not reaching adequate concentrations in the brain, doxycycline can penetrate the prostate glands to treat infections there as well as penetrate cells to kill intracellular parasites
    1. You are not logged in. Any changes you make will be marked as anonymous. You may want to Log In if you already have an account.