Conectando o serviço Google Cloud Run ao banco de dados Google Cloud SQL
Tenho 2 serviços em nuvem do Google:
- Serviço Google Cloud Run (Node Js / Strapi)
- 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
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.