Setiap deployment memiliki manifes yang sesuai. Manifes adalah properti hanya-baca yang mendeskripsikan semua resource dalam deployment Anda dan dibuat secara otomatis dengan setiap deployment baru. Manifes tidak dapat diubah setelah dibuat. Manifes tidak sama dengan file konfigurasi, tetapi dibuat berdasarkan file konfigurasi.
Sebelum memulai
- Jika Anda ingin menggunakan contoh command line dalam panduan ini, instal alat command line`gcloud`.
- Jika Anda ingin menggunakan contoh API dalam panduan ini, siapkan akses API.
- Memahami konfigurasi.
- Memahami template.
- Pahami cara membuat konfigurasi.
Struktur manifes
Manifes menyediakan tiga tampilan deployment:
- Konfigurasi awal
- Konfigurasi yang dievaluasi sepenuhnya setelah semua template dan impor diperluas
- Tata letak deployment, yang menjelaskan semua resource untuk deployment dalam struktur hierarki.
Konfigurasi asli
Konfigurasi asli adalah konfigurasi yang Anda berikan ke deployment, sebelum perluasan template apa pun. Konfigurasi awal ditunjukkan oleh properti config
:
config: |
imports:
- path: vm-template.jinja
- path: network-template.jinja
- path: firewall-template.jinja
- path: compute-engine-template.jinja
resources:
- name: compute-engine-setup
type: compute-engine-template.jinja
Konfigurasi yang diperluas
Konfigurasi yang diperluas adalah deskripsi lengkap tentang deployment Anda, termasuk semua resource dan propertinya, setelah memproses semua template Anda. Ini adalah status akhir konfigurasi Anda.
Bagian konfigurasi yang diperluas dari manifes Anda ditunjukkan oleh properti expandedConfig
:
expandedConfig: | resources: - name: datadisk-example-config-with-templates properties: sizeGb: 100 type: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/diskTypes/pd-standard zone: us-central1-a type: compute.v1.disk - name: vm-example-config-with-templates properties: disks: - autoDelete: true boot: true deviceName: boot initializeParams: diskName: disk-example-config-with-templates sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619 type: PERSISTENT - autoDelete: true deviceName: datadisk-example-config-with-templates source: $(ref.datadisk-example-config-with-templates.selfLink) type: PERSISTENT machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/machineTypes/f1-micro metadata: items: - key: startup-script value: | #!/bin/bash python -m http.server 8080 networkInterfaces: - accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default zone: us-central1-a type: compute.v1.instance
Template yang diimpor
Properti imports
dalam manifes Anda menampilkan konten template apa pun
yang Anda impor untuk konfigurasi ini. Bagian impor manifes Anda
ditunjukkan oleh bagian imports
:
imports: - content: | resources: - name: {{ env["name"] }} type: compute.v1.instance properties: disks: - autoDelete: true type: PERSISTENT boot: true deviceName: boot initializeParams: sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619 machineType: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/zones/{{ properties["zone"] }}/machineTypes/{{ properties["machineType"] }} networkInterfaces: - network: $(ref.{{ properties["network"] }}.selfLink) accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT zone: {{ properties["zone"] }} metadata: items: - key: startup-script value: | #!/bin/bash INSTANCE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/hostname -H "Metadata-Flavor: Google") echo "<html><header><title>Hello from Deployment Manager!</title></header> <body><h2>Hello from $INSTANCE</h2> <p>Deployment Manager bids you good day!</p> </body> </html>" > index.html python -m http.server 80 name: vm-template.jinja - content: | resources: - name: {{ env["name"] }} type: compute.v1.network properties: IPv4Range: 10.0.0.1/16 name: network-template.jinja - content: | resources: - name: {{ env["name"]}} type: compute.v1.firewall properties: network: $(ref.{{ properties["network"] }}.selfLink) sourceRanges: ["0.0.0.0/0"] allowed: - IPProtocol: TCP ports: ["80"] name: firewall-template.jinja - content: | {% set NETWORK_NAME = "a-new-network" %} resources: - name: the-first-vm type: vm-template.jinja properties: machineType: f1-micro zone: us-central1-f network: {{ NETWORK_NAME }} - name: the-second-vm type: vm-template.jinja properties: machineType: g1-small zone: us-central1-f network: {{ NETWORK_NAME }} - name: {{ NETWORK_NAME }} type: network-template.jinja - name: {{ NETWORK_NAME }}-firewall type: firewall-template.jinja properties: network: {{ NETWORK_NAME }} name: compute-engine-template.jinja
Tata Letak
Tata letak adalah garis besar deployment Anda dan resource-nya, serta menampilkan nama dan jenis resource.
Gunakan tata letak untuk memvisualisasikan struktur deployment Anda, properti template tampilan yang ditetapkan selama deployment awal, dan informasi lainnya tentang konfigurasi Anda sebelum diperluas.
Dalam manifes, Anda dapat melihat tata letak di properti layout
:
layout: |
resources:
- name: compute-engine-setup
resources:
- name: the-first-vm
properties:
machineType: f1-micro
network: a-new-network
zone: us-central1-f
resources:
- name: the-first-vm
type: compute.v1.instance
type: vm-template.jinja
- name: the-second-vm
properties:
machineType: g1-small
network: a-new-network
zone: us-central1-f
resources:
- name: the-second-vm
type: compute.v1.instance
type: vm-template.jinja
- name: a-new-network
resources:
- name: a-new-network
type: compute.v1.network
type: network-template.jinja
- name: a-new-network-firewall
properties:
network: a-new-network
resources:
- name: a-new-network-firewall
type: compute.v1.firewall
type: firewall-template.jinja
type: compute-engine-template.jinja
Mengidentifikasi manifes
Anda dapat mengidentifikasi manifes berdasarkan ID uniknya, dalam format manifest-TIMESTAMP
. Contoh:
manifest-1436393348324
Biasanya, Anda bisa mendapatkan ID manifes dengan mendapatkan informasi tentang deployment yang sesuai, atau dengan mencantumkan manifes untuk deployment.
gcloud
Dengan Google Cloud CLI, gunakan sub-perintah deployments describe
:
gcloud deployment-manager deployments describe example-deployment
gcloud
menampilkan respons yang mirip dengan berikut ini:
id: '7428522736135856060' manifest: https://www.googleapis.com/deploymentmanager/v2beta1/projects/myproject/global/deployments/example-deployment/manifests/manifest-1436393348324 name: example-deployment resources: NAME TYPE ID STATE ERRORS ...
API
Di API, buat permintaan GET
, dengan memberikan nama deployment dalam permintaan:
GET https://www.googleapis.com/deploymentmanager/v2beta1/projects/myproject/global/deployments/example-deployment-with-config
Anda akan melihat respons seperti berikut:
{ "id": "5899501332770090517", "creationTimestamp": "2015-03-30T15:40:58.809-07:00", "name": "example-deployment-with-config", "fingerprint": "", "manifest": "https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment-with-config/manifests/manifest-1427755258810-2b3498d9-530b-4f8e-b014-0342d3c9c66b", "state": "DEPLOYED" }
Melihat manifes
Anda dapat melihat manifes dengan membuat permintaan get()
ke resource
Manifes atau melalui Konsol Google Cloud atau gcloud
.
Konsol
Untuk melihat manifes deployment di Google Cloud Console:
- Buka halaman Deployment di Konsol Google Cloud.
- Dari daftar, klik deployment yang ingin Anda lihat.
- Di detail deployment, klik Ringkasan.
gcloud
Dengan Google Cloud CLI, lihat manifes lengkap menggunakan perintah manifests describe
. Perintah tersebut mencantumkan manifes lengkap dan tata letak:
gcloud deployment-manager manifests describe manifest-1436393348324 \
--deployment example-config-with-templates
gcloud
menampilkan respons yang mirip dengan berikut ini:
config: | imports: ["vm_template.jinja"]resources:
- name: vm-instance type: vm_template.jinja properties: zone: us-central1-a project: myproject creationTimestamp: '2015-03-30T15:40:58.815-07:00' evaluatedConfig: | resources:
- name: datadisk-example-config-with-templates properties: sizeGb: 100 type: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/diskTypes/pd-standard zone: us-central1-a type: compute.v1.disk
- name: vm-example-config-with-templates
properties:
disks:
- autoDelete: true boot: true deviceName: boot initializeParams: diskName: disk-example-config-with-templates sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619 type: PERSISTENT
- autoDelete: true
deviceName: datadisk-example-config-with-templates
source: $(ref.datadisk-example-config-with-templates.selfLink)
type: PERSISTENT
machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/machineTypes/f1-micro
metadata:
items:
- key: startup-script value: | #!/bin/bash python -m http.server 8080 networkInterfaces:
- accessConfigs:
- name: External NAT type: ONE_TO_ONE_NAT network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default zone: us-central1-a type: compute.v1.instance id: '7174699452487462421' layout: | resources:
- name: vm-instance
type: vm_template.jinja
properties:
project: myproject
zone: us-central1-a
resources:
- name: datadisk-example-config-with-templates type: compute.v1.disk
- name: vm-example-config-with-templates type: compute.v1.instance name: manifest-1427755258810-2b3498d9-530b-4f8e-b014-0342d3c9c66b selfLink: https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-config-with-templates/manifests/manifest-1436393348324
API
Di API, berikan nama deployment dan nama manifes dalam permintaan GET
:
GET https://www.googleapis.com/deploymentmanager/v2beta1/projects/myproject/global/deployments/example-deployment/manifests/manifest-1436393348324
Anda akan melihat respons seperti berikut:
{ "id": "7174699452487462421", "selfLink": "https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-config-with-templates/manifests/manifest-1436393348324", "creationTimestamp": "2015-03-30T15:40:58.815-07:00", "name": "manifest-1427755258810-2b3498d9-530b-4f8e-b014-0342d3c9c66b", "config": "imports: [\"vm_template.jinja\"]\n\nresources:\n- name: vm-instance\n type: vm_template.jinja\n properties:\n zone: us-central1-a\n project: myproject\n", "evaluatedConfig": "resources:\n- name: datadisk-example-config-with-templates\n properties:\n sizeGb: 100\n type: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/diskTypes/pd-standard\n zone: us-central1-a\n type: compute.v1.disk\n- name: vm-example-config-with-templates\n properties:\n disks:\n - autoDelete: true\n boot: true\n deviceName: boot\n initializeParams:\n diskName: disk-example-config-with-templates\n sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619\n type: PERSISTENT\n - autoDelete: true\n deviceName: datadisk-example-config-with-templates\n source: $(ref.datadisk-example-config-with-templates.selfLink)\n type: PERSISTENT\n machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/machineTypes/f1-micro\n metadata:\n items:\n - key: startup-script\n value: |\n #!/bin/bash\n python -m http.server 8080\n networkInterfaces:\n - accessConfigs:\n - name: External NAT\n type: ONE_TO_ONE_NAT\n network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default\n zone: us-central1-a\n type: compute.v1.instance\n", "layout": "resources:\n- name: vm-instance\n properties:\n project: myproject\n zone: us-central1-a\n resources:\n - name: datadisk-example-config-with-templates\n type: compute.v1.disk\n - name: vm-example-config-with-templates\n type: compute.v1.instance\n type: vm_template.jinja\n" }