Menangguhkan atau melanjutkan instance Compute Engine


Dokumen ini menjelaskan cara menangguhkan atau melanjutkan instance Compute Engine. Untuk mempelajari lebih lanjut cara menangguhkan, menghentikan, atau mereset instance, lihat Menangguhkan, menghentikan, atau mereset instance Compute Engine.

Jika ingin mempertahankan instance Compute Engine, tetapi tidak ingin dikenai biaya saat instance tidak digunakan, Anda dapat menangguhkan instance. Menangguhkan instance akan mempertahankan instance dan memigrasikan konten memori instance ke penyimpanan. Setelah melanjutkan instance, Compute Engine akan memigrasikan memori instance dari penyimpanan kembali ke instance, dan instance akan mulai berjalan lagi.

Menangguhkan instance Compute Engine berguna untuk hal berikut:

  • Lingkungan pengembangan dan pengujian yang tidak sepenuhnya digunakan selama periode nonaktif, seperti pada malam hari atau akhir pekan, dan yang ingin Anda pertahankan untuk menghemat biaya atau melakukan inisialisasi lebih cepat daripada membuat instance baru.

  • Aplikasi yang memerlukan periode inisialisasi yang lama setelah instance selesai melakukan booting, tetapi sebelum aplikasi siap melayani permintaan pertamanya, seperti workstation developer virtual atau aplikasi Java yang kompleks.

Sebelum memulai

  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Go

      Untuk menggunakan contoh Go di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

      Java

      Untuk menggunakan contoh Java di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

      Node.js

      Untuk menggunakan contoh Node.js di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

      PHP

      Untuk menggunakan contoh PHP di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

      Python

      Untuk menggunakan contoh Python di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

      REST

      Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Untuk informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan guna menangguhkan atau melanjutkan instance komputasi, minta administrator untuk memberi Anda peran IAM Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) pada instance. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk menangguhkan atau melanjutkan instance komputasi. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk menangguhkan atau melanjutkan instance komputasi:

  • Untuk menangguhkan instance: compute.instances.suspend
  • Untuk melanjutkan instance: compute.instances.resume

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Batasan

Saat menangguhkan instance komputasi, batasan berikut berlaku:

  • Anda hanya dapat menangguhkan instance jika OS tamu mendukungnya. Untuk informasi selengkapnya, lihat Detail sistem operasi.

  • Anda hanya dapat menangguhkan instance yang menggunakan Debian 8 atau 9 sebagai OS tamu jika Anda mengonfigurasi OS sebelum menangguhkan VM.

  • Anda hanya dapat menangguhkan instance hingga 60 hari sebelum Compute Engine otomatis mengalihkan statusnya ke TERMINATED.

  • Anda dapat menangguhkan Spot VM atau instance preemptible, tetapi jika Compute Engine melakukan preempt terhadap instance sebelum operasi penangguhan selesai, Compute Engine akan mengakhiri operasi penangguhan dan melakukan preempt terhadap instance.

  • Anda tidak dapat menangguhkan instance dengan GPU terpasang.

  • Anda tidak dapat menangguhkan instance bare metal.

  • Anda tidak dapat menangguhkan Confidential VM.

  • Anda tidak dapat menangguhkan instance menggunakan proses standar yang di-build ke dalam lingkungan tamu. Perintah seperti systemctl suspend di Ubuntu 16.04 atau yang lebih baru, tidak didukung. Jika dipanggil, Compute Engine akan mengabaikan sinyal dalam tamu.

  • Anda tidak dapat menangguhkan instance dengan memori lebih dari 208 GB.

  • Anda tidak dapat menangguhkan instance yang memiliki disk yang dilindungi dengan CSEK.

Mengaktifkan operasi penangguhan di Debian 8 atau 9

Jika instance komputasi menjalankan Debian 8 dan 9 sebagai OS tamunya, sebelum menangguhkan instance, Anda harus mengaktifkan operasi penangguhan dan melanjutkan dengan melakukan salah satu tindakan berikut:

