1. Pengantar
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 berinteraksi secara native dengan banyak bagian ekosistem Google Cloud lainnya, termasuk Cloud SQL untuk database terkelola, Cloud Storage untuk penyimpanan objek terpadu, dan Secret Manager untuk mengelola secret.
Wagtail adalah sistem pengelolaan konten (CMS) open source yang dibuat di atas Django. Django adalah framework web Python level tinggi.
Dalam tutorial ini, Anda akan menggunakan komponen ini untuk men-deploy project Wagtail kecil.
Catatan: Codelab ini terakhir diverifikasi dengan Wagtail 5.2.2, yang mendukung Django 5.
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
- 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.
- 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.
- 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 dari jarak jauh menggunakan laptop Anda, dalam codelab ini kita akan menggunakan Google Cloud Shell, yakni lingkungan command line yang berjalan di Cloud.
Mengaktifkan Cloud Shell
- Dari Cloud Console, klik Aktifkan Cloud Shell .
Jika ini adalah pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Lanjutkan.
Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.
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 telah ditetapkan ke project ID Anda.
- 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`
- 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 adalah pertama kalinya Anda memanggil API dari gcloud, Anda akan diminta untuk memberikan 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 template project Wagtail default sebagai contoh project Wagtail. Untuk melakukannya, instal Wagtail untuk sementara guna membuat template.
Untuk membuat project template ini, gunakan Cloud Shell untuk membuat direktori baru bernama wagtail-cloudrun
lalu buka direktori tersebut:
mkdir ~/wagtail-cloudrun cd ~/wagtail-cloudrun
Kemudian, instal Wagtail ke dalam lingkungan virtual sementara:
virtualenv venv source venv/bin/activate pip install wagtail
Kemudian, buat project template baru di folder saat ini:
wagtail start myproject .
Sekarang Anda akan memiliki project Wagtail template di folder saat ini:
ls -F
Dockerfile home/ manage.py* myproject/ requirements.txt search/ venv/
Anda sekarang dapat keluar dan menghapus lingkungan virtual sementara:
deactivate rm -rf venv
Dari sini, Wagtail akan dipanggil di dalam penampung.
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 region:
REGION=us-central1
Membuat akun layanan
Untuk membatasi akses yang akan dimiliki layanan ke bagian Google Cloud lainnya, buat akun layanan khusus:
gcloud iam service-accounts create cloudrun-serviceaccount
Anda akan mereferensikan akun ini berdasarkan emailnya di bagian selanjutnya 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 di-build, 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.
Pada 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
Berikan izin akun layanan 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
Karena objek yang disimpan di bucket akan memiliki asal yang berbeda (URL bucket, bukan URL Cloud Run), Anda perlu mengonfigurasi setelan Cross Origin Resource Sharing (CORS).
Buat file baru bernama cors.json
, dengan konten berikut:
touch cors.json cloudshell edit cors.json
cors.json
[
{
"origin": ["*"],
"responseHeader": ["Content-Type"],
"method": ["GET"],
"maxAgeSeconds": 3600
}
]
Terapkan konfigurasi CORS ini ke bucket penyimpanan yang baru dibuat:
gsutil cors set cors.json gs://$GS_BUCKET_NAME
Simpan 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. Secret Manager berfungsi 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
Lalu, buat rahasia bernama application_settings
, menggunakan file tersebut sebagai rahasia:
gcloud secrets create application_settings --data-file .env
Izinkan akun layanan mengakses secret ini:
gcloud secrets add-iam-policy-binding application_settings \ --member serviceAccount:${SERVICE_ACCOUNT} --role roles/secretmanager.secretAccessor
Pastikan bahwa rahasia telah dibuat dengan mencantumkan rahasia tersebut:
gcloud secrets versions list application_settings
Setelah mengonfirmasi bahwa secret telah dibuat, hapus file lokal:
rm .env
6. Konfigurasi aplikasi Anda
Project template yang sebelumnya Anda buat kini memerlukan beberapa perubahan. Perubahan ini akan mengurangi kompleksitas konfigurasi setelan template yang disertakan dengan Wagtail, dan juga mengintegrasikan Wagtail dengan layanan pendukung yang sebelumnya Anda buat.
Konfigurasi setelan
Temukan file setelan base.py
yang dihasilkan, lalu ganti namanya menjadi basesettings.py
di folder myproject
utama:
mv myproject/settings/base.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.
Kemudian, hapus folder setelan lama.
rm -rf myproject/settings/
Kemudian, Anda akan memiliki dua file setelan: satu dari Wagtail, dan satu lagi yang baru saja Anda buat yang dibuat dari setelan ini:
ls myproject/*settings*
myproject/basesettings.py myproject/settings.py
Terakhir, buka file setelan manage.py
, dan perbarui konfigurasi untuk memberi tahu Wagtail agar mengarah ke file settings.py
utama.
cloudshell edit manage.py
baris Manage.py (sebelumnya)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings.dev")
barismanage.py (setelah)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
Buat perubahan konfigurasi yang sama untuk file myproject/wsgi.py
:
cloudshell edit myproject/wsgi.py
baris myproject/wsgi.py (sebelumnya)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings.dev")
baris myproject/wsgi.py (setelah)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
Hapus Dockerfile yang dibuat secara otomatis:
rm Dockerfile
Dependensi Python
Temukan file requirements.txt
, lalu 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 mem-build 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, mem-build, dan menjalankan langkah-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
guna membuat akun administrator untuk 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 bernama khusus untuk digunakan sebagai pengganti prompt 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 menampilkan 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.
Deployment awal aplikasi dalam container ke Cloud Run dibuat menggunakan perintah berikut:
gcloud run deploy wagtail-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
Tunggu sebentar sampai proses deployment selesai. Jika berhasil, command line akan menampilkan URL layanan:
Service [wagtail-cloudrun] revision [wagtail-cloudrun-00001-...] has been deployed and is serving 100 percent of traffic. Service URL: https://wagtail-cloudrun-...run.app
Sekarang Anda dapat melihat container yang telah di-deploy dengan membuka URL ini di browser web:
9. Mengakses Admin Django
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.
Di 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 hal ini karena sudah diwajibkan untuk CSRF_TRUSTED_ORIGINS
.
Karena Anda memerlukan URL layanan, konfigurasi ini tidak dapat ditambahkan hingga setelah deployment pertama.
Anda harus mengupdate layanan untuk menambahkan variabel lingkungan ini. Project ID dapat ditambahkan ke secret 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 wagtail-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 wagtail-cloudrun \ --region $REGION \ --update-env-vars "^##^CLOUDRUN_SERVICE_URLS=$CLOUDRUN_SERVICE_URLS"
Login ke Django Admin
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 ""
10. Mengembangkan aplikasi
Saat mengembangkan aplikasi, Anda akan mengujinya secara lokal. Untuk melakukannya, Anda harus terhubung ke database Cloud SQL ("produksi"), atau database lokal ("pengujian").
Menghubungkan ke database produksi
Anda dapat terhubung ke instance Cloud SQL menggunakan Proxy Auth Cloud SQL. Aplikasi ini membuat koneksi dari komputer lokal Anda ke database.
Setelah 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 selesai bekerja.
Membuat migrasi
Saat melakukan 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 permohonan, Anda harus:
- mem-build perubahan Anda ke dalam image baru,
- terapkan migrasi database atau statis, lalu
- update layanan Cloud Run Anda untuk menggunakan image baru.
Untuk membuat gambar:
gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage
Jika Anda memiliki migrasi yang akan diterapkan, jalankan tugas Cloud Run:
gcloud run jobs execute migrate --region $REGION --wait
Untuk mengupdate layanan Anda dengan image baru:
gcloud run services update wagtail-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
- Django di Cloud Run: https://cloud.google.com/python/django/run
- Halo Cloud Run dengan Python: https://codelabs.developers.google.com/codelabs/cloud-run-hello-python3
- Python di Google Cloud: https://cloud.google.com/python
- Klien Python Google Cloud: https://github.com/googleapis/google-cloud-python
/