Django di Cloud Run

1. Pengantar

894762ebb681671c.png

Cloud Run adalah platform komputasi terkelola yang memungkinkan Anda untuk menjalankan container stateless yang dapat dipanggil melalui permintaan HTTP. Cloud Run bersifat serverless. Platform ini memisahkan semua pengelolaan infrastruktur di lokasi lain, sehingga Anda dapat fokus pada hal terpenting, yakni membuat aplikasi yang andal.

Layanan ini juga secara native berinteraksi dengan banyak bagian lain dari ekosistem Google Cloud, termasuk Cloud SQL untuk database terkelola, Cloud Storage untuk penyimpanan objek terpadu, dan Secret Manager untuk mengelola secret.

Django adalah framework web Python level tinggi.

Dalam tutorial ini, Anda akan menggunakan komponen-komponen ini untuk men-deploy project Django kecil.

Catatan: Codelab ini terakhir diverifikasi dengan Django 5.0. Kecuali jika ada perubahan yang dapat menyebabkan gangguan pada update mendatang, codelab ini akan terus berfungsi. Periksa catatan rilis Django di masa mendatang.

Yang akan Anda pelajari

  • Cara menggunakan Cloud Shell
  • Cara membuat database Cloud SQL
  • Cara membuat bucket Cloud Storage
  • Cara membuat secret Secret Manager
  • Cara menggunakan Secret dari berbagai layanan Google Cloud
  • Cara menghubungkan komponen Google Cloud ke layanan Cloud Run
  • Cara menggunakan Container Registry untuk menyimpan container yang di-build
  • Cara men-deploy ke Cloud Run
  • Cara menjalankan migrasi skema database di Cloud Build

2. Penyiapan dan persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Google Cloud Shell

Meskipun Google Cloud dapat dioperasikan secara jarak jauh dari laptop Anda, dalam codelab ini kita akan menggunakan Google Cloud Shell, yakni lingkungan command line yang berjalan di Cloud.

Mengaktifkan Cloud Shell

  1. Dari Cloud Console, klik Aktifkan Cloud Shell 853e55310c205094.png.

3c1dabeca90e44e5.png

Jika ini pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Lanjutkan.

9c92662c6a846a5c.pngS

Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.

9f0e51b578fecce5.png

Virtual machine ini berisi semua alat pengembangan yang diperlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan dengan browser.

Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda telah diautentikasi dan project sudah ditetapkan ke project ID Anda.

  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list

Output perintah

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
gcloud config list project

Output perintah

[core]
project = <PROJECT_ID>

Jika tidak, Anda dapat menyetelnya dengan perintah ini:

gcloud config set project <PROJECT_ID>

Output perintah

Updated property [core/project].

3. Mengaktifkan Cloud API

Dari Cloud Shell, aktifkan Cloud API untuk komponen yang akan digunakan:

gcloud services enable \
  run.googleapis.com \
  sql-component.googleapis.com \
  sqladmin.googleapis.com \
  compute.googleapis.com \
  cloudbuild.googleapis.com \
  secretmanager.googleapis.com \
  artifactregistry.googleapis.com

Karena ini pertama kalinya Anda memanggil API dari gcloud, Anda akan diminta untuk melakukan otorisasi menggunakan kredensial Anda untuk membuat permintaan ini. Hal ini akan terjadi sekali per sesi Cloud Shell.

Operasi ini mungkin memerlukan waktu beberapa saat sampai selesai.

Setelah selesai, pesan sukses yang mirip dengan yang berikut ini akan muncul:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

4. Membuat project template

Anda akan menggunakan {i>template<i} proyek Django default sebagai contoh proyek Django.

Untuk membuat project template ini, gunakan Cloud Shell untuk membuat direktori baru bernama django-cloudrun lalu buka direktori tersebut:

mkdir ~/django-cloudrun
cd ~/django-cloudrun

Kemudian, instal Django ke dalam lingkungan virtual sementara:

virtualenv venv
source venv/bin/activate
pip install Django

Simpan daftar paket yang diinstal ke requirements.txt

pip freeze > requirements.txt

Daftar ini harus menyertakan Django dan dependensinya: sqlparse dan asgiref.

