목차
01. 사전조건
- 환경준비 를 참조하여, 환경을 준비 합니다.
- 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에서 수행할 수 있는 작업에 대한 사용 권한은 사용자가 제어하고 정의합니다.
Azure를 인증하기 위해az account show를 사용하여 Azure 구독 ID를 가져와야 합니다.
06. Packer 템플릿 정의
- Visual Studio Code를 실행하고, WSL Terminal을 실행합니다.
Git Clone로 IaC Template을 복제 합니다.
Git Clonegit 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`}}" ] } ] }
- provisioners에 '03. Terraform으로 Log Workspace생성'한 Log Agent를 설치하도록 정의되었습니다.
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 생성 결과
1 Comment
Anonymous
Add Comment