Mengonfigurasi ACPID

Untuk mengaktifkan operasi penangguhan dan melanjutkan di Debian 8 atau 9, Anda dapat mengonfigurasi Daemon peristiwa Konfigurasi Lanjutan dan Antarmuka Daya (ACPID) untuk menangani peristiwa tombol tidur. Setelah mengaktifkan peristiwa tombol deep sleep, Anda dapat menambahkan skrip shell untuk menangani peristiwa sleep seperti yang dijelaskan di bagian ini.

Untuk mengonfigurasi ACPID guna mendukung operasi penangguhan dan kelanjutan, lakukan hal berikut:

  1. Jika belum, hubungkan ke instance Linux Anda.

  2. Buat folder events di folder acpi:

    sudo mkdir -p /etc/acpi/events/
    
  3. Konfigurasikan ACPID untuk menangani peristiwa tombol tidur:

    cat <<EOF | sudo tee /etc/acpi/events/sleepbtn-acpi-support
    event=button[ /]sleep
    action=/etc/acpi/sleepbtn-acpi-support.sh
    EOF
    
  4. Buat skrip penanganan peristiwa tidur:

    cat <<EOF | sudo tee /etc/acpi/sleepbtn-acpi-support.sh
    #!/bin/sh
    echo mem > /sys/power/state
    EOF
    
  5. Siapkan izin untuk skrip:

    sudo chmod 755 /etc/acpi/sleepbtn-acpi-support.sh
    
  6. Agar perubahan diterapkan, mulai ulang ACPID:

    sudo systemctl restart acpid.service
    

Menginstal D-Bus

Untuk mengaktifkan operasi penangguhan dan kelanjutan di Debian 8 atau 9, Anda dapat menginstal D-Bus.

Untuk menginstal D-Bus di OS tamu instance komputasi saat OS menggunakan Debian 8 atau 9, lakukan tindakan berikut:

  1. Jika belum, hubungkan ke instance Linux Anda.

  2. Instal D-Bus:

    sudo apt-get install dbus
    
  3. Agar perubahan diterapkan, mulai ulang logind:

    sudo systemctl restart systemd-logind.service
    

Menangguhkan instance

Jika OS tamu instance komputasi Anda menggunakan Debian 8 atau 9, sebelum menangguhkan instance, Anda harus mengonfigurasi OS tamu untuk mendukung operasi penangguhan dan melanjutkan seperti yang dijelaskan dalam dokumen ini.

Untuk menangguhkan instance, gunakan metode berikut berdasarkan apakah instance memiliki disk SSD Lokal yang terpasang:

Menangguhkan instance tanpa disk SSD Lokal

Anda dapat menangguhkan beberapa instance komputasi secara bersamaan atau instance individual. Untuk beberapa instance, gunakan konsol Google Cloud atau, untuk instance yang berada di zona yang sama, Google Cloud CLI. Untuk setiap instance, pilih salah satu opsi berikut:

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka instance VM

  2. Pilih satu atau beberapa instance yang akan ditangguhkan.

  3. Klik Tangguhkan, lalu klik Tangguhkan untuk mengonfirmasi.

gcloud

Untuk menangguhkan satu atau beberapa instance dalam satu zona, gunakan perintah gcloud compute instances suspend:

gcloud compute instances suspend INSTANCE_NAMES \
    --zone=ZONE

Ganti kode berikut:

  • INSTANCE_NAMES: daftar nama instance yang dipisahkan spasi—misalnya, instance-01 instance-02 instance-03.

  • ZONE: zona tempat instance berada.

Go

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
)