Kemudian, buat project template baru:

django-admin startproject myproject .

Anda akan mendapatkan file baru bernama manage.py, dan folder baru bernama myproject yang akan berisi sejumlah file, termasuk settings.py.

Pastikan konten folder tingkat atas sudah sesuai dengan yang diharapkan:

ls -F
manage.py myproject/ requirements.txt venv/

Pastikan konten folder myproject seperti yang diharapkan:

ls -F myproject/
__init__.py asgi.py settings.py  urls.py  wsgi.py

Anda sekarang dapat keluar dan menghapus lingkungan virtual sementara:

deactivate
rm -rf venv

Dari sini, Django akan dipanggil di dalam container.

5. Membuat layanan pendukung

Sekarang Anda akan membuat layanan pendukung: akun layanan khusus, Artifact Registry, database Cloud SQL, bucket Cloud Storage, dan sejumlah nilai Secret Manager.

Mengamankan nilai sandi yang digunakan dalam deployment penting untuk keamanan project apa pun, dan memastikan tidak ada yang tidak sengaja memasukkan sandi ke tempat yang tidak seharusnya (misalnya, langsung di file setelan, atau diketik langsung ke terminal tempat sandi dapat diambil dari histori.)

Untuk memulai, tetapkan dua variabel lingkungan dasar, satu untuk Project ID:

PROJECT_ID=$(gcloud config get-value core/project)

Dan satu untuk wilayah tersebut:

REGION=us-central1

Membuat akun layanan

Untuk membatasi akses yang dimiliki layanan ke bagian lain Google Cloud, buat akun layanan khusus:

gcloud iam service-accounts create cloudrun-serviceaccount

Anda akan merujuk akun ini melalui emailnya di bagian berikutnya dari codelab ini. Tetapkan nilai tersebut dalam variabel lingkungan:

SERVICE_ACCOUNT=$(gcloud iam service-accounts list \
    --filter cloudrun-serviceaccount --format "value(email)")

Membuat Artifact Registry

Untuk menyimpan image container yang telah dibangun, buat container registry di region yang Anda pilih:

gcloud artifacts repositories create containers --repository-format docker --location $REGION

Anda akan mereferensikan registry ini berdasarkan namanya di bagian selanjutnya dari codelab ini:

ARTIFACT_REGISTRY=${REGION}-docker.pkg.dev/${PROJECT_ID}/containers

Membuat database

Buat instance Cloud SQL:

gcloud sql instances create myinstance --project $PROJECT_ID \
  --database-version POSTGRES_14 --tier db-f1-micro --region $REGION

Operasi ini mungkin memerlukan waktu beberapa menit hingga selesai.

Dalam instance tersebut, buat database:

gcloud sql databases create mydatabase --instance myinstance

Pada instance yang sama, buat pengguna:

DJPASS="$(cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 30 | head -n 1)"
gcloud sql users create djuser --instance myinstance --password $DJPASS

Beri akun layanan izin untuk terhubung ke instance:

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:${SERVICE_ACCOUNT} \
    --role roles/cloudsql.client

Membuat bucket penyimpanan

Buat bucket Cloud Storage (perhatikan bahwa namanya harus unik secara global):

GS_BUCKET_NAME=${PROJECT_ID}-media
gcloud storage buckets create gs://${GS_BUCKET_NAME} --location ${REGION} 

Berikan izin kepada akun layanan untuk mengelola bucket:

gcloud storage buckets add-iam-policy-binding gs://${GS_BUCKET_NAME} \
    --member serviceAccount:${SERVICE_ACCOUNT} \
    --role roles/storage.admin

Menyimpan konfigurasi sebagai secret

Setelah menyiapkan layanan pendukung, Anda sekarang akan menyimpan nilai ini dalam file yang dilindungi menggunakan Secret Manager.

Dengan Secret Manager, Anda dapat menyimpan, mengelola, dan mengakses secret sebagai blob biner atau string teks. Layanan ini bekerja dengan baik untuk menyimpan informasi konfigurasi seperti sandi database, kunci API, atau sertifikat TLS yang diperlukan oleh aplikasi saat runtime.

