Проблемы с подключением контейнера Docker к PostgreSQL в App Engine с использованием Flask

Я хочу развернуть приложение Flask, которое использует Orator как ORM, и у меня возникают проблемы с подключением к экземпляру SQL в облачной платформе Google. Я уже настроил разрешения IAM, как описано здесь, но я до сих пор не могу подключиться к экземпляру. Если я вручную установил разрешение брандмауэра IP-адреса экземпляра, соединение будет успешным, но если IP-адрес изменится (он выполняет несколько раз), я больше не могу подключиться.

Это мой файл Docker:

FROM gcr.io/google-appengine/python

RUN virtualenv /env

ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt

ADD . /app

CMD gunicorn -b :$PORT main:app

Это мой app.yaml:

runtime: custom
env: flex

env_variables:
 POSTGRES_HOST: <sql-instance-ip>
 POSTGRES_DB: <my-postgres-db>
 POSTGRES_USER: <my-postgres-user>
 POSTGRES_PASSWORD: <my-postgres-password>

automatic_scaling:
 min_num_instances: 1
 max_num_instances: 1
</my-postgres-password></my-postgres-user></my-postgres-db></sql-instance-ip>
1 ответ

Проблема заключалась в том, что cloud_sql_proxy не выполнялся в моем изображении докеров. Для этого мне пришлось создать такой скрипт:

run_app.sh

#!/bin/bash

/app/cloud_sql_proxy -dir=/cloudsql -instances=<instance-connection-name> -credential_file=<credential-file> &
gunicorn -b :$PORT main:app
</credential-file></instance-connection-name>

Затем дайте ему разрешение на выполнение:

chmod +x run_app.sh

Затем изменил мой файл Docker, чтобы он загружал cloud_sql_proxy, создавал каталог /cloudsql и запускал new_script:

FROM gcr.io/google-appengine/python

RUN virtualenv /env

ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt

RUN wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O /app/cloud_sql_proxy
RUN chmod +x /app/cloud_sql_proxy
RUN mkdir /cloudsql; chmod 777 /cloudsql

ADD . /app

CMD /app/run_app.sh

И, наконец, изменил POSTGRES_HOST в моей app.yaml:

runtime: custom
env: flex

env_variables:
 POSTGRES_HOST: "/cloudsql/<instance-connection-name>"
 POSTGRES_DB: <my-postgres-db>
 POSTGRES_USER: <my-postgres-user>
 POSTGRES_PASSWORD: <my-postgres-password>

automatic_scaling:
 min_num_instances: 1
 max_num_instances: 1
</my-postgres-password></my-postgres-user></my-postgres-db></instance-connection-name>

ура

licensed under cc by-sa 3.0 with attribution.