Connecting a Python Sanic App on Cloud Run to PostgreSQL on Cloud SQL

107 views Asked by At

I am able to connect to PostgreSQL on Cloud SQL via pgAdmin and also when running the Python Sanic application locally. But when I deploy the application on Cloud Run and try connecting to PostgreSQL, an error with the following stack trace occurs (from Cloud Run logs):

File "/usr/local/lib/python3.8/site-packages/tortoise/queryset.py", line 1008, in _execute
instance_list = await self._db.executor_class(
File "/usr/local/lib/python3.8/site-packages/tortoise/backends/base/executor.py", line 131, in execute_select
_, raw_results = await self.db.execute_query(query.get_sql())
File "/usr/local/lib/python3.8/site-packages/tortoise/backends/base_postgres/client.py", line 34, in _translate_exceptions
return await self._translate_exceptions(func, *args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/tortoise/backends/asyncpg/client.py", line 82, in _translate_exceptions
return await func(self, *args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/tortoise/backends/asyncpg/client.py", line 129, in execute_query
async with self.acquire_connection() as connection:
File "/usr/local/lib/python3.8/site-packages/tortoise/backends/base/client.py", line 326, in __aenter__
await self.ensure_connection()
File "/usr/local/lib/python3.8/site-packages/tortoise/backends/base/client.py", line 322, in ensure_connection await self.client.create_connection(with_db=True)
File "/usr/local/lib/python3.8/site-packages/tortoise/backends/asyncpg/client.py", line 59, in create_connection self._pool = await self.create_pool(password=self.password, **self._template)
File "/usr/local/lib/python3.8/site-packages/tortoise/backends/asyncpg/client.py", line 65, in create_pool return await asyncpg.create_pool(None, **kwargs)
File "/usr/local/lib/python3.8/site-packages/asyncpg/pool.py", line 409, in _async__init__
await self._initialize()
File "/usr/local/lib/python3.8/site-packages/asyncpg/pool.py", line 437, in _initialize
await first_ch.connect()
File "/usr/local/lib/python3.8/site-packages/asyncpg/pool.py", line 129, in connect
self._con = await self._pool._get_new_connection()
File "/usr/local/lib/python3.8/site-packages/asyncpg/pool.py", line 514, in _get_new_connection
con = await connection.connect(
File "/usr/local/lib/python3.8/site-packages/asyncpg/connection.py", line 2114, in connect
return await connect_utils._connect(
File "/usr/local/lib/python3.8/site-packages/asyncpg/connect_utils.py", line 1011, in _connect
raise last_error or exceptions.TargetServerAttributeNotMatched(
File "/usr/local/lib/python3.8/site-packages/asyncpg/connect_utils.py", line 982, in _connect
conn = await _connect_addr(
File "/usr/local/lib/python3.8/site-packages/asyncpg/connect_utils.py", line 808, in _connect_addr
return await __connect_addr(params, timeout, True, *args)
File "/usr/local/lib/python3.8/site-packages/asyncpg/connect_utils.py", line 860, in __connect_addr
tr, pr = await compat.wait_for(connector, timeout=timeout)
File "/usr/local/lib/python3.8/site-packages/asyncpg/compat.py", line 60, in wait_for
return await asyncio.wait_for(fut, timeout)
File "/usr/local/lib/python3.8/asyncio/tasks.py", line 494, in wait_for
return fut.result()
File "/usr/local/lib/python3.8/site-packages/asyncpg/connect_utils.py", line 719, in _create_ssl_connection
tr, pr = await loop.create_connection(
File "uvloop/loop.pyx", line 1978, in create_connection
socket.gaierror: [Errno -3] Try again"

I am using the Tortoise ORM and in particular https://tortoise.github.io/contrib/sanic.html#contrib-sanic to integrate it with Sanic. My connection code is as follows:

{
   "connections": {
       "default": {
           "engine": "tortoise.backends.asyncpg",
           "credentials": {
               "host": "test:us-west1:test",     # Connection name on Cloud SQL
               "port": "5432",
               "user": "postgres",
               "password": "test",
               "database": "test"
           }
       }
   },
   "apps": {
       "models": {
           "models": ["models"]
       }
   }
}

PostgreSQL is setup on Cloud SQL to accept unencrypted (i.e. non-SSL) connections. Any help in resolving this would be greatly appreciated. Thanks.

0

There are 0 answers