Mengupdate Deployment

Setelah membuat deployment, Anda dapat mengupdatenya seiring perubahan aplikasi atau layanan Anda. Anda dapat menggunakan Deployment Manager untuk mengupdate deployment dengan:

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

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

  1. Buat perubahan atau buat file konfigurasi dengan perubahan yang Anda inginkan.
  2. Secara opsional, pilih kebijakan yang akan digunakan untuk update Anda 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 mengupdate deployment untuk menambahkan resource baru ke project, periksa apakah resource sudah ada.

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

    Untuk mengetahui informasi tentang kebijakan yang dapat digunakan saat mengupdate deployment, lihat Kebijakan untuk menambahkan resource.

  • Jika Anda mengupdate deployment untuk mengganti resource, periksa dependensinya

    Jika ingin mengganti resource dari deployment, Anda harus terlebih dahulu memastikan bahwa penghapusan resource tidak menyebabkan siklus deployment. Siklus deployment terjadi ketika 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 harus 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 ini, dependensi berada dalam loop, dan deployment akan gagal.

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

    Misalnya, suatu deployment memiliki persistent disk yang disebut disk-a, VM bernama vm-a, dan grup instance bernama ig-a. Konfigurasi untuk vm-a menyertakan referensi ke disk-a, dan konfigurasi untuk ig-a menyertakan referensi ke vm-a. Dalam konfigurasi yang diperbarui, Anda ingin menghapus vm-a dan menggantinya dengan vm-b. Dalam skenario demikian, 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 diganti, baik dengan menghapus klausa dependOn, maupun dengan menghapus atau mengubah referensi ke resource lain. Setelah mengupdate deployment dengan perubahan ini, buat update lain untuk mengganti resource.

    • Menghapus rantai resource dependen, lalu mengupdate deployment. Kemudian, pada update berikutnya, buat ulang resource yang ingin Anda gunakan.

  • Pastikan ada API dasar yang mendukung update Anda.

    Deployment Manager menggunakan API setiap layanan untuk membuat dan memodifikasi deployment Anda. Untuk memastikan permintaan Anda dapat diselesaikan oleh Deployment Manager, tinjau dokumentasi API dari layanan Cloud Platform untuk mengetahui resource yang ingin diperbarui.

    Misalnya, jika Anda ingin memperbarui set data BigQuery dalam deployment, lihat metode yang tersedia di referensi Datasets API. Metode tersebut menyertakan 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 mengupdate 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 diupdate. 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 update satu per satu. Jika update sedang berlangsung, Anda harus menghentikan update saat ini sebelum memulai update baru.

  • Jika Anda mengubah resource dalam deployment tanpa menggunakan Deployment Manager, seperti di konsol Google Cloud atau gcloud, Anda mungkin akan melihat error atau masalah tak terduga saat mencoba mengubah resource dalam update.

Buat perubahan pada konfigurasi Anda

Jika Anda menyimpan konfigurasi yang ada, buat perubahan pada konfigurasi dan gunakan dalam permintaan pembaruan.

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

Deployment Manager membandingkan konfigurasi yang Anda sediakan dalam permintaan update dengan manifes sebelumnya dan menggunakan perbedaannya untuk mengupdate deployment.

Misalnya, tabel berikut menampilkan dua konfigurasi: satu mendeskripsikan deployment yang ada dan satunya lagi menggambarkan status deployment terbaru yang diinginkan. Anda memberikan konfigurasi yang telah diupdate, dan Deployment Manager akan mengevaluasi perbedaannya serta melakukan update yang sesuai.

Contoh ini mengupdate resource instance yang ada untuk menyertakan beberapa metadata kustom dan juga menambahkan resource virtual machine baru ke deployment. Bagian yang dicetak tebal adalah perbedaan di 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 ini menentukan cara resource Anda diupdate saat Anda mengupdate 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 ini.

