Windows VM에서 시작 스크립트 사용


시작 스크립트는 가상 머신(VM) 인스턴스의 시작 프로세스 동안 태스크를 수행하는 파일입니다. 시작 스크립트는 프로젝트의 모든 VM 또는 단일 VM에 적용될 수 있습니다. VM 수준의 메타데이터로 지정된 시작 스크립트는 프로젝트 수준의 메타데이터로 지정된 시작 스크립트를 재정의하며, 네트워크를 사용할 수 있을 때만 시작 스크립트가 실행됩니다. 이 문서에서는 Windows Server VM 인스턴스에서 시작 스크립트 사용 방법을 설명합니다. 프로젝트 수준의 시작 스크립트를 추가하는 방법은 gcloud compute project-info add-metadata를 참조하세요.

Windows 시작 스크립트는 명령어 셸(.cmd), PowerShell(.ps1) 또는 배치 파일 스크립트(.bat)여야 하며 적절한 파일 확장자가 있어야 합니다.

이 문서의 절차 중 하나에 따라 시작 스크립트를 지정하면 Compute Engine이 다음을 수행합니다.

  1. 시작 스크립트를 VM에 복사

  2. VM이 부팅될 때 시작 스크립트를 LocalSystem 계정으로 실행

시작 스크립트와 관련된 여러 태스크 및 이러한 각 태스크를 수행해야 하는 경우에 대한 자세한 내용은 개요를 참조하세요.

시작하기 전에

Windows 시작 스크립트의 메타데이터 키

시작 스크립트는 메타데이터 키로 지정된 위치에서 VM에 전달됩니다. 메타데이터 키는 시작 스크립트가 로컬로 저장되는지, Cloud Storage에 저장되는지, VM에 직접 전달되는지를 지정합니다. 사용하는 메타데이터 키는 시작 스크립트의 크기 또는 파일 유형에 따라 달라질 수 있습니다.

다음 표에서는 Windows 시작 스크립트에 사용할 수 있는 메타데이터 키를 보여주고, 시작 스크립트의 스토리지 위치, 크기, 파일 유형을 기준으로 사용할 키에 대한 정보를 제공합니다.

메타데이터 키 용도
sysprep-specialize-script-ps1 로컬에 저장되거나 직접 추가된 최대 256KB의 서명되지 않은 PowerShell 스크립트 전달
sysprep-specialize-script-cmd 로컬에 저장되거나 직접 추가된 최대 256KB의 서명되지 않은 명령어 셸 스크립트 전달
sysprep-specialize-script-bat 로컬에 저장되거나 직접 추가된 최대 256KB인 배치 파일 스크립트 전달
sysprep-specialize-script-url Cloud Storage에 저장되고 256KB를 초과하는 배치 파일, 명령어 셸, 서명되거나 서명되지 않은 PowerShell 스크립트 전달
windows-startup-script-ps1 로컬에 저장되거나 직접 추가된 최대 256KB의 서명되지 않은 PowerShell 스크립트 전달
windows-startup-script-cmd 로컬에 저장되거나 직접 추가된 최대 256KB의 서명되지 않은 명령어 셸 스크립트 전달
windows-startup-script-bat 로컬에 저장되거나 직접 추가된 최대 256KB인 배치 파일 스크립트 전달
windows-startup-script-url Cloud Storage에 저장되고 256KB를 초과하는 배치 파일, 명령어 셸, 서명되거나 서명되지 않은 PowerShell 스크립트 전달

여러 유형의 시작 스크립트의 실행 순서에 대한 자세한 내용은 GitHub에서 GoogleCloudPlatform/compute-image-windows 저장소를 참조하세요.

Windows 시작 스크립트 실행 순서

여러 시작 스크립트를 사용할 수 있습니다. 로컬로 저장된 또는 직접 추가된 시작 스크립트는 Cloud Storage에 저장된 시작 스크립트 전에 실행됩니다. 스크립트를 포함하는 파일 유형도 실행 순서에 영향을 줍니다. 다음 표에서는 메타데이터 키를 기준으로 Windows 시작 스크립트의 실행 순서를 보여줍니다.

메타데이터 키 실행 순서
sysprep-specialize-script-ps1 초기 부팅 중 첫 번째
sysprep-specialize-script-cmd 초기 부팅 중 두 번째
sysprep-specialize-script-bat 초기 부팅 중 세 번째
sysprep-specialize-script-url 초기 부팅 중 네 번째
windows-startup-script-ps1 초기 부팅 후 부팅할 때마다 첫 번째
windows-startup-script-cmd 초기 부팅 후 부팅할 때마다 두 번째
windows-startup-script-bat 초기 부팅 후 부팅할 때마다 세 번째
windows-startup-script-url 초기 부팅 후 부팅할 때마다 네 번째