// suspendInstance suspends a running Google Compute Engine instance.
func suspendInstance(w io.Writer, projectID, zone, instanceName string) error {
	// projectID := "your_project_id"
	// zone := "europe-central2-b"
	// instanceName := "your_instance_name"

	ctx := context.Background()
	instancesClient, err := compute.NewInstancesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewInstancesRESTClient: %w", err)
	}
	defer instancesClient.Close()

	req := &computepb.SuspendInstanceRequest{
		Project:  projectID,
		Zone:     zone,
		Instance: instanceName,
	}

	op, err := instancesClient.Suspend(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to suspend instance: %w", err)
	}

	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Instance suspended\n")

	return nil
}

Java


import com.google.cloud.compute.v1.Instance.Status;
import com.google.cloud.compute.v1.InstancesClient;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class SuspendInstance {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // project: project ID or project number of the Cloud project your instance belongs to.
    // zone: name of the zone your instance belongs to.
    // instanceName: name of the instance your want to suspend.

    String project = "your-project-id";
    String zone = "zone-name";
    String instanceName = "instance-name";

    suspendInstance(project, zone, instanceName);
  }

  // Suspend a running Google Compute Engine instance.
  // For limitations and compatibility on which instances can be suspended,
  // see: https://cloud.google.com/compute/docs/instances/suspend-resume-instance#limitations
  public static void suspendInstance(String project, String zone, String instanceName)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Instantiates a client.
    try (InstancesClient instancesClient = InstancesClient.create()) {

      Operation operation = instancesClient.suspendAsync(project, zone, instanceName)
          .get(300, TimeUnit.SECONDS);

      if (operation.hasError() || !instancesClient.get(project, zone, instanceName).getStatus()
          .equalsIgnoreCase(Status.SUSPENDED.toString())) {
        System.out.println("Cannot suspend instance. Try again!");
        return;
      }

      System.out.printf("Instance suspended successfully ! %s", instanceName);
    }
  }
}

Node.js

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const zone = 'europe-central2-b';
// const instanceName = 'YOUR_INSTANCE_NAME';

const compute = require('@google-cloud/compute');

// Suspends a running Google Compute Engine instance.
async function suspendInstance() {
  const instancesClient = new compute.InstancesClient();

  const [response] = await instancesClient.suspend({
    project: projectId,
    zone,
    instance: instanceName,
  });
  let operation = response.latestResponse;
  const operationsClient = new compute.ZoneOperationsClient();

  // Wait for the create operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await operationsClient.wait({
      operation: operation.name,
      project: projectId,
      zone: operation.zone.split('/').pop(),
    });
  }

  console.log('Instance suspended.');
}

suspendInstance();

PHP

use Google\Cloud\Compute\V1\Client\InstancesClient;
use Google\Cloud\Compute\V1\SuspendInstanceRequest;

/**
 * Suspend a running Google Compute Engine instance.
 *
 * @param string $projectId Project ID or project number of the Cloud project your instance belongs to.
 * @param string $zone Name of the zone your instance belongs to.
 * @param string $instanceName Name of the instance you want to suspend.
  *
 * @throws \Google\ApiCore\ApiException if the remote call fails.
 * @throws \Google\ApiCore\ValidationException if local error occurs before remote call.
 */
function suspend_instance(
    string $projectId,
    string $zone,
    string $instanceName
) {
    // Suspend the running Compute Engine instance using InstancesClient.
    $instancesClient = new InstancesClient();
    $request = (new SuspendInstanceRequest())
        ->setInstance($instanceName)
        ->setProject($projectId)
        ->setZone($zone);
    $operation = $instancesClient->suspend($request);

    // Wait for the operation to complete.
    $operation->pollUntilComplete();
    if ($operation->operationSucceeded()) {
        printf('Instance %s suspended successfully' . PHP_EOL, $instanceName);
    } else {
        $error = $operation->getError();
        printf('Failed to suspend instance: %s' . PHP_EOL, $error?->getMessage());
    }
}

Python

from __future__ import annotations

