종료 스크립트 실행


가상 머신(VM) 인스턴스가 중지되거나 다시 시작되기 바로 전에 명령어를 실행하는 종료 스크립트를 만들고 실행합니다. 이는 인스턴스를 시작하고 종료할 때 자동화 스크립트에 의존하는 경우에 유용합니다. 인스턴스가 로그를 내보내거나 다른 시스템과 동기화하는 등의 작업을 정리하거나 수행하는 시간을 확보할 수 있기 때문입니다.

종료 스크립트는 자동 확장 처리가 적용된 관리형 인스턴스 그룹에 있는 VM에 특히 유용합니다. 자동 확장 처리가 그룹 내의 VM을 종료하면 VM이 중지되기 전에 종료 스크립트가 실행되어 종료 스크립트가 사용자가 정의하는 모든 작업을 수행합니다. 종료 스크립트는 VM이 중지되기 전 제한된 종료 시간 동안 실행됩니다. 예를 들어 종료 스크립트는 처리된 데이터를 Cloud Storage로 복사하거나 로그를 백업할 수 있습니다.

종료 스크립트는 시작 스크립트와 매우 유사하게 작동합니다. 시작 스크립트 문서 상당수는 종료 스크립트에도 적용됩니다.

종료 및 재부팅 작업 모두 VM은 항상 스크립트를 다음과 같이 종료합니다.

  • Linux VM의 경우 root 사용자를 사용합니다.
  • Windows VM의 경우 System 계정을 사용합니다.

시작하기 전에

  • 시작 스크립트에 대해 알아봅니다.
  • 메타데이터 서버에 대해 이해합니다.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    Google Cloud 콘솔을 사용하여 Google Cloud 서비스 및 API에 액세스할 때는 인증을 설정할 필요가 없습니다.

    gcloud

    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init
    2. 기본 리전 및 영역을 설정합니다.

    Terraform

    로컬 개발 환경에서 이 페이지의 Terraform 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Google Cloud CLI를 설치합니다.
    2. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

      gcloud init
    3. Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login

    자세한 내용은 로컬 개발 환경의 인증 설정를 참조하세요.

    REST

    로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

      Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init

이 태스크에 필요한 권한

이 작업을 수행하려면 다음과 같은 권한이 있어야 합니다.

  • 인스턴스를 생성하는 데 필요한 모든 권한
  • 인스턴스에 대한 compute.instances.setMetadata 권한

사양

제한사항

종료 스크립트를 사용할 때 유의해야 하는 몇 가지 제한사항이 있습니다.

  • 종료 스크립트는 인스턴스가 중지되기 전에 제한된 시간 안에 실행을 마쳐야 합니다.
    • 온디맨드 인스턴스: 인스턴스를 중지 또는 삭제한 후 90초
    • 선점형 인스턴스: 인스턴스 선점이 시작된 후 30초
  • Compute Engine은 최선의 노력을 다한 후에만 종료 스크립트를 실행합니다. 드문 경우지만 Compute Engine이 종료 스크립트의 완료를 보장할 수 없을 때도 있습니다.
  • Windows에서는 종료 스크립트를 시작하는 데 로컬 그룹 정책을 사용합니다.
    • 설치 패키지는 시스템 종료 시 스크립트를 시작하도록 로컬 그룹 정책 Computer Configuration/Windows Setting/Scripts (Startup/Shutdown) 설정을 구성합니다.

종료 스크립트 호출

종료 스크립트는 다시 시작 또는 중지와 같은 특정 고급 구성 및 전원 인터페이스(ACPI) 이벤트에 의해 트리거됩니다. 인스턴스를 다시 시작하거나 중지하는 방법은 많지만 종료 스크립트가 실행되도록 트리거하는 방법은 몇 가지 밖에 없습니다. 종료 스크립트는 다음 작업의 일부로 실행됩니다.

  • API에 대한 instances.delete 요청 또는 instances.stop 요청으로 인해 인스턴스가 종료될 때
  • Compute Engine이 선점 프로세스 중에 선점형 인스턴스를 중지할 때
  • sudo shutdown 또는 sudo reboot와 같은 게스트 운영체제에 대한 요청을 통해 인스턴스가 종료될 때
  • Google Cloud 콘솔 또는 gcloud compute 도구를 통해 수동으로 인스턴스를 종료할 때

