Men-deploy aplikasi Python Bookshelf menggunakan Cloud Deployment Manager

Tutorial ini menunjukkan cara men-deploy aplikasi contoh Python Bookshelf menggunakan Cloud Deployment Manager.

Deployment Manager memungkinkan Anda membuat resource yang diperlukan Google Cloud untuk deployment dalam satu langkah, melalui proses deklaratif yang dapat diulang. Dengan Deployment Manager, Anda dapat memperbarui deployment, melacak modifikasi dari waktu ke waktu, membuat template menggunakan Jinja atau Python, dan membuat parameter template, sehingga deployment serupa dapat menggunakan template yang sama.

Tujuan

  • Membuat clone dan mengonfigurasi aplikasi contoh Bookshelf.
  • Membuat konfigurasi dan template Deployment Manager.
  • Membuat deployment Deployment Manager.
  • Men-deploy aplikasi contoh Bookshelf menggunakan Deployment Manager.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen yang dapat ditagih berikut Google Cloud:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis. Google Cloud

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.

Sebelum memulai

  1. Login keakun Anda. Google Cloud Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Instal Google Cloud CLI.

  6. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  7. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Instal Google Cloud CLI.

  12. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  13. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  14. Instal Python, pip, dan virtualenv di sistem Anda. Untuk mengetahui petunjuknya, lihat Menyiapkan lingkungan pengembangan Python untuk Google Cloud.

Membuat bucket Cloud Storage

Petunjuk berikut menjelaskan cara membuat bucket Cloud Storage. Bucket adalah container dasar yang menyimpan data Anda di Cloud Storage.

  1. Di jendela terminal, buat bucket Cloud Storage, dengan YOUR_BUCKET_NAME mewakili nama bucket Anda:

    gcloud storage buckets create gs://YOUR_BUCKET_NAME
  2. Untuk melihat gambar yang diupload di aplikasi Bookshelf, tetapkan kebijakan Identity and Access Management bucket untuk memberikan peran legacyObjectReader kepada allUsers:

    gcloud storage buckets add-iam-policy-binding gs://YOUR_BUCKET_NAME
    --member=allUsers --role=roles/storage.legacyObjectReader

Membuat clone aplikasi contoh

Aplikasi contoh tersedia di GitHub di GoogleCloudPlatform/getting-started-python.

  1. Buat clone repositori:

    git clone https://github.com/GoogleCloudPlatform/getting-started-python.git -b steps
    
  2. Buka direktori contoh:

    cd getting-started-python/7-gce
    

Mengonfigurasi aplikasi

  1. Buka config.py untuk mengedit.

    • Tetapkan nilai PROJECT_ID ke project ID Anda.

    • Tetapkan nilai CLOUD_STORAGE_BUCKET ke nama bucket Cloud Storage Anda.

  2. Simpan dan tutup config.py.

Menjalankan aplikasi di komputer lokal Anda

  1. Buat lingkungan Python yang terisolasi, dan instal dependensi:

    Linux/macOS

    virtualenv -p python3 env
    source env/bin/activate
    pip install -r requirements.txt
    

    Windows

    virtualenv -p python3 env
    env\scripts\activate
    pip install -r requirements.txt
    

  2. Jalankan aplikasi:

    python main.py
    
  3. Di browser Anda, masukkan alamat berikut:

    http://localhost:8080

Untuk menghentikan server web lokal, tekan Control+C. Jika ingin keluar dari lingkungan virtual, masukkan deactivate.

Men-deploy aplikasi contoh

Mengirim kode Anda ke repositori

Anda dapat memasukkan kode ke instance Compute Engine yang berjalan dengan beberapa cara. Salah satu caranya adalah menggunakan Cloud Source Repositories. Setiap project menyertakan repositori Git yang tersedia untuk instance Compute Engine. Instance Anda kemudian akan mengambil kode aplikasi versi terbaru selama startup. Menggunakan repositori Git lebih praktis karena memperbarui aplikasi tidak memerlukan konfigurasi image atau instance baru; cukup mulai ulang instance yang ada atau buat instance baru.

  1. Untuk pertama kalinya menggunakan Git, gunakan git config --global untuk menyiapkan identitas Anda.

  2. Di Google Cloud konsol, buat repositori:

    Buat repositori

  3. Kemudian, kirim kode aplikasi Anda ke repositori project Anda dengan [YOUR_PROJECT_ID] sebagai project ID Anda dan [YOUR_REPO] sebagai nama repositori Anda:

    git commit -am "Updating configuration"
    git config credential.helper gcloud.sh
    git remote add cloud https://source.developers.google.com/p/[YOUR_PROJECT_ID]/r/[YOUR_REPO]
    git push cloud master
    

Membuat deployment

Setelah konfigurasi Anda di-commit dan kode Anda diupload ke Cloud Source Repositories, Anda dapat menggunakan Deployment Manager untuk membuat deployment:

  1. Buka direktori deployment_manager:

    cd getting-started-python/7-gce/gce/deployment_manager
    
  2. Buat deployment:

    gcloud deployment-manager deployments create my-deployment --config config.yaml
    
  3. Lihat daftar semua deployment:

    gcloud deployment-manager deployments list
    
  4. Dapatkan deskripsi deployment dan resource yang dibuatnya:

    gcloud deployment-manager deployments describe my-deployment
    

Melihat aplikasi Anda