import sys
from typing import Any

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def suspend_instance(project_id: str, zone: str, instance_name: str) -> None:
    """
    Suspend a running Google Compute Engine instance.
    Args:
        project_id: project ID or project number of the Cloud project your instance belongs to.
        zone: name of the zone your instance belongs to.
        instance_name: name of the instance you want to suspend.
    """
    instance_client = compute_v1.InstancesClient()

    operation = instance_client.suspend(
        project=project_id, zone=zone, instance=instance_name
    )

    wait_for_extended_operation(operation, "suspend instance")

REST

Untuk menangguhkan instance, buat permintaan POST ke metode instances.suspend:

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

Ganti kode berikut:

  • PROJECT_ID: ID project tempat instance berada.

  • ZONE: zona tempat instance berada.

  • INSTANCE_NAME: nama instance.

Menangguhkan instance dengan disk SSD Lokal

Berdasarkan jumlah instance komputasi yang ingin Anda tunda secara bersamaan dan apakah Anda perlu mempertahankan data disk SSD Lokal yang terpasang, lakukan hal berikut:

  • Untuk mempertahankan data disk SSD Lokal yang terpasang ke instance, tunda instance menggunakan gcloud CLI atau REST API.

  • Untuk menangguhkan beberapa instance secara bersamaan, gunakan konsol Google Cloud atau, untuk instance yang berada di zona yang sama, gcloud CLI.

Untuk menangguhkan satu atau beberapa instance yang memiliki disk SSD Lokal terpasang, pilih salah satu opsi berikut:

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka instance VM

  2. Pilih satu atau beberapa instance yang akan ditangguhkan.

  3. Klik Tangguhkan, lalu klik Tangguhkan untuk mengonfirmasi.

gcloud

Saat menangguhkan satu atau beberapa instance di satu zona yang memiliki disk SSD Lokal yang terpasang, tentukan apakah akan menghapus atau mempertahankan data SSD Lokal sebagai berikut:

  • Untuk menghapus data SSD Lokal, gunakan perintah gcloud compute instances suspend dengan flag --discard-local-ssd=true:

    gcloud compute instances suspend INSTANCE_NAMES \
        --discard-local-ssd=true \
        --zone=ZONE
    
  • Untuk mempertahankan data SSD Lokal, gunakan perintah gcloud beta compute instances suspend dengan flag --discard-local-ssd=false:

    gcloud beta compute instances suspend INSTANCE_NAMES \
        --discard-local-ssd=false \
        --zone=ZONE
    

Ganti kode berikut:

  • INSTANCE_NAMES: daftar nama instance yang dipisahkan spasi—misalnya, instance-01 instance-02 instance-03.

  • ZONE: zona tempat instance berada.

REST

Saat menangguhkan instance yang memiliki disk SSD Lokal yang terpasang, tentukan apakah akan menghapus atau mempertahankan data SSD Lokal sebagai berikut:

  • Untuk menghapus data SSD Lokal, buat permintaan POST ke metode instances.suspend. Di URL permintaan, sertakan parameter kueri discardLocalSsd yang ditetapkan ke true:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/suspend?discardLocalSsd=true
    
  • Untuk mempertahankan data SSD Lokal, buat permintaan POST ke metode beta.instances.suspend. Di URL permintaan, sertakan parameter kueri discardLocalSsd yang ditetapkan ke false:

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/suspend?discardLocalSsd=false
    

Ganti kode berikut:

  • PROJECT_ID: ID project tempat instance berada.

  • ZONE: zona tempat instance berada.

  • INSTANCE_NAME: nama instance.

Melanjutkan instance yang ditangguhkan

Sebelum melanjutkan instance komputasi yang ditangguhkan, pertimbangkan hal berikut:

  • Anda hanya dapat melanjutkan instance jika ada kapasitas yang memadai di zona tempat instance berada. Hal ini biasanya tidak menjadi masalah. Jika Anda mengalami masalah saat melanjutkan instance, coba lagi nanti.

  • Jika Anda memasang disk SSD Lokal ke instance dan memilih untuk mempertahankan data SSD Lokal saat menangguhkan instance, Anda mungkin perlu memasang ulang disk SSD Lokal setelah melanjutkannya. Untuk informasi selengkapnya, lihat cara memasang ulang non-boot disk di instance Linux atau instance Windows.