Pertama, buat file dengan nilai untuk string koneksi database, bucket media, kunci rahasia untuk Django (digunakan untuk penandatanganan sesi dan token kriptografis), dan untuk mengaktifkan proses debug:

echo DATABASE_URL=\"postgres://djuser:${DJPASS}@//cloudsql/${PROJECT_ID}:${REGION}:myinstance/mydatabase\" > .env

echo GS_BUCKET_NAME=\"${GS_BUCKET_NAME}\" >> .env

echo SECRET_KEY=\"$(cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 50 | head -n 1)\" >> .env

echo DEBUG=True >> .env

Kemudian, buat secret bernama application_settings, menggunakan file tersebut sebagai secret:

gcloud secrets create application_settings --data-file .env

Izinkan akun layanan mengakses rahasia ini:

gcloud secrets add-iam-policy-binding application_settings \
  --member serviceAccount:${SERVICE_ACCOUNT} --role roles/secretmanager.secretAccessor

Pastikan secret telah dibuat dengan mencantumkan secret:

gcloud secrets versions list application_settings

Setelah mengonfirmasi bahwa rahasia telah dibuat, hapus file lokal:

rm .env

6. Konfigurasi aplikasi Anda

Dengan layanan pendukung yang baru saja Anda buat, Anda harus melakukan beberapa perubahan pada project template agar sesuai.

Hal ini akan mencakup pengenalan django-environ untuk menggunakan variabel lingkungan sebagai setelan konfigurasi, yang akan Anda isi dengan nilai yang Anda tentukan sebagai secret. Untuk menerapkannya, Anda akan memperluas setelan template. Anda juga perlu menambahkan dependensi Python tambahan.

Mengonfigurasi setelan

Pindahkan file settings.py, ganti namanya menjadi basesettings.py:

mv myproject/settings.py myproject/basesettings.py

Menggunakan editor web Cloud Shell, buat file settings.py baru, dengan kode berikut:

touch myproject/settings.py
cloudshell edit myproject/settings.py

myproject/settings.py

import io
import os
from urllib.parse import urlparse

import environ

# Import the original settings from each template
from .basesettings import *

# Load the settings from the environment variable
env = environ.Env()
env.read_env(io.StringIO(os.environ.get("APPLICATION_SETTINGS", None)))

# Setting this value from django-environ
SECRET_KEY = env("SECRET_KEY")

# Ensure myproject is added to the installed applications
if "myproject" not in INSTALLED_APPS:
    INSTALLED_APPS.append("myproject")

# If defined, add service URLs to Django security settings
CLOUDRUN_SERVICE_URLS = env("CLOUDRUN_SERVICE_URLS", default=None)
if CLOUDRUN_SERVICE_URLS:
    CSRF_TRUSTED_ORIGINS = env("CLOUDRUN_SERVICE_URLS").split(",")
    # Remove the scheme from URLs for ALLOWED_HOSTS
    ALLOWED_HOSTS = [urlparse(url).netloc for url in CSRF_TRUSTED_ORIGINS]
else:
    ALLOWED_HOSTS = ["*"]

# Default false. True allows default landing pages to be visible
DEBUG = env("DEBUG", default=False)

# Set this value from django-environ
DATABASES = {"default": env.db()}

# Change database settings if using the Cloud SQL Auth Proxy
if os.getenv("USE_CLOUD_SQL_AUTH_PROXY", None):
    DATABASES["default"]["HOST"] = "127.0.0.1"
    DATABASES["default"]["PORT"] = 5432

# Define static storage via django-storages[google]
GS_BUCKET_NAME = env("GS_BUCKET_NAME")
STATICFILES_DIRS = []
GS_DEFAULT_ACL = "publicRead"
STORAGES = {
    "default": {
        "BACKEND": "storages.backends.gcloud.GoogleCloudStorage",
    },
    "staticfiles": {
        "BACKEND": "storages.backends.gcloud.GoogleCloudStorage",
    },
}

Luangkan waktu untuk membaca komentar yang ditambahkan tentang setiap konfigurasi.

