Mengupdate Deployment

Setelah membuat deployment, Anda dapat memperbaruinya saat aplikasi atau layanan Anda berubah. Anda dapat menggunakan Deployment Manager untuk mengupdate deployment dengan:

  • Menambahkan atau menghapus resource dari deployment.
  • Memperbarui properti resource yang ada dalam deployment.

Satu update dapat berisi kombinasi perubahan ini. Misalnya, Anda dapat membuat perubahan pada properti resource yang ada dan menambahkan resource baru dalam permintaan yang sama. Anda memperbarui deployment dengan mengikuti langkah-langkah berikut:

  1. Buat perubahan pada atau buat file konfigurasi dengan perubahan yang Anda inginkan.
  2. Jika ingin, pilih kebijakan yang akan digunakan untuk update atau gunakan kebijakan default.
  3. Buat permintaan update ke Deployment Manager.

Sebelum memulai

Menyiapkan update

Sebelum mengupdate deployment, gunakan panduan ini untuk menyiapkan update:

  • Jika Anda memperbarui deployment untuk menambahkan resource baru ke project, periksa apakah resource sudah ada.

    Secara default, jika resource yang ingin Anda tambahkan sudah ada di project Anda, resource tersebut akan diperoleh oleh deployment, tanpa membuat resource baru. Jika Anda tidak ingin mendapatkan resource yang ada, Anda harus mengubah kebijakan yang akan digunakan untuk update.

    Untuk mengetahui informasi tentang kebijakan yang dapat Anda gunakan saat memperbarui deployment, lihat Kebijakan untuk menambahkan resource.

  • Jika Anda mengupdate deployment untuk mengganti resource, periksa dependensinya

    Jika ingin mengganti resource dari deployment, Anda harus memastikan terlebih dahulu bahwa menghapusnya tidak menyebabkan siklus deployment. Siklus deployment terjadi saat resource bergantung pada dirinya sendiri, baik secara langsung maupun tidak langsung. Misalnya, pertimbangkan deployment berikut:

    resources:
    - name: vm-a
      properties:
        zone: us-central1-f
        ...
        metadata:
          dependsOn:
          - vm-depends-on
    
    # The second VM
    - name: vm-depends-on
      properties:
        zone: $(ref.vm-a.zone)
        ...
    

    Dalam deployment ini, untuk vm-a, pernyataan dependsOn mengharuskan vm-depends-on dibuat sebelum vm-a. Namun, vm-depends-on menggunakan referensi ke zona untuk vm-a, yang mengharuskan vm-a dibuat sebelum vm-depends-on. Dalam skenario seperti itu, dependensi berada dalam loop, dan deployment gagal.

    Jika Anda memiliki resource yang bergantung pada dan bergantung pada resource lain, mengganti resource tersebut dapat menyebabkan siklus deployment.

    Misalnya, pertimbangkan deployment yang memiliki persistent disk bernama disk-a, VM bernama vm-a, dan grup instance bernama ig-a. Konfigurasi untuk vm-a mencakup referensi ke disk-a, dan konfigurasi untuk ig-a mencakup referensi ke vm-a. Dalam konfigurasi yang diperbarui, Anda ingin menghapus vm-a dan menggantinya dengan vm-b. Dalam skenario tersebut, menyelesaikan dependensi untuk vm-a dan vm-b dapat menyebabkan siklus deployment, dan deployment Anda gagal.

    Untuk menghindari siklus deployment saat Anda ingin mengganti resource dalam rantai dependensi, lakukan salah satu hal berikut:

    • Hapus dependensi untuk resource yang ingin Anda ganti, baik dengan menghapus klausa dependsOn, atau dengan menghapus atau mengubah referensi ke resource lain. Setelah Anda memperbarui deployment dengan perubahan ini, lakukan pembaruan lain untuk mengganti resource.

    • Hapus rantai resource dependen, dan perbarui deployment. Kemudian, pada update berikutnya, buat ulang resource yang ingin Anda gunakan.

  • Pastikan ada API dasar yang mendukung pembaruan Anda.

    Deployment Manager menggunakan API setiap layanan untuk membuat dan mengubah deployment Anda. Untuk memeriksa apakah permintaan Anda dapat diselesaikan oleh Deployment Manager, tinjau dokumentasi API layanan Cloud Platform untuk resource yang ingin Anda perbarui.

    Misalnya, jika Anda ingin memperbarui set data BigQuery di deployment, lihat metode yang tersedia di Referensi Datasets API. Metode ini mencakup metode update, yang menunjukkan bahwa Anda dapat memperbarui set data menggunakan Deployment Manager.

    Beberapa API memiliki metode kustom untuk memperbarui resource-nya. Misalnya, Compute Engine menawarkan metode kustom untuk memperbarui metadata instance yang disebut setMetadata. Dalam kasus tersebut, Deployment Manager akan mencoba menggunakan metode kustom.

  • Pastikan resource yang Anda perbarui dapat diubah.

    Beberapa resource tidak dapat diubah setelah dibuat, dan tidak dapat diperbarui. Untuk menentukan apakah resource tidak dapat diubah, lihat referensi API untuk resource tersebut. Biasanya, resource yang tidak dapat diubah tidak memiliki metode API update atau metode kustom untuk memperbarui properti resource.