Anda dapat melanjutkan beberapa instance secara bersamaan atau setiap instance. Untuk beberapa instance, gunakan konsol Google Cloud atau, untuk instance yang berada di zona yang sama, gunakan gcloud CLI. Untuk setiap instance, pilih salah satu opsi berikut:

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka instance VM

  2. Pilih satu atau beberapa instance yang ditangguhkan untuk dilanjutkan.

  3. Klik Start / Resume, lalu klik Start.

gcloud

Untuk melanjutkan satu atau beberapa instance yang ditangguhkan di satu zona, gunakan perintah gcloud compute instances resume:

gcloud compute instances resume INSTANCE_NAMES \
    --zone=ZONE

Ganti kode berikut:

  • INSTANCE_NAMES: daftar nama instance yang dipisahkan spasi—misalnya, instance-01 instance-02 instance-03.

  • ZONE: zona tempat instance yang ditangguhkan berada.

Go

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
)

// resumeInstance resumes a suspended Google Compute Engine instance
// (with unencrypted disks).
func resumeInstance(w io.Writer, projectID, zone, instanceName string) error {
	// projectID := "your_project_id"
	// zone := "europe-central2-b"
	// instanceName := "your_instance_name"

	ctx := context.Background()
	instancesClient, err := compute.NewInstancesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewInstancesRESTClient: %w", err)
	}
	defer instancesClient.Close()

	getInstanceReq := &computepb.GetInstanceRequest{
		Project:  projectID,
		Zone:     zone,
		Instance: instanceName,
	}

	instance, err := instancesClient.Get(ctx, getInstanceReq)
	if err != nil {
		return fmt.Errorf("unable to get instance: %w", err)
	}

	if instance.GetStatus() != "SUSPENDED" {
		return fmt.Errorf(
			"only suspended instances can be resumed, instance %s is in %s state",
			instanceName,
			instance.GetStatus(),
		)
	}

	resumeInstanceReq := &computepb.ResumeInstanceRequest{
		Project:  projectID,
		Zone:     zone,
		Instance: instanceName,
	}

	op, err := instancesClient.Resume(ctx, resumeInstanceReq)
	if err != nil {
		return fmt.Errorf("unable to resume instance: %w", err)
	}

	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Instance resumed\n")

	return nil
}

Java


import com.google.cloud.compute.v1.Instance.Status;
import com.google.cloud.compute.v1.InstancesClient;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class ResumeInstance {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // project: project ID or project number of the Cloud project your instance belongs to.
    // zone: name of the zone your instance belongs to.
    // instanceName: name of the instance your want to resume.

    String project = "your-project-id";
    String zone = "zone-name";
    String instanceName = "instance-name";

    resumeInstance(project, zone, instanceName);
  }

  // Resume a suspended Google Compute Engine instance (with unencrypted disks).
  // Instance state changes to RUNNING, if successfully resumed.
  public static void resumeInstance(String project, String zone, String instanceName)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Instantiates a client.
    try (InstancesClient instancesClient = InstancesClient.create()) {

      String currentInstanceState = instancesClient.get(project, zone, instanceName).getStatus();

      // Check if the instance is currently suspended.
      if (!currentInstanceState.equalsIgnoreCase(Status.SUSPENDED.toString())) {
        throw new RuntimeException(
            String.format("Only suspended instances can be resumed. Instance %s is in %s state.",
                instanceName, currentInstanceState));
      }

      Operation operation = instancesClient.resumeAsync(project, zone, instanceName)
          .get(300, TimeUnit.SECONDS);

      if (operation.hasError() || !instancesClient.get(project, zone, instanceName).getStatus()
          .equalsIgnoreCase(
              Status.RUNNING.toString())) {
        System.out.println("Cannot resume instance. Try again!");
        return;
      }

      System.out.printf("Instance resumed successfully ! %s", instanceName);
    }
  }
}