Kebijakan penambahan resource

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

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

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

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

    Properti adalah bagian dari URL untuk permintaan API GET untuk resource. Guna melihat properti yang digunakan Deployment Manager untuk memperoleh resource, baca dokumentasi API untuk metode GET resource. Misalnya, untuk instance Compute Engine, URL permintaan untuk metode instances.get menyertakan 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 dalam project, deployment akan gagal.

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

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

    Di template atau konfigurasi, Anda harus menyediakan properti yang diperlukan untuk resource ini seolah-olah Anda sedang membuatnya. Jika salah satu resource dalam konfigurasi Anda tidak ada dalam project, deployment akan gagal.

Kebijakan penghapusan resource

Sediakan salah satu kebijakan berikut untuk menghapus resource:

  • DELETE - [Default] Tindakan ini akan 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 referensi ke resource dari deployment, tetapi tidak menghapus resource yang mendasarinya. Misalnya, meninggalkan instance berarti dihapus dari deployment, tetapi instance tersebut masih ada untuk Anda gunakan.

    Kebijakan ABANDON hanya berlaku saat Anda menghapus seluruh resource, bukan saat 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 menggunakan file konfigurasi baru untuk update Anda, sebaiknya salin definisi resource dari konfigurasi asli Anda.

Kebijakan untuk memperbarui resource yang ada

Jika metode UPDATE tersedia untuk mengupdate resource yang sudah ada, Deployment Manager akan menggunakannya.

Sebaliknya, apabila ada metode khusus, Deployment Manager akan menggunakan metode khusus tersebut. 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 apa pun, dengan Google Cloud CLI atau API. Layanan Deployment Manager menampilkan pratinjau konfigurasi dengan memperluas konfigurasi penuh dan membuat resource "shell".

Deployment Manager tidak membuat instance resource sebenarnya saat Anda melihat pratinjau konfigurasi, sehingga memberi Anda kesempatan untuk melihat deployment sebelum melakukan commit ke sana.

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 mempratinjau 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 sepenuhnya men-deploy konfigurasi dengan membuat permintaan PUT() yang sama, tanpa menghapus 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 dalam membuat permintaan pembaruan, lihat Membuat permintaan pembaruan.

Jika Anda memutuskan untuk tidak melanjutkan update, batalkan pratinjau saat ini sebelum membuat permintaan pratinjau atau update 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 yang berbeda untuk mengupdate 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 dihasilkan secara acak yang berubah dengan setiap permintaan update. Untuk mencegah error selama update, berikan sidik jari terbaru bersama permintaan Anda.

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

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Permintaan cancelPreview() Anda terlihat seperti ini:

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

{
 "fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
 }

Membuat permintaan pembaruan

Untuk melakukan update:

gcloud

Dengan Google Cloud CLI, gunakan subperintah deployments update, yang memberikan 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, 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 dihasilkan secara acak yang berubah dengan setiap permintaan update. Untuk mencegah error selama update, berikan sidik jari terbaru bersama permintaan Anda.

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

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Selanjutnya, berikan sidik jari dalam permintaan Anda, beserta konfigurasi baru dan kebijakan update. Jika sebelumnya Anda melihat pratinjau konfigurasi, hapus kebijakan konfigurasi dan update, dan Deployment Manager akan menggunakan konfigurasi yang terakhir dilihat pratinjaunya untuk menjalankan 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(). Tindakan ini akan membatalkan progres lebih lanjut dari update tertentu, tetapi tidak membatalkan perubahan apa pun 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 dihasilkan secara acak dan berubah dengan setiap permintaan update. Untuk mencegah perubahan yang bertentangan, Anda harus memberikan sidik jari terbaru bersama permintaan, untuk melakukan penguncian optimis sehingga hanya satu update yang dapat dilakukan pada satu waktu.

Untuk mendapatkan sidik jari deployment terbaru, gunakan metode get() untuk mendapatkan deployment, dan 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 selanjutnya