Mengedit jenis mesin instance VM


Jika VM Anda tidak memiliki SSD lokal dan bukan bagian dari grup instance terkelola (MIG), Anda dapat mengubah jenis mesin VM setelah stopping.

Jika jenis mesin yang ada tidak cocok untuk workload yang Anda jalankan pada VM, ubah jenis mesin VM tersebut. Anda dapat mengubah jenis mesin VM untuk menyesuaikan jumlah vCPU dan memori seiring perubahan workload Anda. Misalnya, Anda dapat memulai VM dengan mesin yang lebih kecil selama penyiapan, pengembangan, dan pengujian, serta mengubah VM untuk menggunakan jenis mesin yang lebih besar saat Anda siap untuk workload produksi.

Untuk VM yang tidak memiliki SSD lokal dan bukan bagian dari MIG, Anda dapat mengubah jenis mesin tanpa memengaruhi resource berikut:

  • Kunci SSH VM
  • Konfigurasi VM, seperti metadata VM
  • Data persistent disk VM, termasuk aplikasi terinstal dan data aplikasi

Jika perlu mengubah jenis mesin VM dalam MIG, lihat Menerapkan update konfigurasi VM secara otomatis di MIG.

Sebelum memulai

  • Pahami cara menghentikan VM.
  • Pahami jenis mesin.
  • Siapkan autentikasi, jika Anda belum melakukannya. Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai berikut.

    Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:

    Konsol

    Saat menggunakan Konsol Google Cloud untuk mengakses API dan layanan Google Cloud, Anda tidak perlu menyiapkan autentikasi.

    Java

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

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

      gcloud auth application-default login

    Untuk informasi selengkapnya, lihat Siapkan autentikasi untuk lingkungan pengembangan lokal.

    Python

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

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

      gcloud auth application-default login

    Untuk informasi selengkapnya, lihat Siapkan autentikasi untuk lingkungan pengembangan lokal.

    REST

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

      Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init

Batasan

Implikasi penagihan

Setiap jenis mesin ditagih dengan tarif yang berbeda, jadi pastikan Anda memahami implikasi pricing dari perubahan jenis mesin. Misalnya, jenis mesin e2-standard-2 harganya lebih mahal daripada jenis mesin e2-micro.

Mengubah jenis mesin juga dapat memengaruhi diskon penggunaan berkelanjutan untuk VM tersebut. Diskon untuk penggunaan berkelanjutan dihitung secara terpisah untuk berbagai kategori di wilayah yang sama. Jika Anda mengubah jenis mesin sehingga jenis mesin baru tersebut berada di kategori yang berbeda, waktu operasi VM berikutnya akan dihitung dalam diskon untuk penggunaan berkelanjutan dari kategori yang baru.

Misalnya, Anda memiliki VM dengan jenis mesin n2-standard-2 yang berjalan selama setengah bulan. Kemudian, Anda memutuskan untuk mengubah jenis mesin menjadi m1-ultramem-40. Setelah Anda melakukan perubahan tersebut, Compute Engine akan mulai menghitung waktu berjalan VM terhadap diskon untuk penggunaan berkelanjutan dari kategori memori dan vCPU yang dioptimalkan untuk memori.

Dalam tagihan, Anda akan melihat diskon untuk penggunaan berkelanjutan yang diterapkan ke jenis mesin n2-standard-2 sebelum Anda membuat perubahan jenis mesin, dan diskon untuk penggunaan berkelanjutan yang terpisah untuk m1-ultramem-40, jika VM Anda tetap berjalan di m1-ultramem-40 setidaknya selama 25% dari sisa bulan ini.

Praktik terbaik

