Hubungkan Google Cloud Build ke Google Cloud SQL
Google Cloud Run memungkinkan untuk menggunakan Cloud SQL. Namun, bagaimana jika Anda membutuhkan Cloud SQL saat membuat container di Google Cloud Build? Apakah itu mungkin?
Latar Belakang
Saya memiliki proyek Next.js, yang berjalan di Container di Google Cloud Run. Mendorong kode saya ke Cloud Build (menginstal barang, membuat halaman statis, dan memasukkan semuanya ke dalam Container) dan menerapkan ke Cloud Run berfungsi dengan sempurna. đź‘Ś
Cloud SQL
Namun, saya baru saja menambahkan beberapa fungsi yang juga memerlukan beberapa data dari instance PostgreSQL saya yang berjalan di Google Cloud SQL. Data ini digunakan saat membangun proyek (menghasilkan halaman statis).
Secara lokal, di komputer saya, ini berfungsi dengan baik karena proyek dapat terhubung ke proxy CloudSQL saya. Saat berjalan di CloudRun, ini juga harus berfungsi, karena Cloud Run memungkinkan untuk menghubungkan ke instance Postgres saya di Cloud SQL .
Masalahku
Saat membangun proyek saya dengan Cloud Build, saya memerlukan akses ke database saya untuk dapat menghasilkan halaman statis saya. Saya mencari cara untuk menghubungkan pembuat cloud Docker saya ke Cloud SQL, mungkin seperti Cloud Run (terkelola sepenuhnya) menyediakan mekanisme yang terhubung menggunakan Proxy Cloud SQL.
Dengan cara itu saya dapat terhubung /cloudsql/INSTANCE_CONNECTION_NAME
saat membangun proyek saya!
Pertanyaan
Jadi pertanyaan saya adalah: Bagaimana cara saya terhubung ke instance PostgreSQL saya di Google Cloud SQL melalui Proxy Cloud SQL sambil membuat proyek saya di Google Cloud Build?
Hal-hal seperti kredensial database saya, dll. Sudah ada di Secrets Manager, jadi saya seharusnya dapat menggunakan detail tersebut
Jawaban
Anda dapat menggunakan penampung yang Anda inginkan (dan Anda perlukan) untuk menghasilkan halaman statis Anda, dan mengunduh proxy cloud sql untuk membuka terowongan dengan database
- name: '<YOUR CONTAINER>'
entrypoint: 'sh'
args:
- -c
- |
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
chmod +x cloud_sql_proxy
./cloud_sql_proxy -instances=<my-project-id:us-central1:myPostgresInstance>=tcp:5432 &
<YOUR SCRIPT>
App engine memiliki pembungkus exec yang memiliki manfaat untuk membuat proxy Cloud SQL Anda, jadi saya menggunakannya untuk menyambungkan ke DB di cloud build ( jadi lakukan beberapa tutorial google ).
Namun, berhati-hatilah terhadap masalah yang akan datang: Cloud Build berjalan secara eksklusif * us-central1
yang berarti akan lambat secara patologis untuk terhubung dari tempat lain. Untuk satu atau dua operasi, saya tidak peduli tetapi jika Anda menjalankan seluruh rangkaian pengujian integrasi yang tidak akan berfungsi.
Selain itu, Anda harus memberikan izin kepada GCB untuk mengakses GCSQL.
steps:
- id: 'Connect to DB using appengine wrapper to help'
name: gcr.io/google-appengine/exec-wrapper
args:
[
'-i', # The image you want to connect to the db from
'$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME:$SHORT_SHA',
'-s', # The postgres instance
'${PROJECT_ID}:${_POSTGRES_REGION}:${_POSTGRES_INSTANCE_NAME}', '-e', # Get your secrets here... 'GCLOUD_ENV_SECRET_NAME=${_GCLOUD_ENV_SECRET_NAME}',
'--', # And then the command you want to run, in my case a database migration
'python',
'manage.py',
'migrate',
]
substitutions:
_GCLOUD_ENV_SECRET_NAME: mysecret
_GCR_HOSTNAME: eu.gcr.io
_POSTGRES_INSTANCE_NAME: my-instance
_POSTGRES_REGION: europe-west1
* kecuali Anda bersedia membayar lebih dan sangat tersengat oleh perangkat lunak Beta, dalam hal ini Anda dapat menggunakan pekerja pembangunan cloud (pada saat penulisan dalam versi Beta, bagaimanapun ... Saya akan kembali dan memperbarui jika mereka membuat itu ke dalam produksi dan memperbaiki masalah)