Perhatikan bahwa Anda mungkin melihat error linting pada file ini. Ini hal yang normal. Cloud Shell tidak memiliki konteks persyaratan untuk project ini, sehingga mungkin melaporkan impor yang tidak valid dan impor yang tidak digunakan.

Dependensi Python

Temukan file requirements.txt, dan tambahkan paket berikut:

cloudshell edit requirements.txt

requirements.txt (tambahkan)

gunicorn
psycopg2-binary
django-storages[google]
django-environ

Menentukan image aplikasi

Cloud Run akan menjalankan container apa pun selama mematuhi Kontrak Container Cloud Run. Tutorial ini memilih untuk menghilangkan Dockerfile, tetapi menggunakan Buildpack Berbasis Cloud. Buildpack membantu membangun container untuk bahasa umum, termasuk Python.

Tutorial ini memilih untuk menyesuaikan Procfile yang digunakan untuk memulai aplikasi web.

Untuk memasukkan project template ke dalam container, buat file baru bernama Procfile di level teratas project Anda terlebih dahulu (di direktori yang sama dengan manage.py), lalu salin konten berikut:

touch Procfile
cloudshell edit Procfile

Procfile

web: gunicorn --bind 0.0.0.0:$PORT --workers 1 --threads 8 --timeout 0 myproject.wsgi:application

7. Mengonfigurasi, membuat, dan menjalankan langkah migrasi

Untuk membuat skema database dalam database Cloud SQL dan mengisi bucket Cloud Storage dengan aset statis, Anda perlu menjalankan migrate dan collectstatic.

Perintah migrasi Django dasar ini harus dijalankan dalam konteks image container yang telah dibuat dengan akses ke database Anda.

Anda juga harus menjalankan createsuperuser untuk membuat akun administrator guna login ke admin Django.

Untuk melakukannya, Anda akan menggunakan Tugas Cloud Run untuk melakukan tugas ini. Tugas Cloud Run memungkinkan Anda menjalankan proses yang memiliki akhir yang ditentukan, sehingga ideal untuk tugas administrasi.

Menentukan sandi superuser Django Anda

Untuk membuat superuser, Anda akan menggunakan versi non-interaktif perintah createsuperuser. Perintah ini memerlukan variabel lingkungan yang diberi nama khusus untuk digunakan sebagai pengganti perintah untuk memasukkan sandi.

Buat secret baru, menggunakan sandi yang dibuat secara acak:

echo -n $(cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 30 | head -n 1) | gcloud secrets create django_superuser_password --data-file=-

Izinkan akun layanan Anda mengakses secret ini:

gcloud secrets add-iam-policy-binding django_superuser_password \
  --member serviceAccount:${SERVICE_ACCOUNT} \
  --role roles/secretmanager.secretAccessor

Mengupdate Procfile Anda

Untuk membantu memperjelas tugas Cloud Run Anda, buat pintasan di Procfile, tambahkan titik entri berikut ke Procfile:

migrate: python manage.py migrate && python manage.py collectstatic --noinput --clear
createuser: python manage.py createsuperuser --username admin --email noop@example.com --noinput

Sekarang Anda akan memiliki tiga entri: titik entri web default, titik entri migrate untuk menerapkan migrasi database, dan titik entri createuser untuk menjalankan perintah createsuperuser.

Membangun image aplikasi Anda

Setelah pembaruan Procfile diterapkan, build image:

gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage

Membuat tugas Cloud Run

Setelah image ada, Anda dapat membuat tugas Cloud Run menggunakan image tersebut.

Tugas ini menggunakan image yang dibuat sebelumnya, tetapi menggunakan nilai command yang berbeda. Nilai ini dipetakan ke nilai di Procfile.

Buat tugas untuk migrasi:

gcloud run jobs create migrate \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage \
  --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \
  --set-secrets APPLICATION_SETTINGS=application_settings:latest \
  --service-account $SERVICE_ACCOUNT \
  --command migrate

Buat tugas untuk pembuatan pengguna:

gcloud run jobs create createuser \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage \
  --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \
  --set-secrets APPLICATION_SETTINGS=application_settings:latest \
  --set-secrets DJANGO_SUPERUSER_PASSWORD=django_superuser_password:latest \
  --service-account $SERVICE_ACCOUNT \
  --command createuser