Berikut adalah beberapa praktik terbaik untuk membantu Anda agar berhasil mengubah jenis mesin VM.

  • Buat cadangan data persistent disk secara rutin menggunakan snapshot. Sebaiknya ambil snapshot data persistent disk Anda sebelum mengubah jenis mesin. Jika ingin memastikan jenis mesin baru dapat mendukung data pada VM yang ada, Anda dapat mengambil snapshot persistent disk dan menggunakannya untuk memulai VM kedua dengan jenis mesin baru untuk mengonfirmasi bahwa VM berhasil dimulai.

  • Tambahkan persistent disk tambahan ke file /etc/fstab. Jika Anda memiliki persistent disk tambahan yang terpasang ke VM, pastikan persistent disk tersebut ditambahkan ke file /etc/fstab sehingga persistent disk tersebut otomatis dipasang saat VM di-reboot.

  • Buat reservasi sebelum mengubah jenis mesin. Untuk menghindari error terkait ketersediaan resource, buat reservasi Compute Engine untuk jenis mesin baru ketika baru tersedia untuk memesannya dalam suatu zona. Reservasi membantu memastikan bahwa resource tersedia saat Anda memerlukannya.

Untuk melakukan reservasi, selesaikan langkah-langkah berikut:

  1. Buat reservasi (atau identifikasi reservasi yang ada) dengan properti yang identik dengan VM terencana. Jumlah VM reservasi harus sama dengan atau lebih besar dari jumlah VM yang ingin Anda ubah. Secara opsional, untuk mencegah VM lain menggunakan reservasi ini, gunakan opsi specificReservationRequired.

  2. Pastikan VM yang direncanakan akan dapat menggunakan reservasi:

    1. Verifikasi bahwa VM yang diinginkan memiliki afinitas reservasi yang benar.
    2. Segera sebelum mengubah VM, pastikan reservasi memiliki kapasitas yang cukup.

Mengubah jenis mesin

Anda hanya dapat mengubah jenis mesin VM yang dihentikan. VM dianggap berhenti hanya jika VM dalam status TERMINATED. Anda tidak dapat mengubah jenis mesin VM yang berjalan.

Jika Anda mengupgrade jenis mesin ke generasi terbaru, tinjau Memindahkan VM Anda ke rangkaian mesin baru sebelum melanjutkan.

Izin yang diperlukan untuk langkah ini

Untuk melakukan tugas ini, Anda harus memiliki izin berikut:

  • compute.instances.setMachineType di VM

Konsol

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

    Buka instance VM

  2. Di kolom Name, klik nama VM yang ingin Anda ubah jenis mesinnya.

  3. Dari halaman VM instance details, selesaikan langkah-langkah berikut:

    1. Jika VM berjalan, pada menu di bagian atas halaman, pilih Stop untuk menghentikan VM.
    2. Untuk mengedit VM, klik Edit.
    3. Di bagian Machine configuration, pilih jenis mesin yang ingin Anda gunakan, atau buat jenis mesin kustom.

    4. Untuk menyimpan perubahan, klik Save.

    5. Mulai ulang VM.

gcloud

  1. Hentikan VM dengan menggunakan perintah gcloud compute instances stop:

    gcloud compute instances stop VM_NAME
    

    Ganti VM_NAME dengan VM yang berisi jenis mesin yang akan diubah.

  2. Ubah jenis mesin menggunakan perintah gcloud compute instances set-machine-type:

    gcloud compute instances set-machine-type VM_NAME \
        --machine-type NEW_MACHINE_TYPE
    

    Ganti NEW_MACHINE_TYPE dengan jenis mesin baru untuk VM. Jenis mesin dapat berupa salah satu dari berikut:

  3. Mulai VM menggunakan perintah gcloud compute instances start:

    gcloud compute instances start VM_NAME
    

    Ganti VM_NAME dengan nama VM yang Anda ubah.

Java

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di panduan memulai Compute Engine menggunakan library klien. Untuk informasi selengkapnya, lihat dokumentasi referensi API Java Compute Engine.

Untuk melakukan autentikasi ke Compute Engine, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