Windows 시작 스크립트 직접 전달

배치 파일의 콘텐츠, 명령어 셸, 서명되지 않은 PowerShell 시작 스크립트를 Windows Server VM에 직접 전달합니다. 다음 절차에서는 서명되지 않은 PowerShell 스크립트를 전달하는 방법을 보여줍니다.

Console

Windows 시작 스크립트를 새 VM에 직접 전달

  1. Google Cloud Console에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기로 이동

  2. 부팅 디스크에서 변경을 선택하고 다음을 수행합니다.

    1. 공개 이미지 탭에서 Windows Server 운영체제를 선택합니다.
    2. 선택을 클릭합니다.
  3. 네트워킹, 디스크, 보안, 관리, 단독 테넌시 섹션을 펼치고 다음을 수행합니다.

    1. 관리 섹션을 펼칩니다.
    2. 메타데이터 섹션에서 항목 추가를 클릭하여 을 설정합니다.

      • : windows-startup-script-ps1로 설정합니다.

        windows-startup-script로 시작하는 메타데이터 키를 사용하여 VM에 전달된 시작 스크립트는 VM 최초 부팅 후 부팅될 때마다 실행됩니다.

      • : 다음 스크립트를 추가합니다.

        # Installing IIS
        Import-Module servermanager
        Install-WindowsFeature Web-Server -IncludeAllSubFeature
        
        # Ensure the directory exists
        if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
        
        # Write the expanded string out to the file, overwriting the file if it already exists.
        "<html><body><p>Windows startup script added directly.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -  Force
        
  4. 만들기를 클릭합니다.

Windows 시작 스크립트를 기존 VM에 직접 전달

  1. 수정을 클릭합니다.

  2. 커스텀 메타데이터에서 다음을 지정합니다.

    • key: windows-startup-script-ps1
    • value: 시작 스크립트의 콘텐츠

시작 스크립트 확인

VM이 시작되면 웹 브라우저에서 외부 IP를 확인하여 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

gcloud(Bash)

Windows 시작 스크립트를 새 VM에 직접 전달

다음 gcloud compute instances create 명령어를 실행하여 Windows Server VM을 만들 때 시작 스크립트 콘텐츠를 이 VM에 직접 전달합니다.

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

VM_NAME을 VM의 이름으로 바꿉니다.

Windows 시작 스크립트를 기존 VM에 직접 전달

다음 gcloud compute instances add-metadata 명령어를 사용하여 시작 스크립트를 기존 VM에 직접 추가합니다.

gcloud compute instances add-metadata VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

VM_NAME을 VM의 이름으로 바꿉니다.

시작 스크립트 확인

VM이 시작되면 웹브라우저에서 외부 IP를 확인하여 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

gcloud(명령 프롬프트)

Windows 시작 스크립트를 새 VM에 직접 전달

다음 gcloud compute instances create 명령어를 실행하여 Windows Server VM을 만들 때 시작 스크립트 콘텐츠를 이 VM에 직접 전달합니다.

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

VM_NAME을 VM의 이름으로 바꿉니다.

Windows 시작 스크립트를 기존 VM에 직접 전달

다음 gcloud compute instances add-metadata 명령어를 사용하여 시작 스크립트를 기존 VM에 직접 추가합니다.

gcloud compute instances add-metadata VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

VM_NAME을 VM의 이름으로 바꿉니다.

시작 스크립트 확인

VM이 시작되면 웹브라우저에서 외부 IP를 확인하여 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

gcloud(PowerShell)

Windows 시작 스크립트를 새 VM에 직접 전달

다음 gcloud compute instances create 명령어를 실행하여 Windows Server VM을 만들 때 시작 스크립트 콘텐츠를 이 VM에 직접 전달합니다.

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

VM_NAME을 VM의 이름으로 바꿉니다.

Windows 시작 스크립트를 기존 VM에 직접 전달

다음 gcloud compute instances add-metadata 명령어를 사용하여 시작 스크립트를 기존 VM에 직접 추가합니다.

gcloud compute instances add-metadata VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

VM_NAME을 VM의 이름으로 바꿉니다.

시작 스크립트 확인

