Skip to content

Unable to connect to RDS Proxy #952

@charles-d-burton

Description

@charles-d-burton

asyncpg=0.26.0
postgres=13.4

We're trying to connect to RDS through and RDS proxy with IAM auth and it doesn't work. We've verified that the provided code works fine when connecting straight to the database with IAM auth. We've also tested that we can connect through the proxy to the database. The only piece that does not work is asyncpg. This also works when using aiopg.

EDIT:
I suspect that it's something with SSL but we've gotten nowhere pretty fast on it. The logs on RDS Proxy don't say anything other than Internal Error which is very.... unhelpful.

import asyncio import aiopg import asyncpg import boto3 import os import sys import ssl import certifi from urllib.parse import quote_plus ENDPOINT="<our proxy url>" PORT="5432" USER="<our user>" REGION="us-east-1" DBNAME="<our db>" session = boto3.Session(profile_name='profile') client = session.client('rds') token = client.generate_db_auth_token(DBHostname=ENDPOINT, Port=PORT, DBUsername=USER, Region=REGION) # type: ignore async def main(): try: print("trying connection") conn = await asyncpg.connect(dsn=f"postgres://{USER}:{quote_plus(token)}@{ENDPOINT}:5432/{DBNAME}?sslmode=require&sslrootcert=./AmazonRootCA1.pem") #conn = await asyncpg.connect(user=USER, password=quote_plus(token), database=DBNAME, host=ENDPOINT, ssl='require') print("connected, trying query") print(await conn.fetch("SELECT 'connected'")) except Exception as e: print("CAUSE", e.__cause__) raise # async with aiopg.connect(f'dbname={DBNAME} user={USER} password={token} host={ENDPOINT} sslmode=require') as conn: # async with conn.cursor() as cur: # await cur.execute("SELECT 'connected'") # async for row in cur: # print(row) asyncio.run(main())

The error we get back is

Traceback (most recent call last): File "/tmp/test/__init__.py", line 50, in <module> asyncio.run(main()) File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run return loop.run_until_complete(main) File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete return future.result() File "/tmp/test/__init__.py", line 35, in main conn = await asyncpg.connect(dsn=f"postgres://{USER}:{quote_plus(token)}@{ENDPOINT}:5432/{DBNAME}?sslmode=require&sslrootcert=./AmazonRootCA1.pem") File "/home/charles/.local/lib/python3.10/site-packages/asyncpg/connection.py", line 2093, in connect return await connect_utils._connect( File "/home/charles/.local/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 889, in _connect return await _connect_addr( File "/home/charles/.local/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 776, in _connect_addr return await __connect_addr(params, timeout, False, *args) File "/home/charles/.local/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 839, in __connect_addr await compat.wait_for(connected, timeout=timeout) File "/home/charles/.local/lib/python3.10/site-packages/asyncpg/compat.py", line 66, in wait_for return await asyncio.wait_for(fut, timeout) File "/usr/lib/python3.10/asyncio/tasks.py", line 445, in wait_for return fut.result() asyncpg.exceptions.ConnectionDoesNotExistError: connection was closed in the middle of operation``` 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions