Conectando o serviço Google Cloud Run ao banco de dados Google Cloud SQL

Oct 30 2020

Tenho 2 serviços em nuvem do Google:

  1. Serviço Google Cloud Run (Node Js / Strapi)
  2. Serviço Google Cloud SQL (Mysql)

Eu adicionei a conexão do Cloud SQL ao serviço Google Cloud Run da IU e tenho um IP público para o serviço Google Cloud SQL. Além disso, adicionei o IP do Run Service às redes autorizadas do SQL Service.

Se eu tentar me conectar de outro servidor (externo da nuvem do Google), posso me conectar facilmente ao serviço Google Cloud SQL e executar consultas. Mas se eu tentar conectar de dentro do GCloud Run Service com exatamente as mesmas configurações (Ip, database_name, etc), minha conexão trava e recebo um erro de tempo limite nos logs ...

Como permitir que o Gcloud SQL aceite conexões do GCloud RUN?

Procurei outras respostas aqui, mas todas parecem muito antigas (por volta de 2015)

Respostas

3 guillaumeblaquiere Oct 30 2020 at 02:55

Você pode usar 3 modos para acessar seu banco de dados

  • Use o recurso integrado. Neste caso, você não precisa especificar o endereço IP, é um soquete Linux que está aberto para se comunicar com o banco de dados conforme descrito na documentação
  • Use o IP privado do Cloud SQL. Desta vez, não há necessidade de configurar uma conexão no serviço Cloud Run, você não vai usar porque vai usar o IP, não o soquete linux. Esta solução requer 2 coisas
    • Primeiro, anexe seu banco de dados ao VPC e dê a ele um IP privado
    • Em seguida, você precisa rotear o tráfego de IP privado do Cloud Run por meio de seu VPC. Para isso, você deve criar e, em seguida, anexar ao serviço Cloud RUn, um conector VPC sem servidor
  • Use o IP público do CLoud SQL. Desta vez, novamente, não há necessidade de configurar uma conexão no serviço Cloud Run, você não o usará porque usará o IP, não o soquete do linux. Para conseguir isso, você precisa de mais etapas (e é menos seguro)
    • Você precisa rotear todo o tráfego de saída do Cloud Run por meio de seu VPC. Para isso, você deve criar e, em seguida, anexar ao serviço Cloud RUn, um conector VPC sem servidor
    • Implante seu serviço Cloud Run com o conector VPC sem servidor e o parâmetro de conectividade de saída para "todos"
    • Em seguida, crie um Cloud NAT para rotear todo o tráfego de intervalo de IP do Conector VPC para um único IP (ou conjunto de IPs) (o link é a documentação do Cloud Functions, mas funciona exatamente da mesma maneira)
    • Por fim, autorize os IPs do Cloud NAT nas redes autorizadas do Cloud SQL.

No seu caso, você colocou o IP Cloud Run na lista de permissões, mas é um IP compartilhado (outro serviço pode usar o mesmo !! Tenha cuidado) e nem sempre é o mesmo, há um pool de endereços IP usados ​​pela nuvem do Google.