Google Cloud Build'i Google Cloud SQL'e Bağlayın
Google Cloud Run, Cloud SQL kullanımına izin verir. Peki ya kapsayıcınızı Google Cloud Build'de oluştururken Cloud SQL'e ihtiyacınız varsa? Mümkün mü?
Arka fon
Google Cloud Run'da bir Kapsayıcıda çalışan bir Next.js projem var. Kodumu Cloud Build'e aktarmak (öğeleri yüklemek, statik sayfalar oluşturmak ve her şeyi bir Container'a koymak) ve Cloud Run'a dağıtmak mükemmel şekilde çalışıyor. 👌
Cloud SQL
Ancak, Google Cloud SQL üzerinde çalışan PostgreSQL örneğimden bazı verilere ihtiyaç duyduğu bazı işlevler ekledim. Bu veriler proje oluşturulurken (statik sayfalar oluşturulurken) kullanılır.
Yerel olarak, makinemde, proje CloudSQL proxy'ime bağlanabildiğinden bu iyi çalışıyor. CloudRun'da çalışırken, Cloud Run, Cloud SQL'deki Postgres örneğime bağlanmaya izin verdiği için bu da çalışmalıdır .
Benim sorunum
Projemi Cloud Build ile oluştururken, statik sayfalarımı oluşturabilmek için veritabanıma erişmem gerekiyor. Docker bulut oluşturucumu Cloud SQL'e bağlamanın bir yolunu arıyorum, tıpkı Cloud Run'ın (tam olarak yönetilen) Cloud SQL Proxy kullanarak bağlanan bir mekanizma sağladığı gibi.
Bu şekilde /cloudsql/INSTANCE_CONNECTION_NAME
projemi oluştururken bağlanabilirim !
Soru
Öyleyse sorum şu: Projemi Google Cloud Build üzerinde oluştururken Cloud SQL Proxy aracılığıyla Google Cloud SQL'deki PostgreSQL örneğime nasıl bağlanırım?
Veritabanı kimlik bilgilerim gibi şeyler zaten Secrets Manager'da yaşıyor, bu yüzden tahmin ettiğim bu ayrıntıları kullanabilmeliyim 🤔
Yanıtlar
Statik sayfalarınızı oluşturmak için istediğiniz (ve ihtiyacınız olan) konteyneri kullanabilir ve veritabanı ile bir tünel açmak için cloud sql proxy'yi indirebilirsiniz.
- 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>
Uygulama motoru, sizin için Cloud SQL'inizde proxy oluşturma avantajına sahip bir yürütme sarmalayıcısına sahiptir, bu nedenle bunu bulut derlemesindeki DB'ye bağlanmak için kullanıyorum ( bazı google eğiticileri de öyle ).
Bununla birlikte, önünüzdeki sorunla ilgili olarak uyarıda bulunun: Cloud Build yalnızca * çalışır, us-central1
bu da başka bir yerden bağlanmanın patolojik olarak yavaş olacağı anlamına gelir. Bir veya iki işlem için, umurumda değil, ancak işe yaramayacak bir dizi entegrasyon testi çalıştırıyorsanız.
Ayrıca, GCB'nin GCSQL'e erişmesine izin vermeniz gerekir .
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
* Daha fazla ödeme yapmaya istekli değilseniz ve Beta yazılımı tarafından çok etkilenmedikçe, bu durumda bulut oluşturma çalışanlarını kullanabilirsiniz (yazarken Beta sürümündedir, neyse ... üretime sokun ve sorunları düzeltin)