Batasan

  • Untuk setiap deployment, Anda dapat menerapkan satu update dalam satu waktu. Jika update sedang berjalan, Anda harus menghentikan update saat ini sebelum memulai update baru.

  • Jika Anda mengubah resource dalam deployment tanpa menggunakan Pengelola Penerapan, seperti di konsol Google Cloud atau gcloud, Anda mungkin melihat error atau masalah yang tidak terduga saat mencoba mengubah resource dalam update.

Melakukan perubahan pada konfigurasi Anda

Jika Anda menyimpan konfigurasi yang ada, lakukan perubahan pada konfigurasi dan gunakan konfigurasi tersebut dalam permintaan update Anda.

Jika Anda belum menyimpan konfigurasi yang ada, buat konfigurasi baru. Untuk mengetahui langkah-langkah membuat file konfigurasi, baca Konfigurasi.

Deployment Manager membandingkan konfigurasi yang Anda berikan dalam permintaan update dengan manifes sebelumnya dan menggunakan perbedaan tersebut untuk mengupdate deployment Anda.

Misalnya, tabel berikut menunjukkan dua konfigurasi: satu menjelaskan deployment yang ada dan satu menjelaskan status deployment yang diperbarui yang diinginkan. Anda memberikan konfigurasi yang diperbarui dan Deployment Manager mengevaluasi perbedaannya dan melakukan pembaruan yang sesuai.

Contoh ini memperbarui resource instance yang ada untuk menyertakan beberapa metadata kustom dan juga menambahkan resource mesin virtual baru ke deployment. Bagian yang dicetak tebal adalah perbedaan antara template.

Template saat ini Template yang diperbarui
resources:
- name: vm-created-by-cloud-config
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: machine-type-url
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        diskName: disk-created-by-cloud-config
        sourceImage: image-url
    networkInterfaces:
    - network: network-url
resources:
- name: vm-created-by-cloud-config
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: machine-type-url
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      initializeParams:
        diskName: disk-created-by-cloud-config
        sourceImage: image-url
    networkInterfaces:
    - network: network-url
    metadata:
      items:
      - key: 'foo'
        value: 'bar'
      - key: 'dev'
        value: 'vm'

- name: a-new-vm
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: machine-type-url
      - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: false
      initializeParams:
        diskName: a-new-vm-disk
        sourceImage: image-url
    networkInterfaces:
    - network: network-url

(Opsional) Tentukan kebijakan yang akan digunakan untuk update

Selanjutnya, tentukan kebijakan yang ingin Anda gunakan untuk update. Kebijakan menentukan cara resource Anda diperbarui saat Anda memperbarui deployment.

Deployment Manager menggunakan kebijakan default berikut:

  • Kebijakan default untuk menambahkan resource adalah CREATE_OR_ACQUIRE.
  • Kebijakan default untuk menghapus resource adalah DELETE.
  • Kebijakan default untuk memperbarui resource adalah UPDATE.

Untuk mengetahui informasi tentang setiap kebijakan, tinjau bagian di bawah.

Kebijakan untuk menambahkan resource