Node.js

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const zone = 'europe-central2-b';
// const instanceName = 'YOUR_INSTANCE_NAME';

const compute = require('@google-cloud/compute');

// Resumes a suspended Google Compute Engine instance (with unencrypted disks).
async function resumeInstance() {
  const instancesClient = new compute.InstancesClient();

  const [instance] = await instancesClient.get({
    project: projectId,
    zone,
    instance: instanceName,
  });

  if (instance.status !== 'SUSPENDED') {
    throw new Error(
      'Only suspended instances can be resumed.' +
        `Instance ${instanceName} is in ${instance.status} state.`
    );
  }

  const [response] = await instancesClient.resume({
    project: projectId,
    zone,
    instance: instanceName,
  });
  let operation = response.latestResponse;
  const operationsClient = new compute.ZoneOperationsClient();

  // Wait for the create operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await operationsClient.wait({
      operation: operation.name,
      project: projectId,
      zone: operation.zone.split('/').pop(),
    });
  }

  console.log('Instance resumed.');
}

resumeInstance();

PHP

use Google\Cloud\Compute\V1\Client\InstancesClient;
use Google\Cloud\Compute\V1\ResumeInstanceRequest;

/**
 * Resume a suspended Google Compute Engine instance (with unencrypted disks).
 *
 * @param string $projectId Project ID or project number of the Cloud project your instance belongs to.
 * @param string $zone Name of the zone your instance belongs to.
 * @param string $instanceName Name of the instance you want to resume.
  *
 * @throws \Google\ApiCore\ApiException if the remote call fails.
 * @throws \Google\ApiCore\ValidationException if local error occurs before remote call.
 */
function resume_instance(
    string $projectId,
    string $zone,
    string $instanceName
) {
    // Resume the suspended Compute Engine instance using InstancesClient.
    $instancesClient = new InstancesClient();
    $request = (new ResumeInstanceRequest())
        ->setInstance($instanceName)
        ->setProject($projectId)
        ->setZone($zone);
    $operation = $instancesClient->resume($request);

    // Wait for the operation to complete.
    $operation->pollUntilComplete();
    if ($operation->operationSucceeded()) {
        printf('Instance %s resumed successfully' . PHP_EOL, $instanceName);
    } else {
        $error = $operation->getError();
        printf('Failed to resume instance: %s' . PHP_EOL, $error?->getMessage());
    }
}

Python

from __future__ import annotations

import sys
from typing import Any

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def resume_instance(project_id: str, zone: str, instance_name: str) -> None:
    """
    Resume a suspended Google Compute Engine instance (with unencrypted disks).
    Args:
        project_id: project ID or project number of the Cloud project your instance belongs to.
        zone: name of the zone your instance belongs to.
        instance_name: name of the instance you want to resume.
    """
    instance_client = compute_v1.InstancesClient()

    instance = instance_client.get(
        project=project_id, zone=zone, instance=instance_name
    )
    if instance.status != compute_v1.Instance.Status.SUSPENDED.name:
        raise RuntimeError(
            f"Only suspended instances can be resumed. "
            f"Instance {instance_name} is in {instance.status} state."
        )

    operation = instance_client.resume(
        project=project_id, zone=zone, instance=instance_name
    )

    wait_for_extended_operation(operation, "instance resumption")

REST

Untuk melanjutkan instance yang ditangguhkan, buat permintaan POST ke metode instances.resume:

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

Ganti kode berikut:

  • INSTANCE_NAME: nama instance yang ditangguhkan untuk dilanjutkan.

  • PROJECT_ID: ID project tempat instance yang ditangguhkan berada.

  • ZONE: zona tempat instance yang ditangguhkan berada.

Langkah selanjutnya