인스턴스가 instances().reset을 사용하여 재설정되면 종료 스크립트가 실행되지 않습니다.

종료 스크립트에는 파일 형식 제한이 없습니다. 종료 스크립트가 존재하면 Compute Engine이 다음 작업을 수행합니다.

  1. 스크립트를 인스턴스의 로컬 파일로 복사합니다.
  2. 실행할 수 있도록 파일의 권한을 설정합니다.
  3. 인스턴스가 중지되면 파일을 실행합니다.

예를 들어 bash 스크립트 대신 Python 스크립트를 제공할 수 있습니다. Compute Engine에서는 스크립트 유형에 상관없이 스크립트를 그대로 실행합니다.

bash가 아닌 스크립트를 실행하려면 운영체제에서 사용할 인터프리터를 알 수 있도록 파일 맨 위에 shebang 줄을 추가합니다. 예를 들어 Python 스크립트의 경우 다음과 같은 shebang 줄을 추가할 수 있습니다.

#!/usr/bin/python

종료 스크립트 실행 시간

종료 스크립트는 인스턴스가 종료되거나 다시 시작되기 전에 한정된 시간 동안 실행될 수 있습니다. 이 기간 동안 Compute Engine은 종료 스크립트를 실행하려 합니다. 스크립트가 완료되는 데 이 시간보다 오래 걸리면 인스턴스가 자동으로 중지되고 실행 중인 모든 작업이 종료됩니다. sudo shutdown 명령어로 게스트 운영체제에 요청을 수행하여 인스턴스를 종료하거나 다시 시작할 경우에는 이 제한이 적용되지 않습니다.

종료 시간 길이는 인스턴스 유형에 따라 다릅니다. 선점형 인스턴스의 종료 시간은 일반 인스턴스보다 짧습니다. 각 인스턴스 유형의 종료 시간 제한에 대한 자세한 내용은 종료 시간을 참조하세요.

일반적으로 운영체제에서 종료 프로세스를 완료하고 디스크에 버퍼를 플러시할 시간을 확보할 수 있도록 종료·스크립트가 종료 시간 내에 실행을 완료해야 합니다.

로컬 종료 스크립트 사용

로컬 종료 스크립트는 로컬 컴퓨터에서 작동하는 스크립트입니다. 로컬 종료 스크립트를 파일로 전달하거나 Compute Engine에 직접 콘텐츠를 제공하여 전달합니다.

종료 스크립트는 다양한 작업을 필요한 만큼 수행할 수 있지만 파일을 로컬에서 전달할 경우 스크립트는 메타데이터 값 길이 제한(256KB)을 초과할 수 없습니다. 이 길이 제한을 초과하는 스크립트를 사용하려면 파일을 Cloud Storage에 저장해야 합니다. 자세한 내용은 Cloud Storage에서 종료 스크립트 사용을 참조하세요.

종료 스크립트 파일 제공

gcloud 명령줄 도구를 통해서만 로컬 종료 스크립트 파일을 전달할 수 있습니다.

gcloud

로컬 종료 스크립트 파일을 전달하려면 --metadata-from-file 플래그 다음에 메타데이터 키 쌍인 shutdown-script=PATH/TO/FILE을 지정합니다. 여기서 PATH/TO/FILE은 종료 스크립트의 상대 경로입니다. 예를 들면 다음과 같습니다.

gcloud compute instances create example-instance \
    --metadata-from-file shutdown-script=examples/scripts/install.sh

Terraform

종료 스크립트를 직접 지정하려면 메타데이터의 종료 스크립트 경로와 함께 google_compute_instance 리소스를 사용합니다.

