Połącz Google Cloud Build z Google Cloud SQL

Dec 16 2020

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_NAMEpodczas 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

5 guillaumeblaquiere Dec 16 2020 at 23:42

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>        

1 thclark Dec 21 2020 at 01:05

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-central1co 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)