Saat menambahkan resource, Anda dapat memilih untuk membuat resource baru dan menambahkannya ke deployment atau mendapatkan resource yang sudah ada:

  • CREATE_OR_ACQUIRE - [Default] Deployment Manager mendapatkan resource yang ada di project, atau membuat resource jika tidak ada. Untuk mendapatkan resource, Deployment Manager akan memeriksa konfigurasi Anda untuk mengetahui properti resource yang sedang Anda coba buat. Jika ada resource yang sudah ada dengan properti yang sama, Deployment Manager akan mendapatkan resource tersebut sebagai bagian dari deployment Anda.

    Properti yang diperiksa Deployment Manager bergantung pada jenis resource yang Anda buat, dan mungkin mencakup:

    • name resource
    • type resource
    • zone atau region resource, jika ada

    Properti ini adalah bagian dari URL untuk permintaan API GET untuk resource. Untuk melihat properti yang digunakan Deployment Manager untuk mendapatkan resource, lihat dokumentasi API untuk metode GET resource. Misalnya, untuk instance Compute Engine, URL permintaan untuk metode instances.get mencakup resourceId (name dalam konfigurasi Anda), zone, dan project.

  • CREATE - Deployment Manager membuat resource yang tidak ada. Jika salah satu resource dalam konfigurasi Anda sudah ada di project, deployment akan gagal.

  • ACQUIRE - Deployment Manager mendapatkan resource yang sudah ada, menggunakan kriteria yang sama seperti CREATE_OR_ACQUIRE.

    Gunakan kebijakan ACQUIRE jika Anda memiliki sejumlah resource yang sudah ada di project, dan ingin mengelolanya bersama-sama, sebagai satu deployment.

    Dalam template atau konfigurasi, Anda harus memberikan properti yang diperlukan untuk resource ini seolah-olah Anda sedang membuatnya. Jika ada resource dalam konfigurasi Anda yang tidak ada di project, deployment akan gagal.

Kebijakan untuk menghapus resource

Berikan salah satu kebijakan berikut untuk menghapus resource:

  • DELETE - [Default] Opsi ini menghapus semua referensi ke resource dari deployment dan menghapus resource yang mendasarinya. Tindakan ini bersifat permanen dan tidak dapat diurungkan, tetapi Anda dapat membuat ulang resource baru dengan properti yang sama.

  • ABANDON - Tindakan ini akan menghapus semua referensi ke resource dari deployment, tetapi tidak menghapus resource yang mendasarinya. Misalnya, mengabaikan instance berarti instance tersebut dihapus dari deployment, tetapi instance tersebut masih ada untuk Anda gunakan.

    Kebijakan ABANDON hanya berlaku saat Anda menghapus seluruh resource, bukan saat Anda menghapus properti resource, atau memperbarui resource dengan properti baru. Jika ingin mempertahankan properti resource, Anda harus menyertakan resource dengan semua properti aslinya dalam konfigurasi yang diperbarui. Jika Anda menggunakan file konfigurasi baru untuk update, sebaiknya salin definisi resource dari konfigurasi asli Anda.

Kebijakan untuk memperbarui resource yang ada

Jika ada metode UPDATE untuk memperbarui resource yang ada, Deployment Manager akan menggunakannya.

Jika tidak, jika ada metode kustom, Deployment Manager akan menggunakan metode kustom. Deployment Manager mendukung metode kustom yang menggunakan kata kerja set. Misalnya, setMetadata() adalah metode kustom yang valid, tetapi addAccessConfigs() tidak.

(Opsional) Melihat pratinjau konfigurasi yang diperbarui

Anda dapat melihat pratinjau update yang ingin dilakukan sebelum melakukan perubahan, dengan Google Cloud CLI atau API. Layanan Deployment Manager melihat pratinjau konfigurasi dengan meluaskan konfigurasi lengkap dan membuat resource "shell".

Deployment Manager tidak membuat instance resource apa pun saat Anda melihat pratinjau konfigurasi, sehingga Anda dapat melihat deployment sebelum melakukan penerapan.

gcloud

Dengan Google Cloud CLI, buat permintaan update dengan parameter --preview:

gcloud deployment-manager deployments update example-deployment \
    --config configuration-file.yaml \
    --preview

API

Di API, buat permintaan PUT() dengan deployment yang ada dan berikan parameter kueri preview=true. Isi permintaan harus berisi kolom intent, target, dan name. Berikan nama deployment di URL dan isi permintaan.

Misalnya, permintaan API berikut melihat pratinjau update sederhana:

PUT https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment?preview=true

{
 "target": {
  "config": {
   "content": "resources:\n- name: vm-created-by-cloud-config\n  type: compute.v1.instance\n  properties:\n    zone: us-central1-a\n    machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/machineTypes/n1-standard-1\n    disks:\n    - deviceName: boot\n      type: PERSISTENT\n      boot: true\n      autoDelete: true\n      initializeParams:\n        diskName: disk-created-by-cloud-config\n        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20180716\n    networkInterfaces:\n    - network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default"
  }
 },
 "name": "example-deployment"
}

Setelah melihat pratinjau deployment, Anda dapat men-deploy konfigurasi sepenuhnya dengan membuat permintaan PUT() yang sama, dengan menghilangkan konfigurasi dan parameter kueri preview. Deployment Manager menggunakan pratinjau terakhir Anda untuk melakukan update. Contoh:

gcloud deployment-manager deployments update example-deployment

Untuk mengetahui langkah-langkah membuat permintaan update, lihat Membuat permintaan update.