resource "google_compute_instance" "shutdown_content_from_file" {
  name         = "instance-name-shutdown-content-from-file"
  machine_type = "f1-micro"
  zone         = "us-central1-c"
  metadata = {
    # Shuts down Apache server
    shutdown-script = file("${path.module}/shutdown-script.sh")
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  network_interface {
    # A default network is created for all Google Cloud projects
    network = "default"
    access_config {
    }
  }
}

종료 스크립트 콘텐츠 직접 제공

또는 종료 스크립트의 콘텐츠를 직접 전달할 수도 있습니다.

Console

Google Cloud 콘솔에서 shutdown-script 메타데이터 키를 사용하여 종료 스크립트를 직접 지정합니다.

  1. 인스턴스 만들기 페이지로 이동

    인스턴스 만들기로 이동

  2. VM 세부정보를 지정합니다.

  3. 고급 옵션 섹션을 펼칩니다.

  4. 관리를 펼치고 다음을 수행합니다.

    1. 메타데이터 섹션에서 항목 추가를 클릭합니다.
    2. 필드에서 메타데이터 키에 shutdown-script를 입력합니다.
    3. 필드에 종료 스크립트 콘텐츠를 추가합니다.
  5. VM 만들기 프로세스를 계속 진행합니다.

gcloud

Google Cloud CLI를 사용할 경우 --metadata 플래그를 사용하여 종료 스크립트 콘텐츠를 제공한 후 shutdown-script=CONTENTS 키 쌍을 지정합니다. 여기서 CONTENTS는 종료 스크립트 콘텐츠입니다.

gcloud compute instances create example-instance --metadata shutdown-script="#! /bin/bash
> # Shuts down Apache server
> /etc/init.d/apache2 stop"

Terraform

종료 스크립트를 직접 지정하려면 메타데이터의 종료 스크립트와 함께 google_compute_instance 리소스를 사용합니다.

resource "google_compute_instance" "default" {
  name         = "instance-name-shutdown-content-directly"
  machine_type = "f1-micro"
  zone         = "us-central1-c"
  metadata = {
    # Shuts down Apache server
    shutdown-script = "#! /bin/bash /etc/init.d/apache2 stop"
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  network_interface {
    # A default network is created for all Google Cloud projects
    network = "default"
    access_config {
    }
  }
}

REST

API에서는 인스턴스를 만들 때 요청에 있는 메타데이터 속성의 일부로 종료 스크립트를 제공합니다. 메타데이터 키로 shutdown-script를 사용합니다.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances

{...
  "metadata": {
    "items": [
      {
       "key": "shutdown-script",
       "value": "#! /bin/bash\n\n# Shuts down Apache server\n/etc/init.d/apache2 stop"
      }
    ]
  }...
}

Windows 인스턴스에서 종료 스크립트 제공

다음과 같은 Windows 고유의 메타데이터 키를 사용하여 Windows 인스턴스에서 종료 스크립트를 실행합니다. 아래 나열된 특수한 키 중 하나를 선택하세요. 각각의 키는 실행할 스크립트 유형과 일치해야 합니다.

인스턴스에 다양한 키를 전달하여 여러 개의 종료 스크립트를 지정할 수 있으나 각 키는 가상 머신당 한 번만 지정할 수 있습니다.

위와 동일한 안내를 따라 로컬 종료 스크립트에 다음과 같은 키를 사용할 수 있습니다.

cmd 종료 스크립트 bat 종료 스크립트 ps1 종료 스크립트
windows-shutdown-script-cmd windows-shutdown-script-bat windows-shutdown-script-ps1

Cloud Storage에서 종료 스크립트 사용

Cloud Storage에서 종료 스크립트를 저장하고 사용할 수 있습니다. 시작 스크립트 문서의 안내를 따르고 startup-script-urlshutdown-script-url로 바꿉니다.

Windows 인스턴스의 경우 windows-startup-script-urlwindows-shutdown-script-url로 바꿉니다.

실행 중인 인스턴스에 종료 스크립트 적용

실행 중인 인스턴스에 종료 스크립트를 추가하려면 실행 중인 인스턴스에 시작 스크립트 적용 문서의 안내를 따르고 메타데이터 키를 다음 키 중 하나로 바꿉니다.

  • shutdown-script: 이 키로 종료 스크립트 콘텐츠를 직접 제공합니다. Google Cloud CLI를 사용할 경우 --metadata-from-file 플래그와 shutdown-script 메타데이터 키를 사용하여 종료 스크립트 파일의 경로를 제공할 수 있습니다.
  • shutdown-script-url: 이 키로 종료 스크립트 파일의 Cloud Storage URL을 제공합니다.

종료 스크립트의 출력 보기

Linux

다음 중 하나를 수행하여 Linux 종료 스크립트의 출력을 볼 수 있습니다.

Windows

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

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

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

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