Menjalankan tugas Cloud Run

Setelah konfigurasi tugas diterapkan, jalankan migrasi:

gcloud run jobs execute migrate --region $REGION --wait

Pastikan output perintah ini menyatakan bahwa eksekusi "berhasil diselesaikan".

Anda akan menjalankan perintah ini nanti saat melakukan update pada aplikasi.

Dengan penyiapan database, buat pengguna menggunakan tugas:

gcloud run jobs execute createuser --region $REGION --wait

Pastikan output perintah ini menyatakan bahwa eksekusi "berhasil diselesaikan".

Anda tidak perlu menjalankan perintah ini lagi.

8. Men-deploy ke Cloud Run

Setelah layanan pendukung dibuat dan diisi, Anda kini dapat membuat layanan Cloud Run untuk mengaksesnya.

Deploy layanan ke Cloud Run, menggunakan image yang Anda bangun sebelumnya, dengan perintah berikut:

gcloud run deploy django-cloudrun \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage \
  --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \
  --set-secrets APPLICATION_SETTINGS=application_settings:latest \
  --service-account $SERVICE_ACCOUNT \
  --allow-unauthenticated

Jika berhasil, command line akan menampilkan URL layanan:

Service [django-cloudrun] revision [django-cloudrun-00001-...] has been deployed and is serving 100 percent of traffic.
Service URL: https://django-cloudrun-...run.app

Sekarang Anda dapat melihat container yang telah di-deploy dengan membuka URL ini di browser web:

d2dfaf668baabfcc.png

9. Mengakses Django Admin

Salah satu fitur utama Django adalah admin interaktifnya.

Memperbarui setelan CSRF

Django menyertakan perlindungan terhadap Pemalsuan Permintaan Lintas Situs (CSRF). Setiap kali formulir dikirim di situs Django Anda, termasuk login ke admin Django, setelan Origin Tepercaya akan diperiksa. Jika tidak cocok dengan asal permintaan, Django akan menampilkan error.

Dalam file mysite/settings.py, jika variabel lingkungan CLOUDRUN_SERVICE_URL ditentukan, variabel tersebut akan digunakan dalam setelan CSRF_TRUSTED_ORIGINS dan ALLOWED_HOSTS. Meskipun menentukan ALLOWED_HOSTS tidak wajib, sebaiknya tambahkan ini karena sudah diperlukan untuk CSRF_TRUSTED_ORIGINS.

Karena Anda memerlukan URL layanan, konfigurasi ini tidak dapat ditambahkan sebelum deployment pertama selesai.

Anda harus mengupdate layanan untuk menambahkan variabel lingkungan ini. Ini dapat ditambahkan ke rahasia application_settings, atau ditambahkan langsung sebagai variabel lingkungan.

Implementasi di bawah memanfaatkan pemformatan dan escape gcloud.

Ambil URL layanan Anda:

CLOUDRUN_SERVICE_URLS=$(gcloud run services describe django-cloudrun \
  --region $REGION  \
  --format "value(metadata.annotations[\"run.googleapis.com/urls\"])" | tr -d '"[]')
echo $CLOUDRUN_SERVICE_URLS

Tetapkan nilai ini sebagai variabel lingkungan di layanan Cloud Run Anda:

gcloud run services update django-cloudrun \
  --region $REGION \
  --update-env-vars "^##^CLOUDRUN_SERVICE_URLS=$CLOUDRUN_SERVICE_URLS"

Login ke Admin Django

Untuk mengakses antarmuka admin Django, tambahkan /admin ke URL layanan Anda.

Sekarang, login dengan nama pengguna "admin" dan ambil sandi Anda menggunakan perintah berikut:

gcloud secrets versions access latest --secret django_superuser_password && echo ""

678cd382b7039769.pngS

de755ef7a1779dc6.png

10. Mengembangkan aplikasi

Saat mengembangkan aplikasi, Anda perlu mengujinya secara lokal. Untuk melakukannya, Anda harus terhubung ke database Cloud SQL ("production"), atau database lokal ("test").

Menghubungkan ke database produksi

