Połącz Google Cloud Build z Google Cloud SQL
Google Cloud Run umożliwia korzystanie z Cloud SQL. Ale co, jeśli potrzebujesz Cloud SQL do tworzenia kontenera w Google Cloud Build? Czy to jest możliwe?
tło
Mam projekt Next.js, który działa w kontenerze w Google Cloud Run. Przekazanie mojego kodu do Cloud Build (zainstalowanie rzeczy, wygenerowanie stron statycznych i umieszczenie wszystkiego w kontenerze) i wdrożenie w Cloud Run działa idealnie. 👌
Cloud SQL
Ale właśnie dodałem pewną funkcjonalność, która wymaga również niektórych danych z mojej instancji PostgreSQL, która działa w Google Cloud SQL. Dane te są wykorzystywane podczas budowania projektu (generowania stron statycznych).
Lokalnie na moim komputerze działa to dobrze, ponieważ projekt może łączyć się z moim proxy CloudSQL. Podczas pracy w CloudRun powinno to również działać, ponieważ Cloud Run umożliwia połączenie z moją instancją Postgres w Cloud SQL .
Mój problem
Podczas budowania projektu za pomocą Cloud Build potrzebuję dostępu do mojej bazy danych, aby móc generować moje strony statyczne. Szukam sposobu na połączenie mojego Dockera Cloud Builder z Cloud SQL, być może tak jak Cloud Run (w pełni zarządzany) zapewnia mechanizm, który łączy się za pomocą Cloud SQL Proxy.
W ten sposób mogę się połączyć /cloudsql/INSTANCE_CONNECTION_NAME
podczas tworzenia mojego projektu!
Pytanie
Moje pytanie brzmi: Jak połączyć się z moją instancją PostgreSQL w Google Cloud SQL za pośrednictwem serwera proxy Cloud SQL podczas tworzenia projektu w Google Cloud Build?
Rzeczy takie jak moje dane logowania do bazy danych itp. Już znajdują się w Menedżerze tajemnic, więc chyba powinienem być w stanie wykorzystać te dane 🤔
Odpowiedzi
Możesz użyć kontenera, który chcesz (i potrzebujesz), aby wygenerować swoje strony statyczne i pobrać serwer proxy SQL w chmurze, aby otworzyć tunel z bazą danych
- 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>
Silnik aplikacji ma opakowanie exec, które ma tę zaletę, że pośredniczy w obsłudze Cloud SQL, więc używam go do łączenia się z bazą danych w chmurze ( tak samo jak kilka samouczków Google ).
Należy jednak pamiętać o przyszłych problemach: Cloud Build działa wyłącznie *, us-central1
co oznacza, że łączenie się z dowolnego innego miejsca będzie patologicznie powolne. W przypadku jednej lub dwóch operacji nie obchodzi mnie, ale jeśli uruchamiasz cały pakiet testów integracyjnych, które po prostu nie zadziałają.
Musisz także przyznać GCB pozwolenie na dostęp do 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
* chyba że chcesz zapłacić więcej i zostaniesz bardzo ukąszony przez oprogramowanie Beta, w takim przypadku możesz użyć pracowników do budowania w chmurze (w chwili pisania tego tekstu są w każdym razie w wersji beta ... wrócę i zaktualizuję, jeśli zrobią) do produkcji i napraw problemy)