Jika Anda memutuskan untuk tidak melanjutkan update, batalkan pratinjau saat ini sebelum membuat permintaan update atau pratinjau lainnya.

Membatalkan pratinjau

Setelah melihat pratinjau update, Anda harus memutuskan apakah ingin melanjutkan update. Jika Anda tidak ingin melanjutkan, atau jika Anda ingin menggunakan file konfigurasi lain untuk memperbarui deployment, batalkan pratinjau saat ini.

gcloud

Dengan Google Cloud CLI, buat permintaan deployments cancel-preview:

gcloud deployment-manager deployments cancel-preview my-first-deployment

API

Di API, buat permintaan PUT() ke metode cancelPreview dan berikan sidik jari deployment terbaru. Sidik jari adalah nilai yang dibuat secara acak yang berubah dengan setiap permintaan pembaruan. Untuk mencegah error selama update, berikan sidik jari terbaru dengan permintaan Anda.

Untuk mendapatkan sidik jari terbaru dari deployment, gunakan metode get() untuk mendapatkan deployment, lalu cari nilai sidik jari. Nilai sidik jari akan terlihat seperti ini:

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Permintaan cancelPreview() Anda akan terlihat seperti ini:

POST https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment/cancelPreview

{
 "fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
 }

Membuat permintaan update

Untuk melakukan update:

gcloud

Dengan Google Cloud CLI, gunakan subperintah deployments update, berikan konfigurasi baru dan secara opsional, kebijakan update Anda.

gcloud deployment-manager deployments update my-first-deployment \
    --create-policy POLICY \
    --delete-policy POLICY

Jika sebelumnya Anda melihat pratinjau konfigurasi, hapus konfigurasi tersebut dan Deployment Manager akan menggunakan konfigurasi yang terakhir dilihat pratinjaunya untuk melakukan update.

gcloud deployment-manager deployments update my-first-deployment

API

Di API, buat permintaan update dan berikan sidik jari deployment terbaru. Sidik jari adalah nilai yang dibuat secara acak yang berubah dengan setiap permintaan pembaruan. Untuk mencegah error selama update, berikan sidik jari terbaru dengan permintaan Anda.

Untuk mendapatkan sidik jari terbaru dari deployment, gunakan metode get() untuk mendapatkan deployment, lalu cari nilai sidik jari. Nilai sidik jari akan terlihat seperti ini:

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Selanjutnya, berikan sidik jari dalam permintaan Anda, beserta dengan konfigurasi baru dan kebijakan update Anda. Jika sebelumnya Anda telah melihat pratinjau konfigurasi, hapus konfigurasi dan kebijakan update, dan Deployment Manager akan menggunakan konfigurasi yang terakhir dilihat pratinjaunya untuk melakukan update.

Berikan nama deployment di URL dan isi permintaan.

PUT https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment?createPolicy=ACQUIRE&deletePolicy=ABANDON

{
 "target": {
  "config": {
   "content": "resources:\n- name: vm-created-by-cloud-config\n  type: compute.v1.instance\n  properties:\n    zone: us-central1-a\n    machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/machineTypes/n1-standard-1\n    disks:\n    - deviceName: boot\n      type: PERSISTENT\n      boot: true\n      autoDelete: true\n      initializeParams:\n        diskName: disk-created-by-cloud-config\n        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20180716\n    networkInterfaces:\n    - network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default"
  }
 },
 "name": "example-deployment",
 "fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
}

Menghentikan update

Anda dapat menghentikan update yang sedang berlangsung menggunakan stop(). metode. Tindakan ini membatalkan progres lebih lanjut dari update tertentu, tetapi tidak mengurungkan perubahan yang telah dilakukan.

Jika Anda mencoba membatalkan pratinjau, lihat bagian Membatalkan pratinjau.

gcloud

Dengan Google Cloud CLI, buat permintaan deployments stop:

gcloud deployment-manager deployments stop my-first-deployment

API

Di API, buat permintaan POST() ke metode stop dan berikan properti sidik jari terbaru. Sidik jari adalah nilai yang dibuat secara acak yang berubah dengan setiap permintaan pembaruan. Untuk mencegah perubahan yang bertentangan, Anda harus memberikan sidik jari terbaru bersama permintaan Anda, untuk melakukan penguncian optimis sehingga hanya satu pembaruan yang dapat dilakukan dalam satu waktu.

Untuk mendapatkan sidik jari terbaru dari deployment, gunakan metode get() untuk mendapatkan deployment, lalu cari nilai sidik jari. Nilai sidik jari akan terlihat seperti ini:

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Permintaan Anda akan terlihat seperti ini:

POST https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment/stop

{
 "fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
 }

Langkah berikutnya