VM이 시작되면 웹브라우저에서 외부 IP를 확인하여 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

API

Windows 시작 스크립트를 새 VM에 직접 전달

다음 instances.insert 메서드를 사용하여 Windows Server VM를 만들 때 시작 스크립트의 콘텐츠를 이 VM에 직접 전달합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  ...
  "networkInterfaces": [
    {
      "accessConfigs": [
        {
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "metadata": {
    "items": [
      {
        "key": "windows-startup-script-ps1",
        "value": "Import-Module servermanager\nInstall-WindowsFeature Web-Server -IncludeAllSubFeature\necho '<html><body><p>Windows startup script added directly.</p></body></html>' > C:\\inetpub\\wwwroot\\index.html"
      }
    ]
  },
  ...
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID

  • ZONE: 새 VM을 만들 영역

Windows 시작 스크립트를 기존 VM에 직접 전달

  1. instances.get 메서드를 사용하여 VM의 tags.fingerprint 값을 가져옵니다.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID

    • ZONE: VM의 영역

    • VM_NAME: VM의 영역입니다.

  2. instances.setMetadata 메서드 호출에 fingerprint 값을 사용하여 시작 스크립트의 메타데이터 키와 값과 함께 시작 스크립트를 전달합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
      "fingerprint": FINGERPRINT,
      "items": [
        {
          "key": "windows-startup-script-ps1",
          "value": "Import-Module servermanager\nInstall-WindowsFeature Web-Server -IncludeAllSubFeature\necho '<html><body><p>Windows startup script added directly.</p></body></html>' > C:\\inetpub\\wwwroot\\index.html"
        }
      ],
      ...
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID

    • ZONE: VM의 영역

    • VM_NAME: VM의 영역입니다.

    • FINGERPRINT: instances.get 메서드를 사용하여 가져온 tags.fingerprint 값입니다.

시작 스크립트 확인

VM이 시작되면 웹 브라우저에서 외부 IP를 확인하여 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

로컬 파일에서 Windows 시작 스크립트 전달

로컬 배치 파일, 명령어 셸 스크립트, 워크스테이션에 있는 서명되지 않은 PowerShell 스크립트에 시작 스크립트를 저장하고, VM을 만들 때 로컬 파일을 VM에 메타데이터로 전달할 수 있습니다. VM에 저장된 파일을 시작 스크립트로 사용할 수 없습니다.

로컬 파일에서 VM으로 Windows 시작 스크립트를 전달하려면 먼저 다음을 수행합니다.

  1. 시작 스크립트를 저장할 로컬(.ps1) 파일을 만듭니다.

  2. gcloud 도구에서 시작 스크립트까지의 상대 경로를 확인합니다.

  3. 다음 시작 스크립트를 파일에 추가합니다.

    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Windows startup script passed from a file on your local workstation.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    

gcloud(Bash)

로컬 파일에서 새 VM으로 Windows 시작 스크립트 전달

--metadata-from-file 플래그와 함께 gcloud compute instances create 명령어를 사용하여 VM을 만들고 시작 스크립트로 사용할 로컬 파일의 콘텐츠를 전달합니다.

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • FILE_PATH: 시작 스크립트 파일의 상대 경로
Windows 시작 스크립트를 로컬 파일에서 기존 VM으로 전달

다음 gcloud compute instances add-metadata 명령어를 사용하여 시작 스크립트를 로컬 파일에서 기존 VM에 전달합니다.

gcloud compute instances add-metadata VM_NAME \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • FILE_PATH: 시작 스크립트 파일의 상대 경로
시작 스크립트 확인

웹브라우저에서 외부 IP를 보고 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

gcloud(명령 프롬프트)

로컬 파일에서 새 VM으로 Windows 시작 스크립트 전달

--metadata-from-file 플래그와 함께 gcloud compute instances create 명령어를 사용하여 VM을 만들고 시작 스크립트로 사용할 로컬 파일의 콘텐츠를 전달합니다.

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • FILE_PATH: 시작 스크립트 파일의 상대 경로
Windows 시작 스크립트를 로컬 파일에서 기존 VM으로 전달

다음 gcloud compute instances add-metadata 명령어를 사용하여 시작 스크립트를 로컬 파일에서 기존 VM에 전달합니다.

gcloud compute instances add-metadata VM_NAME ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • FILE_PATH: 시작 스크립트 파일의 상대 경로
시작 스크립트 확인

웹브라우저에서 외부 IP를 보고 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

gcloud(PowerShell)

로컬 파일에서 새 VM으로 Windows 시작 스크립트 전달

--metadata-from-file 플래그와 함께 gcloud compute instances create 명령어를 사용하여 VM을 만들고 시작 스크립트로 사용할 로컬 파일의 콘텐츠를 전달합니다.

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • FILE_PATH: 시작 스크립트 파일의 상대 경로
Windows 시작 스크립트를 로컬 파일에서 기존 VM으로 전달

다음 gcloud compute instances add-metadata 명령어를 사용하여 시작 스크립트를 로컬 파일에서 기존 VM에 전달합니다.

gcloud compute instances add-metadata VM_NAME `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • FILE_PATH: 시작 스크립트 파일의 상대 경로
시작 스크립트 확인

웹브라우저에서 외부 IP를 보고 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

Cloud Storage에서 Windows 시작 스크립트 전달

시작 스크립트를 배치 파일, 명령어 셸 스크립트, 서명되거나 서명되지 않은 PowerShell 스크립트로 Cloud Storage에 저장하고 VM을 만들 때 이를 VM에 전달할 수 있습니다. Cloud Storage에 시작 스크립트를 추가하면 VM을 만들 때 시작 스크립트를 참조하는 데 사용할 수 있는 URL이 있습니다.

Cloud Storage 버킷에서 시작 스크립트를 추가하려면 먼저 다음을 수행합니다.

  1. 시작 스크립트를 저장할 파일을 만듭니다. 이 예시에서는 PowerShell(.ps1) 파일이 사용됩니다.

  2. 다음의 PowerShell 스크립트를 파일에 추가합니다. 그러면 웹 서버가 설치되어 간단한 웹페이지가 생성됩니다.

    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Windows startup script passed from Cloud Storage.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    
  3. Cloud Storage 버킷 생성

  4. Cloud Storage 버킷에 파일을 추가합니다.

보안에 미치는 영향

  • 기본적으로 이를 허용하지 않는 명시적인 액세스 제어가 없는 한, 프로젝트 소유자와 프로젝트 편집자는 동일한 프로젝트의 Cloud Storage 파일에 액세스할 수 있습니다.

  • Cloud Storage 버킷 또는 객체가 메타데이터보다 안전하지 않은 경우 시작 스크립트가 수정되고 VM이 재부팅되면 권한 에스컬레이션이 발생할 위험이 있습니다. VM이 재부팅되면 시작 스크립트가 LocalSystem로 실행된 다음 연결된 서비스 계정의 권한을 사용하여 다른 리소스에 액세스할 수 있기 때문입니다.

Console

Cloud Storage에 저장된 시작 스크립트를 새 VM에 전달

  1. Google Cloud Console에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기로 이동

  2. 부팅 디스크에서 변경을 선택하고 다음을 수행합니다.

    1. 공개 이미지 탭에서 Windows Server 운영체제를 선택합니다.
    2. 선택을 클릭합니다.
  3. ID 및 API 액세스 섹션에서 스토리지 객체 뷰어 역할이 있는 서비스 계정을 선택합니다.

  4. 네트워킹, 디스크, 보안, 관리, 단독 테넌시 섹션을 펼친 후 다음을 수행합니다.

    1. 관리 섹션을 펼칩니다.
    2. 메타데이터 섹션에서 다음 값을 추가합니다.

      • : 메타데이터 키입니다. 최초 부팅 후 부팅될 때마다 스크립트가 실행되도록 windows-startup-script-url 메타데이터 키를 지정합니다.

      • : 메타데이터 값. 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 Cloud Storage 위치로 설정합니다.

        • 인증된 URL: https://storage.googleapis.com/BUCKET/FILE
        • gsutil URI: gs://BUCKET/FILE

        다음을 바꿉니다.

        • BUCKET: 시작 스크립트 파일이 포함된 버킷의 이름
        • FILE: 시작 스크립트 파일 이름
  5. VM을 만들려면 만들기를 클릭합니다.

Cloud Storage에 저장된 시작 스크립트를 기존 VM에 전달

VM을 수정한 후 커스텀 메타데이터에서 메타데이터에 대해 다음 값을 사용합니다.

  • : windows-startup-script-url

  • : 다음 형식 중 하나를 사용하는 시작 스크립트 파일의 Cloud Storage 위치입니다.

    • 인증된 URL: https://storage.googleapis.com/BUCKET/FILE
    • gsutil URI: gs://BUCKET/FILE

시작 스크립트 확인

웹브라우저에서 외부 IP를 보고 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

gcloud(Bash)

Cloud Storage에 저장된 시작 스크립트를 새 VM에 전달

다음 gcloud compute instances create 명령어를 사용하여 Cloud Storage에 저장된 시작 스크립트를 Windows Server VM에 전달합니다. --scopes 플래그 값에 대해 VM이 Cloud Storage에 액세스할 수 있도록 storage-ro를 사용합니다.

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --scopes=storage-ro \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • CLOUD_STORAGE_URL: 메타데이터 값입니다. 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 위치로 설정합니다.
    • 인증된 URL: https://storage.googleapis.com/BUCKET/FILE
    • gsutil URI: gs://BUCKET/FILE
Cloud Storage에 저장된 시작 스크립트를 기존 VM에 전달

다음 gcloud compute instances add-metadata 명령어를 사용하여 Cloud Storage에 저장된 시작 스크립트를 기존 VM에 전달합니다.

gcloud compute instances add-metadata VM_NAME \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • CLOUD_STORAGE_URL: 메타데이터 값입니다. 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 위치로 설정합니다.
    • 인증된 URL: https://storage.googleapis.com/BUCKET/FILE
    • gsutil URI: gs://BUCKET/FILE
시작 스크립트 확인

웹브라우저에서 외부 IP를 보고 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

gcloud(명령 프롬프트)

Cloud Storage에 저장된 시작 스크립트를 새 VM에 전달

다음 gcloud compute instances create 명령어를 사용하여 Cloud Storage에 저장된 시작 스크립트를 Windows Server VM에 전달합니다. --scopes 플래그 값에 대해 VM이 Cloud Storage에 액세스할 수 있도록 storage-ro를 사용합니다.

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --scopes=storage-ro \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • CLOUD_STORAGE_URL: 메타데이터 값입니다. 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 위치로 설정합니다.
    • 인증된 URL: https://storage.googleapis.com/BUCKET/FILE
    • gsutil URI: gs://BUCKET/FILE
Cloud Storage에 저장된 시작 스크립트를 기존 VM에 전달

다음 gcloud compute instances add-metadata 명령어를 사용하여 Cloud Storage에 저장된 시작 스크립트를 기존 VM에 전달합니다.

gcloud compute instances add-metadata VM_NAME ^
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • CLOUD_STORAGE_URL: 메타데이터 값입니다. 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 위치로 설정합니다.
    • 인증된 URL: https://storage.googleapis.com/BUCKET/FILE
    • gsutil URI: gs://BUCKET/FILE
시작 스크립트 확인

웹브라우저에서 외부 IP를 보고 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

gcloud(PowerShell)

Cloud Storage에 저장된 시작 스크립트를 새 VM에 전달

다음 gcloud compute instances create 명령어를 사용하여 Cloud Storage에 저장된 시작 스크립트를 Windows Server VM에 전달합니다. --scopes 플래그 값에 대해 VM이 Cloud Storage에 액세스할 수 있도록 storage-ro를 사용합니다.

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --scopes=storage-ro \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • CLOUD_STORAGE_URL: 메타데이터 값입니다. 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 위치로 설정합니다.
    • 인증된 URL: https://storage.googleapis.com/BUCKET/FILE
    • gsutil URI: gs://BUCKET/FILE
Cloud Storage에 저장된 시작 스크립트를 기존 VM에 전달

다음 gcloud compute instances add-metadata 명령어를 사용하여 Cloud Storage에 저장된 시작 스크립트를 기존 VM에 전달합니다.

gcloud compute instances add-metadata VM_NAME `
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • CLOUD_STORAGE_URL: 메타데이터 값입니다. 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 위치로 설정합니다.
    • 인증된 URL: https://storage.googleapis.com/BUCKET/FILE
    • gsutil URI: gs://BUCKET/FILE
시작 스크립트 확인

웹브라우저에서 외부 IP를 보고 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

API

Cloud Storage에 저장된 시작 스크립트를 새 VM에 전달

다음 instances.insert 메서드를 사용하여 Cloud Storage에 저장된 시작 스크립트를 Windows Server VM에 전달합니다. VM이 Cloud Storage에 액세스할 수 있도록 scopes 필드에 https://www.googleapis.com/auth/devstorage.read_only를 추가합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  ...
  "networkInterfaces": [
    {
      "accessConfigs": [
        {
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "serviceAccounts": [
    {
      "email": "default",
      "scopes": [
        "https://www.googleapis.com/auth/devstorage.read_only"
      ]
    }
  ],
  "metadata": {
    "items": [
      {
        "key": "windows-startup-script-url",
        "value": "CLOUD_STORAGE_URL"
      },
      ...
    ]
  },
  ...
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.

  • ZONE: 새 VM을 만들 영역입니다.

  • CLOUD_STORAGE_URL: 메타데이터 값입니다. 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 Cloud Storage 위치로 설정합니다.

    • 인증된 URL: https://storage.googleapis.com/BUCKET/FILE
    • gsutil URI: gs://BUCKET/FILE

Cloud Storage에 저장된 시작 스크립트를 기존 VM에 전달

  1. instances.get 메서드를 사용하여 VM의 tags.fingerprint 값을 가져옵니다.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID

    • ZONE: VM의 영역

    • VM_NAME: VM의 영역입니다.

  2. instances.setMetadata 메서드 호출에 fingerprint 값을 사용하여 시작 스크립트의 메타데이터 키와 값과 함께 시작 스크립트를 전달합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
      "fingerprint": FINGERPRINT,
      "items": [
        {
            "key": "windows-startup-script-url",
            "value": "CLOUD_STORAGE_URL"
        }
      ],
      ...
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.

    • ZONE: VM의 영역

    • VM_NAME: VM의 영역입니다.

    • FINGERPRINT: instances.get 메서드를 사용하여 가져온 tags.fingerprint 값입니다.

    • CLOUD_STORAGE_URL: 메타데이터 값입니다. 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 Cloud Storage 위치로 설정합니다.

      • 인증된 URL: https://storage.googleapis.com/BUCKET/FILE
      • gsutil URI: gs://BUCKET/FILE

시작 스크립트 확인

웹브라우저에서 외부 IP를 보고 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

Windows 시작 스크립트에서 메타데이터에 액세스

시작 스크립트에서 메타데이터 값에 액세스할 수 있습니다. 예를 들어 여러 VM에 대해 동일한 스크립트를 사용하고 각 VM에 서로 다른 메타데이터 값을 전달하여 각 스크립트를 개별적으로 매개변수화할 수 있습니다.

시작 스크립트에서 커스텀 메타데이터 값에 액세스하려면 다음을 수행합니다.

  1. 메타데이터 키의 값을 쿼리하는 시작 스크립트를 만듭니다. 예를 들어 다음 PowerShell(.ps1) 시작 스크립트는 foo 메타데이터 키의 값을 쿼리합니다.

    $METADATA_VALUE = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'} -Uri "http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo")
    
    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Accessing metadata value of foo: $METADATA_VALUE</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    
  2. 다음 gcloud compute instances create 명령어를 사용하여 VM을 만들 때 foo 메타데이터 키의 값을 설정합니다. 이 예시에서는 시작 스크립트가 로컬 파일에서 VM에 전달됩니다.

    gcloud

    gcloud compute instances create VM_NAME \
      --image-project=windows-cloud \
      --image-family=windows-2019 \
      --metadata-from-file=windows-startup-script-ps1=FILE_PATH \
      --metadata=foo=bar
    

    다음을 바꿉니다.

    • VM_NAME: VM의 이름입니다.

    • FILE_PATH: 시작 스크립트 파일의 상대 경로

    메타데이터 키-값 쌍을 지정하는 방법은 커스텀 메타데이터 설정을 참조하세요.

  3. 웹브라우저에서 외부 IP를 보고 시작 스크립트가 foo의 값을 출력하는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 약 10분 정도 기다려야 할 수 있습니다.

Windows 시작 스크립트 재실행

다음을 수행하여 Windows VM에서 시작 스크립트를 재실행합니다.

  1. VM에 연결합니다.

  2. 다음 명령어를 실행합니다.

    C:\Program Files\Google\Compute Engine\metadata_scripts\run_startup_scripts.cmd
    

Windows 시작 스크립트의 출력 보기

다음을 사용하고 GCEMetadataScripts 이벤트를 확인하여 Windows Server 시작 스크립트의 출력을 확인합니다.

  • Cloud Console의 직렬 포트 1. 자세한 내용은 직렬 포트 출력 보기를 참조하세요.

  • Windows 이벤트 뷰어의 애플리케이션 로그.

  • Windows 워크스테이션의 IAP 데스크톱. 자세한 내용은 GitHub의 GoogleCloudPlatform/iap-desktop 저장소를 참조하세요.

다음 단계