Setelah membuat aturan penerusan, mungkin perlu beberapa menit untuk menerapkan konfigurasi Anda dan merutekan traffic ke instance Anda.

  1. Untuk memeriksa progres:

    gcloud compute backend-services get-health bookshelf-my-deployment-frontend --global
    
  2. Jika setidaknya salah satu instance Anda melaporkan HEALTHY, dapatkan alamat IP penerusan untuk load balancer:

    gcloud compute forwarding-rules list --global
    

    Alamat IP aturan penerusan Anda ada di kolom IP_ADDRESS.

  3. Di browser Anda, masukkan alamat IP dari daftar.

    Aplikasi Anda kini berjalan di Google Cloud.

Memahami kode

Mengonfigurasi deployment

Anda dapat melihat cara deployment dikonfigurasi di config.yaml:

imports:
- name: bookshelf.jinja
  path: ./bookshelf.jinja

resources:
- name: bookshelf
  type: bookshelf.jinja
  properties:
    zone: us-central1-f
    machine-type: n1-standard-1
    machine-image: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    min-instances: 1
    max-instances: 10
    target-utilization: 0.6
    scopes:
    - https://www.googleapis.com/auth/cloud-platform

File konfigurasi mengimpor file template sebagai resource dan menggunakannya untuk menentukan resource bernama bookshelf. Template mengambil beberapa properti sebagai parameter. Untuk mengetahui informasi selengkapnya tentang cara membuat file konfigurasi Deployment Manager, lihat Membuat konfigurasi.

Mengonfigurasi skema template deployment

Lihat file skema bookshelf.jinja.schema, yang menentukan dan mendokumentasikan parameter yang diharapkan akan diberikan oleh deployment dalam file konfigurasinya. Untuk mengetahui informasi selengkapnya tentang skema konfigurasi, lihat Menggunakan skema.


info:
  title: Bookshelf GCE Deploy
  author: Google Inc.
  description: Creates a GCE Deployment

imports:
- name: startup-script
  path: ../startup-script.sh

required:
- zone
- machine-type
- min-instances
- max-instances
- scopes

properties:
  zone:
    description: Zone to create the resources in.
    type: string
  machine-type:
    description: Type of machine to use
    type: string
  machine-image:
    description: The OS image to use on the machines
    type: string
  min-instances:
    description: The minimum number of VMs the autoscaler will create
    type: integer
  max-instances:
    description: The maximum number of VMs the autoscaler will create
    type: integer
  target-utilization:
    description: The target CPU usage for the autoscaler to base its scaling on
    type: number
  scopes:
    description: A list of scopes to create the VM with
    type: array
    minItems: 1
    items:
      type: string

Mengonfigurasi template deployment

Template menentukan beberapa resource yang diperlukan untuk membuat grup instance terkelola yang di-load balance dan di-autoscaling. Untuk mengetahui deskripsi lengkap resource yang dibuat, lihat komentar dalam template dan tinjau tutorial Bookshelf di Compute Engine.

Perlu diingat bahwa Deployment Manager menyediakan cara untuk menentukan resource secara deklaratif, tetapi sebagian besar konfigurasi untuk resource tertentu ditentukan oleh API-nya. Misalnya, sebagian besar opsi konfigurasi untuk resource template instance dapat ditemukan dalam definisi resource template instance di dokumentasi referensi untuk Compute Engine API.

Template ditulis menggunakan Jinja bahasa templating. Saat menulis template Deployment Manager, Anda dapat menggunakan Jinja atau Python. Jinja memiliki keunggulan karena lebih deklaratif, yang dapat lebih mudah dibaca dan dipahami daripada Python. Untuk beberapa deployment yang kompleks, ekspresi lengkap Python dapat membuat semuanya lebih sederhana. Dalam hal ini, Jinja cukup untuk membuat resource yang diperlukan.

Dalam template, variabel lingkungan tertentu ditetapkan secara otomatis, dan Anda dapat mengakses variabel ini menggunakan kamus env. Dalam hal ini, nama deployment direferensikan sebagai nama yang akan digunakan kembali saat menetapkan nama ke resource yang dibuat. Untuk mengetahui informasi selengkapnya tentang variabel lingkungan yang tersedia, lihat Menggunakan variabel lingkungan dalam dokumentasi Deployment Manager:

{% set NAME = "bookshelf-" + env["deployment"] %}
{% set SERVICE = "bookshelf-" + env["deployment"] + "-frontend" %}

Template menggunakan skrip startup yang sama yang digunakan dalam tutorial Compute Engine . Konten skrip dimasukkan ke dalam template, dan direktif indent Jinja mengindentasi konten dengan benar:

            value: |
{{imports['startup-script']|indent(14, true)}}

Dalam template Jinja Deployment Manager, Anda juga dapat merujuk ke resource yang dibuat di tempat lain dalam template. Dalam contoh berikut, layanan backend menggunakan referensi grup instance terkelola untuk mendapatkan grup instance yang harus ditujunya:

- group: $(ref.{{ NAME }}-frontend-group.instanceGroup)
  zone: {{ properties['zone'] }}

Properti yang ditentukan dalam config.yaml dapat digunakan dalam template:

minNumReplicas: {{ properties['min-instances'] }}
maxNumReplicas: {{ properties['max-instances'] }}
loadBalancingUtilization:
  utilizationTarget: {{ properties['target-utilization'] }}

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

Untuk menghapus project:

  1. Di Google Cloud konsol, buka halaman Manage resources.

    Buka Kelola resource

  2. Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus deployment

Untuk menghapus deployment, masukkan perintah berikut. Perintah ini menghapus load balancer dan instance Compute Engine apa pun yang terkait dengan deployment Anda:

gcloud deployment-manager deployments delete my-deployment

Langkah berikutnya