import com.google.cloud.compute.v1.Instance;
import com.google.cloud.compute.v1.Instance.Status;
import com.google.cloud.compute.v1.InstancesClient;
import com.google.cloud.compute.v1.InstancesSetMachineTypeRequest;
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 ChangeInstanceMachineType {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Cloud project you want to use.
    String projectId = "your-project-id";
    // Name of the zone your instance belongs to.
    String zone = "zone-name";
    // Name of the VM you want to modify.
    String instanceName = "instance-name";
    // The new machine type you want to use for the VM.
    // For example: "e2-standard-8", "e2-custom-4-2048" or "m1-ultramem-40"
    // More about machine types: https://cloud.google.com/compute/docs/machine-resource
    String newMachineType = "e2-standard-8";
    changeMachineType(projectId, zone, instanceName, newMachineType);
  }

  // Changes the machine type of VM.
  // The VM needs to be in the 'TERMINATED' state for this operation to be successful.
  public static void changeMachineType(String projectId, String zone, String instanceName,
      String newMachineType)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `instancesClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (InstancesClient instancesClient = InstancesClient.create()) {

      Instance instance = instancesClient.get(projectId, zone, instanceName);
      if (!instance.getStatus().equals(Status.TERMINATED.name())) {
        throw new Error(String.format(
            "Only machines in TERMINATED state can have their machine type changed. "
                + "%s is in %s state.", instance.getName(), instance.getStatus()));
      }

      InstancesSetMachineTypeRequest machineTypeRequest =
          InstancesSetMachineTypeRequest.newBuilder()
              .setMachineType(String.format("projects/%s/zones/%s/machineTypes/%s",
                  projectId, zone, newMachineType))
              .build();

      Operation response = instancesClient
          .setMachineTypeAsync(projectId, zone, instanceName, machineTypeRequest)
          .get(3, TimeUnit.MINUTES);

      if (response.hasError()) {
        System.out.println("Machine type update failed! " + response);
        return;
      }
      System.out.println("Machine type update - operation status: " + response.getStatus());
    }
  }
}

Python

Python

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di panduan memulai Compute Engine menggunakan library klien. Untuk informasi selengkapnya, lihat dokumentasi referensi API Python Compute Engine.

Untuk melakukan autentikasi ke Compute Engine, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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 change_machine_type(
    project_id: str, zone: str, instance_name: str, new_machine_type: str
) -> None:
    """
    Changes the machine type of VM. The VM needs to be in the 'TERMINATED' state for this operation to be successful.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        zone: name of the zone your instance belongs to.
        instance_name: name of the VM you want to modify.
        new_machine_type: the new machine type you want to use for the VM.
            For example: `e2-standard-8`, `e2-custom-4-2048` or `m1-ultramem-40`
            More about machine types: https://cloud.google.com/compute/docs/machine-resource
    """
    client = compute_v1.InstancesClient()
    instance = client.get(project=project_id, zone=zone, instance=instance_name)

    if instance.status != compute_v1.Instance.Status.TERMINATED.name:
        raise RuntimeError(
            f"Only machines in TERMINATED state can have their machine type changed. "
            f"{instance.name} is in {instance.status}({instance.status_message}) state."
        )

    machine_type = compute_v1.InstancesSetMachineTypeRequest()
    machine_type.machine_type = (
        f"projects/{project_id}/zones/{zone}/machineTypes/{new_machine_type}"
    )
    operation = client.set_machine_type(
        project=project_id,
        zone=zone,
        instance=instance_name,
        instances_set_machine_type_request_resource=machine_type,
    )

    wait_for_extended_operation(operation, "changing machine type")

REST

  1. Hentikan VM dengan menggunakan metode instances.stop:

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

    Ganti kode berikut:

    • PROJECT_ID: ID project

    • ZONE: zona yang berisi VM

    • VM_NAME: VM yang berisi jenis mesin yang akan diubah

  2. Ubah jenis mesin menggunakan metode instances.setMachineType:

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

    Dalam isi permintaan, berikan machineType yang telah diperbarui:

    {
        machineType: "zones/MACHINE_TYPE_ZONE/machineTypes/NEW_MACHINE_TYPE"
    }
    

    Ganti kode berikut:

    • MACHINE_TYPE_ZONE: zona yang berisi jenis mesin

    • NEW_MACHINE_TYPE: jenis mesin baru untuk VM

      Jenis mesin dapat berupa salah satu dari berikut:

  3. Mulai VM menggunakan metode instances.start:

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

    Ganti kode berikut:

    • PROJECT_ID: ID project
    • ZONE: zona yang berisi VM
    • VM_NAME: nama VM yang Anda ubah

Memindahkan ke jenis mesin yang lebih kecil

Jika Anda beralih dari jenis mesin dengan lebih banyak resource ke jenis mesin dengan resource yang lebih sedikit, seperti berpindah dari jenis mesin e2-standard-8 ke e2-standard-2, Anda dapat mengalami masalah resource hardware atau keterbatasan performa karena jenis mesin yang lebih kecil kurang canggih dibandingkan jenis mesin yang lebih besar. Pastikan jenis mesin baru Anda dapat mendukung aplikasi atau layanan apa pun yang sedang berjalan di VM, atau pastikan Anda mengupdate layanan dan aplikasi agar berjalan pada jenis mesin yang lebih kecil.

Tinjau rekomendasi penyesuaian ukuran sebelum mengubah jenis mesin. Untuk mengetahui informasi tentang rekomendasi ukuran Compute Engine, lihat Menerapkan rekomendasi jenis mesin untuk instance VM.

Memindahkan VM Anda ke rangkaian mesin baru

Setelah persyaratan terpenuhi, Anda dapat memodifikasi VM untuk menggunakan jenis mesin dalam rangkaian mesin generasi baru dengan mengubah jenis mesin—misalnya, dari m1-ultramem-160 menjadi m3-ultramem-128.

Jenis mesin generasi baru dan jenis mesin Arm mungkin tidak mendukung fitur dan antarmuka yang sama seperti jenis mesin Anda saat ini. Sebelum memulai proses migrasi, tinjau persyaratan dan pertimbangan dalam Bersiap untuk berpindah ke VM baru.

Untuk mengubah jenis mesin untuk instance VM Anda ke jenis mesin generasi baru, Anda dapat menggunakan salah satu pendekatan berikut.

Membuat instance VM baru dan memindahkan workload Anda

Dalam prosedur ini, Anda akan membuat instance VM baru, lalu memindahkan workload Anda ke VM baru.

Untuk mengetahui detail tentang cara menyelesaikan prosedur ini, lihat Memindahkan beban kerja dari VM yang ada ke VM baru.

Mengubah jenis mesin ke jenis mesin baru

Dalam prosedur ini, Anda memverifikasi bahwa instance VM saat ini dapat diupdate agar menggunakan jenis mesin baru, lalu mengubah jenis mesin tersebut.

  1. Pastikan instance VM Anda saat ini menggunakan versi sistem operasi yang didukung oleh jenis mesin baru. Jika versi tidak didukung, ikuti petunjuk di Memindahkan workload dari VM yang ada ke VM baru.

  2. Jika Anda ingin mengubah jenis mesin untuk VM ke jenis mesin Arm, ikuti petunjuk dalam Memindahkan workload dari VM yang ada ke VM baru.

  3. Jika VM Anda saat ini telah memasang SSD Lokal, ikuti petunjuk dalam artikel Memindahkan workload dari VM yang ada ke VM baru.

  4. Pastikan aplikasi dan program Anda dapat mendukung jaringan atau antarmuka penyimpanan yang berbeda, seperti gVNIC atau NVMe.

  5. Tinjau praktik terbaik untuk mengubah jenis mesin VM.

  6. Ikuti prosedur yang dijelaskan di Mengubah jenis mesin.

Langkah selanjutnya