Google Cloud에서 Windows VM을 만들려면 Windows 또는 Windows Server가 미리 설치된 VM 이미지를 사용해야 합니다. Google Cloud는 일반적으로 사용되는 Windows Server 버전에 대한 공개 이미지를 제공하지만, 이러한 이미지는 주문형 라이선스에만 적합합니다. 사용자 Windows 라이선스 사용(BYOL)을 위해서는 기존 이미지 가져오기를 수행하거나 커스텀 이미지를 빌드해야 합니다.
이 가이드에서는 Google Cloud에서 공개 이미지를 만들기 위해 사용되는 것과 동일한 도구 및 프로세스를 사용하여 커스텀 이미지를 만드는 방법을 설명합니다.
이 가이드를 완료하려면 다음이 필요합니다.
- Windows 또는 Windows Server 설치 미디어가 포함된 ISO 파일이 필요합니다.
- 선택적으로 이미지에 적용할 하나 이상의 Windows 업데이트 패키지(
.msu
형식)가 포함될 수 있습니다.
시작하기 전에
- 이 가이드의 명령줄 예시를 사용하려면 다음을 수행하세요.
- 최신 버전의 Google Cloud CLI를 설치하거나 업데이트합니다.
- 기본 리전 및 영역을 설정합니다.
- 이 가이드의 API 예시를 사용하려면 API 액세스를 설정합니다.
빌드 프로세스 이해
Windows를 처음부터 새로 설치할 때 일반적인 방법은 Windows 설치 파일이 포함된 DVD 또는 ISO 파일로 컴퓨터를 부팅하는 것입니다. 일부 온프레미스 하이퍼바이저와 달리 Compute Engine은 ISO 파일에서 부팅을 지원하지 않습니다.
따라서 Windows를 처음부터 새로 설치하기 위해서는 다음 단계를 지원하는 다른 방법을 따라야 합니다.
- 새 디스크를 만듭니다.
- Windows 이미지(설치 미디어의
install.wim
)를 디스크에 추출합니다. - 자동 실행이 가능하도록 필요한 드라이버를 추가하고, Windows 설정을 구성하고, 디스크를 부팅 가능하게 만듭니다.
- 새 디스크에서 부팅하여 Windows 설치 프로그램을 실행합니다.
- 게스트 OS 에이전트를 포함하여 추가 소프트웨어를 설치합니다.
- 디스크로부터 이미지를 만듭니다.
이 가이드에서는 이러한 단계를 수동으로 수행하는 대신 GitHub에서 제공되는Cloud Build, daisy
도구, 참조 워크플로를 사용하여 프로세스를 자동화하는 방법을 설명합니다.
daisy
는 워크플로를 실행할 수 있게 해주는 오픈소스 명령줄 도구입니다. 워크플로는 JSON 파일로 작성되며 일련의 단계를 포함합니다. 이러한 각 단계는 디스크 만들기, VM 인스턴스 종료와 같은 Compute Engine 작업을 설명합니다. 따라서 Daisy 워크플로는 Windows 이미지를 처음부터 새로 빌드하는 데 필요한 단계를 자동화하는 데 적합합니다.
커스텀 Windows 이미지를 빌드하기 위한 daisy 워크플로는 2개의 임시 VM 인스턴스를 만듭니다.
첫 번째 VM 인스턴스(bootstrap
프리픽스)는 부팅 가능한 디스크를 만드는 데 필요한 단계를 수행합니다. 두 번째 VM 인스턴스(install
프리픽스)는 Windows 설치 프로그램을 실행하고 남은 모든 단계를 수행합니다.
이미지 빌드를 위한 프로젝트 준비
daisy 도구가 기존 VM 인스턴스 또는 인프라와 충돌하지 않도록 방지하기 위해 이미지 빌드를 위한 전용 프로젝트를 만듭니다.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- Compute Engine API, Cloud Build API, Cloud Storage API를 사용 설정합니다.
다음 단계는 로컬 컴퓨터에서 Windows 또는 Linux를 사용하는지에 따라 달라집니다.
Windows
- 로컬 컴퓨터에서 Windows PowerShell 창을 엽니다.
변수를 초기화합니다.
$PROJECT_ID = "
PROJECT_ID
"여기에서
PROJECT_ID
는 이전 섹션에서 만든 클라우드 프로젝트의 프로젝트 ID입니다.프로젝트의 프로젝트 번호가 포함되도록 다른 변수를 초기화합니다.
$PROJECT_NUMBER = gcloud projects describe $PROJECT_ID --format=value`(projectNumber`)
RDP 및 SSH 액세스를 위해 기본 방화벽 규칙을 사용 중지합니다.
gcloud compute firewall-rules update default-allow-rdp --project $PROJECT_ID --disabled gcloud compute firewall-rules update default-allow-ssh --project $PROJECT_ID --disabled
Cloud Build가 이미지 빌드를 위해 필요한 임시 VM 인스턴스를 만들 수 있도록 Compute 인스턴스 관리자 및 서비스 계정 사용자 역할을 Cloud Build에 부여합니다.
gcloud projects add-iam-policy-binding $PROJECT_ID ` --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com ` --role roles/compute.instanceAdmin.v1 gcloud projects add-iam-policy-binding $PROJECT_ID ` --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com ` --role roles/iam.serviceAccountUser
Linux
- 로컬 컴퓨터에서 터미널 창을 엽니다.
변수를 초기화합니다.
PROJECT_ID=
PROJECT_ID
여기에서
PROJECT_ID
는 이전 섹션에서 만든 클라우드 프로젝트의 프로젝트 ID입니다.프로젝트의 프로젝트 번호가 포함되도록 다른 변수를 초기화합니다.
PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format=value\(projectNumber\)`
RDP 및 SSH 액세스를 위해 기본 방화벽 규칙을 사용 중지합니다.
gcloud compute firewall-rules update default-allow-rdp --project $PROJECT_ID --disabled gcloud compute firewall-rules update default-allow-ssh --project $PROJECT_ID --disabled
Cloud Build가 이미지 빌드를 위해 필요한 임시 VM 인스턴스를 만들 수 있도록 Compute 인스턴스 관리자 및 서비스 계정 사용자 역할을 Cloud Build에 부여합니다.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role roles/compute.instanceAdmin.v1 gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role roles/iam.serviceAccountUser
설치 파일 업로드
이제 커스텀 이미지에 필요한 모든 설치 파일을 수집하고 이를 Cloud Storage 버킷에 업로드합니다. Cloud Storage 버킷에 파일을 저장하면 이미지 빌드를 위해 daisy
에 사용되는 임시 VM 인스턴스와 daisy
에서 파일에 액세스할 수 있습니다.
로컬 컴퓨터에서 필요한 설치 패키지를 다운로드합니다.
설치 파일을 저장할 새 Cloud Storage 버킷을 만듭니다.
gsutil mb -p $PROJECT_ID gs://$PROJECT_ID-media
설치 파일을 읽을 수 있도록 스토리지 객체 뷰어 역할을 Cloud Build에 부여합니다.
gsutil iam ch serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com:objectViewer gs://$PROJECT_ID-media
PowerShell 설치 패키지를 업로드합니다.
gsutil cp
POWERSHELL_PACKAGE
gs://$PROJECT_ID-media/PowerShell.msi여기에서
POWERSHELL_PACKAGE
는 PowerShell 설치 패키지의 경로입니다..NET Framework 설치 패키지를 업로드합니다.
gsutil cp
DOTNET_PACKAGE
gs://$PROJECT_ID-media/dotnet-sdk.exe여기에서
DOTNET_PACKAGE
는 NET Framework 설치 패키지의 경로입니다.gcloud CLI 설치 패키지를 업로드합니다.
gsutil cp
CLOUDSDK_PACKAGE
gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exe여기서
CLOUDSDK_PACKAGE
는 gcloud CLI 설치 패키지의 경로입니다.Windows 설치 미디어가 포함된 ISO 파일을 업로드합니다.
gsutil cp
ISO
gs://$PROJECT_ID-media/여기에서
ISO
는 ISO 파일의 이름입니다.선택적으로 추가 업데이트 패키지를 업로드합니다.
gsutil cp
UPDATE_DIR
/*.msu gs://$PROJECT_ID-media/updates/여기에서
UPDATE_DIR
은 업데이트 패키지가 포함된 디렉터리입니다.
이제 커스텀 이미지를 빌드할 준비가 되었습니다.
이미지 빌드
daisy
워크플로를 실행하여 커스텀 이미지를 빌드하려면 최대 4시간까지 걸릴 수 있습니다.
daisy
를 로컬로 실행하는 대신 이제 Cloud Build가 백그라운드에서 워크플로를 실행할 수 있도록 Cloud Build 구성을 만들 수 있습니다.
로컬 컴퓨터에서 Windows 이미지 빌드를 위해
daisy
워크플로가 포함된 Git 저장소를 클론합니다.git clone https://github.com/GoogleCloudPlatform/compute-image-tools.git
windows
디렉터리로 전환합니다.cd compute-image-tools/daisy_workflows/image_build/windows/
windows
디렉터리에서 서픽스가.wf.json
인 파일 선택 항목을 찾습니다. 이러한 파일에는 일반적으로 사용되는 Windows 버전에 대한 Daisy 워크플로 정의가 포함됩니다.Windows 버전 워크플로 파일 Windows Server 2019(64비트) windows-server-2019-dc-uefi-byol.wf.json
Windows Server Core 2019(64비트) windows-server-2019-dc-core-uefi-byol.wf.json
Windows Server 2016(64비트) windows-server-2016-dc-uefi-byol.wf.json
Windows Server Core 2016(64비트) windows-server-2016-dc-core-uefi-byol.wf.json
Windows 10(64비트) windows-10-20h2-ent-x64-uefi-byol.wf.json
설치하려는 Windows 버전과 가장 가깝게 일치하는 워크플로 파일을 엽니다. 필요한 경우 설치 미디어와 일치하도록 워크플로 파일에서 Windows 버전(
edition
) 및 라이선스 키(product_key
) 설정을 변경합니다.올바른 버전 이름이 확실하지 않으면 관리자 권한 PowerShell 프롬프트를 열고 다음 명령어를 실행하여 설치 미디어에서 지원되는 모든 버전을 나열합니다.
$IsoFile = "
ISO
" $Mount = Mount-DiskImage -ImagePath (Resolve-Path $IsoFile) $DriveLetter = ($Mount | Get-Volume).DriveLetter Get-WindowsImage -ImagePath "$($DriveLetter):\sources\install.wim" | select ImageName Dismount-DiskImage -InputObject $Mount | Out-NullISO
를 ISO 이미지의 로컬 경로로 바꿉니다.windows
디렉터리에서cloudbuild.yaml
이라는 새 파일을 만들고 다음 코드를 붙여넣습니다.timeout: 14400s # 4 hour timeout for entire build steps: - name: 'gcr.io/compute-image-tools/daisy' timeout: 14400s # 4 hour timeout for build step args: - -project=$PROJECT_ID - -zone=us-central1-a - -var:updates=gs://$PROJECT_ID-media/updates/ - -var:pwsh=gs://$PROJECT_ID-media/PowerShell.msi - -var:dotnet48=gs://$PROJECT_ID-media/dotnet-sdk.exe - -var:cloudsdk=gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exe - -var:media=gs://$PROJECT_ID-media/
ISO
-WORKFLOW
다음과 같이 바꿉니다.
ISO
: Cloud Storage의 ISO 파일 이름입니다.WORKFLOW
: 사용 중인 Windows 버전에 해당하는 워크플로 파일의 이름입니다.
Cloud Build에 빌드를 제출합니다.
gcloud builds submit --project $PROJECT_ID --async
빌드를 완료하는 데 최대 4시간까지 걸립니다. Google Cloud Console의 Cloud Build > 기록에서 빌드 상태를 추적할 수 있습니다.
커스텀 이미지 사용
빌드가 완료되었으면 Google Cloud 콘솔의 Compute Engine > 이미지에서 커스텀 BYOL 이미지를 찾을 수 있습니다.
동일한 이미지의 여러 버전을 쉽게 구분할 수 있도록 windows-server-2019-dc-v1613488342
와 같이 빌드 프로세스가 이미지 이름에 타임스탬프를 포함합니다.
또한 이 프로세스에서 windows-server-2019
와 같이 이미지를 커스텀 이미지 계열과 연결합니다.
커스텀 BYOL 이미지를 사용하는 VM 이미지를 만들려면 단독 테넌트 노드에서 VM 인스턴스를 프로비저닝해야 합니다.
문제 해결
빌드 프로세스가 실패했거나 진행되지 않는 것으로 의심될 경우 다음 방법에 따라 상황을 진단합니다.
- 올바른 설치 패키지 및 ISO 파일을 업로드했는지 확인합니다.
- ISO 파일의 Windows 버전과 일치하는 워크플로를 선택했는지 확인합니다.
- Cloud Build의 빌드 로그를 검토하고 오류 메시지가 있는지 확인합니다.
- 빌드가 멈춘 것 같으면 빌드로 생성된 VM 인스턴스의 직렬 포트 출력을 검토하고 오류 메시지를 확인합니다.
다음 단계
- daisy 도구 정보 자세히 알아보기
- 이미지 빌드를 위한 Daisy 워크플로에 대해 자세히 알아보기
- 기존 라이선스를 Compute Engine에 사용하는 방법 알아보기
- 이미지 계열 작업 권장사항 읽어보기