Anda dapat terhubung ke instance Cloud SQL menggunakan Cloud SQL Auth Proxy. Aplikasi ini membuat koneksi dari komputer lokal Anda ke database.

Setelah Anda menginstal Proxy Auth Cloud SQL, ikuti langkah-langkah berikut:

# Create a virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt

# Copy the application settings to your local machine
gcloud secrets versions access latest --secret application_settings > temp_settings

# Run the Cloud SQL Auth Proxy
./cloud-sql-proxy --instances=${PROJECT_ID}:${REGION}:myinstance=tcp:5432

# In a new tab, start the local web server using these new settings
USE_CLOUD_SQL_AUTH_PROXY=true APPLICATION_SETTINGS=$(cat temp_settings) python manage.py runserver

Pastikan Anda menghapus file temp_settings setelah menyelesaikan pekerjaan Anda.

Menghubungkan ke database SQLite lokal

Atau, Anda dapat menggunakan database lokal saat mengembangkan aplikasi. Django mendukung database PostgreSQL dan SQLite, dan ada beberapa fitur yang dimiliki PostgreSQL yang tidak dimiliki SQLite, tetapi dalam banyak kasus, fungsinya identik.

Untuk menyiapkan SQLite, Anda harus memperbarui setelan aplikasi agar mengarah ke database lokal, lalu menerapkan migrasi skema.

Untuk menyiapkan metode ini:

# Create a virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt

# Copy the application settings to your local machine
gcloud secrets versions access latest --secret application_settings > temp_settings

# Edit the DATABASE_URL setting to use a local sqlite file. For example:
DATABASE_URL=sqlite:////tmp/my-tmp-sqlite.db

# Set the updated settings as an environment variable
APPLICATION_SETTINGS=$(cat temp_settings) 

# Apply migrations to the local database
python manage.py migrate

# Start the local web server
python manage.py runserver

Pastikan Anda menghapus file temp_settings setelah menyelesaikan pekerjaan Anda.

Membuat migrasi

Saat membuat perubahan pada model database, Anda mungkin perlu membuat file migrasi Django dengan menjalankan python manage.py makemigrations.

Anda dapat menjalankan perintah ini setelah menyiapkan koneksi database produksi atau pengujian. Atau, Anda dapat membuat file migrasi tanpa database dengan memberikan setelan kosong:

SECRET_KEY="" DATABASE_URL="" GS_BUCKET_NAME="" python manage.py makemigrations

Menerapkan update aplikasi

Untuk menerapkan perubahan pada aplikasi, Anda harus:

  • membangun perubahan Anda menjadi sebuah {i>image<i} baru,
  • terapkan migrasi database atau statis, lalu
  • mengupdate layanan Cloud Run untuk menggunakan image baru.

Untuk mem-build image:

gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage

Jika Anda memiliki migrasi untuk diterapkan, jalankan tugas Cloud Run:

gcloud run jobs execute migrate --region $REGION --wait

Untuk mengupdate layanan dengan image baru:

gcloud run services update django-cloudrun \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage

11. Selamat!

Anda baru saja men-deploy project kompleks ke Cloud Run.

  • Cloud Run meningkatkan skala image container secara otomatis dan horizontal untuk menangani permintaan yang diterima, lalu menurunkan skala saat permintaan berkurang. Anda hanya membayar untuk CPU, memori, dan jaringan yang terpakai selama penanganan permintaan.
  • Cloud SQL memungkinkan Anda menyediakan instance PostgreSQL terkelola yang dikelola secara otomatis untuk Anda, dan terintegrasi secara native ke banyak sistem Google Cloud.
  • Cloud Storage memungkinkan Anda memiliki penyimpanan cloud dengan cara yang mudah diakses di Django.
  • Dengan Secret Manager, Anda dapat menyimpan secret, dan membuatnya dapat diakses oleh bagian Google Cloud tertentu, bukan yang lainnya.

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Platform Anda untuk resource yang digunakan dalam tutorial ini:

  • Di Cloud Console, buka halaman Mengelola resource.
  • Dalam daftar project, pilih project Anda lalu klik Delete.
  • Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Pelajari lebih lanjut