Packer를 사용하여 VM 이미지 빌드

Packer는 단일 소스 구성으로부터 여러 플랫폼에 대해 동일한 가상 머신(VM) 이미지를 만들기 위한 오픈소스 도구입니다. 이 페이지에서는 Packer 및 Cloud Build를 사용하여 Compute Engine에서 사용할 VM 이미지를 만드는 방법을 설명합니다.

시작하기 전에

이 페이지의 안내는 사용자가 Packer에 익숙하다고 가정합니다. 또한 다음 사항도 적용됩니다.

  • Packer 템플릿을 포함한 소스 코드를 준비합니다.
  • 이 페이지의 gcloud 명령어를 사용하려면 Google Cloud CLI를 설치합니다.
  • 다음 API를 사용 설정합니다.

    gcloud services enable sourcerepo.googleapis.com
    gcloud services enable compute.googleapis.com
    gcloud services enable servicemanagement.googleapis.com
    gcloud services enable storage-api.googleapis.com
    

필수 IAM 권한

Cloud Build에 Packer를 사용하려면 Cloud Build 서비스 계정에 Compute Engine 인스턴스 관리자 역할이 필요합니다. 역할 부여 방법:

  1. Cloud Build 서비스 계정을 찾습니다.

    CLOUD_BUILD_ACCOUNT=$(gcloud projects get-iam-policy $PROJECT --filter="(bindings.role:roles/cloudbuild.builds.builder)"  --flatten="bindings[].members" --format="value(bindings.members[])")
    
  2. 서비스 계정에 Compute Engine 인스턴스 관리자 역할을 추가합니다.

    gcloud projects add-iam-policy-binding $PROJECT \
      --member $CLOUD_BUILD_ACCOUNT \
      --role roles/compute.instanceAdmin
    

Packer 빌더 이미지 만들기

Cloud Build는 Cloud Build에서 packer 명령어를 호출하기 위해 사용할 수 있는 Packer 커뮤니티 빌더 이미지를 제공합니다. Cloud Build 구성 파일에서 이 빌더를 사용하려면 먼저 이미지를 빌드하고 이를 프로젝트의 Container Registry에 푸시해야 합니다.

  1. cloud-builders-community 저장소를 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  2. Packer 빌더 이미지로 이동합니다.

    cd cloud-builders-community/packer
    
  3. 프로젝트에 빌더를 제출합니다.

    gcloud builds submit .
    

Packer 빌더 사용

  1. packer.json 파일이 소스 코드와 함께 있는지 확인합니다.

  2. 프로젝트 루트 디렉터리에서 이름이 cloudbuild.yaml 또는 cloudbuild.json빌드 구성 파일을 만듭니다.

  3. 빌드 구성 파일에서 packer build 명령어를 호출하기 위한 빌드 단계를 추가합니다.

    YAML

    steps:
    - name: 'gcr.io/[PROJECT_ID]/packer'
      args:
      - build
      - -var
      - image_name=[IMAGE_NAME]
      - -var
      - project_id=[PROJECT_ID]
      - -var
      - image_family=[IMAGE_FAMILY]
      - -var
      - image_zone=[IMAGE_ZONE]
      - packer.json
    

    JSON

    {
      "steps": [
       {
          "name": "gcr.io/[PROJECT_ID]/packer",
          "args": [
            "build",
            "-var",
            "image_name=[IMAGE_NAME]",
            "-var",
            "project_id=[PROJECT_ID]",
            "-var",
            "image_family=[IMAGE_FAMILY]",
            "-var",
            "image_zone=[IMAGE_ZONE]",
            "packer.json"
           ]
        }
       ]
    }
    

    각 항목의 의미는 다음과 같습니다.

    • [PROJECT_ID]: Google Cloud 프로젝트 ID입니다.
    • [IMAGE_NAME]은 빌드 중인 VM 이미지 이름입니다.
    • [IMAGE_FAMILY]는 VM 이미지의 이미지 계열입니다.
    • [IMAGE_ZONE]이미지 영역입니다.
  4. 빌드 구성 파일을 사용하여 빌드를 시작합니다.

    gcloud builds submit --region=[REGION] --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]
    

    각 항목의 의미는 다음과 같습니다.

    • [CONFIG_FILE_PATH]는 빌드 구성 파일의 경로입니다.
    • [SOURCE_DIRECTORY]는 소스 코드의 경로 또는 URL입니다.
    • [REGION]지원되는 빌드 리전 중 하나입니다.

    gcloud builds submit 명령어에서 [CONFIG_FILE_PATH][SOURCE_DIRECTORY]를 지정하지 않으면 Cloud Build는 구성 파일과 소스 코드가 현재 작업 중인 디렉터리에 있다고 간주합니다.

이미지가 빌드되면 Google Cloud Console의 Compute Engine 이미지 페이지에서 이를 볼 수 있습니다.

다음 단계