这是一个AWS Aurora Serverless Data API方言,用于SQLAlchemy。这是一个临时包,允许通过SQLAlchemy URI传递凭据。
项目描述
此包提供了一种SQLAlchemy 方言,用于通过AWS Aurora Data API访问PostgreSQL和MySQL数据库。
安装
pip install sqlalchemy-aurora-data-api
先决条件
设置一个AWS Aurora Serverless集群并为其启用数据API访问。如果您之前已设置Aurora Serverless集群,可以使用以下AWS CLI命令启用数据API
aws rds modify-db-cluster --db-cluster-identifier DB_CLUSTER_NAME --enable-http-endpoint --apply-immediately
使用Data API预期格式(一个具有“username”和“password”键的JSON对象)将数据库凭据保存在AWS Secrets Manager中
aws secretsmanager create-secret --secret-id rds-db-credentials/MY_DB aws secretsmanager put-secret-value --secret-id rds-db-credentials/MY_DB --secret-string "$(jq -n '.username=env.PGUSER | .password=env.PGPASSWORD')"
使用标准AWS约定配置您的AWS命令行凭据。您可以通过运行AWS CLI中的测试查询来验证一切是否正常工作
aws rds-data execute-statement --resource-arn RESOURCE_ARN --secret-arn SECRET_ARN --sql "select * from pg_catalog.pg_tables"
在此,RESOURCE_ARN是指Aurora RDS数据库ARN,您可以在AWS RDS控制台(点击您的数据库,然后“配置”)或通过运行aws rds describe-db-clusters在CLI中找到。SECRET_ARN是指上面创建的AWS Secrets Manager密钥。
在运行已部署的代码(在EC2实例、ECS/EKS容器或Lambda中)时,您可以使用托管IAM策略AmazonRDSDataFullAccess来授予您的IAM角色访问RDS数据API的权限(尽管此策略便于测试,但我们建议您为生产应用程序创建自己的更小范围的最小权限策略)。
使用方法
此包注册了两个SQLAlchemy方言,mysql+auroradataapi://和postgresql+auroradataapi://。连接到数据库需要两个sqlalchemy.create_engine() connect_args关键字参数
aurora_cluster_arn(在数据API文档中称为resourceArn)
如果没有作为关键字参数提供,也可以使用AURORA_CLUSTER_ARN环境变量指定
secret_arn(数据库凭证密钥)
如果没有作为关键字参数提供,也可以使用AURORA_SECRET_ARN环境变量指定
除了协议(方言)和数据库名称(路径组件,以下示例中的my_db_name)之外,所有连接字符串内容都将被忽略。
from sqlalchemy import create_engine
cluster_arn = "arn:aws:rds:us-east-1:123456789012:cluster:my-aurora-serverless-cluster"
secret_arn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:rds-db-credentials/MY_DB"
engine = create_engine('postgresql+auroradataapi://:@/my_db_name',
echo=True,
connect_args=dict(aurora_cluster_arn=cluster_arn, secret_arn=secret_arn))
with engine.connect() as conn:
for result in conn.execute("select * from pg_catalog.pg_tables"):
print(result)
动机
RDS数据API是AWS Lambda无服务器环境和由PostgreSQL和MySQL提供的复杂功能之间的桥梁。数据API通过HTTP隧道传递SQL,这在AWS Lambda的上下文中具有优势
它消除了打开数据库端口到AWS Lambda公共IP地址池的需求
它使用无状态的HTTP连接,而不是大多数数据库驱动程序使用的有状态的内部TCP连接池(有状态的池在经过AWS Lambda冻结-解冻周期后变得无效,导致连接错误,并使数据库服务器负担废弃的无效连接)
它使用AWS基于角色的身份验证,消除了Lambda直接处理数据库凭证的需求
调试
此包使用标准的Python日志约定。要启用调试输出,将包日志级别设置为DEBUG
logging.basicConfig() logging.getLogger("aurora_data_api").setLevel(logging.DEBUG)
链接
aurora-data-api,sqlalchemy-aurora-data-api所依赖的Python DB-API 2.0客户端
错误
请在GitHub上报告错误、问题、功能请求等。
许可证
根据Apache License,版本2.0许可。
项目详情
preset-sqlalchemy-aurora-data-api-0.2.8.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ca495b2b972732c4d7e9434b4a826875f842d922b62ab1b98a33b15043c5a254 |
|
MD5 | 5fec6e4cdc322b29af6dd04682efd2ab |
|
BLAKE2b-256 | b6f18b13fd7ef10844aeda596128b2442433f0fb9181b6c36c9e4d0a9ad530ed |