使用 IAM 身份验证和 适用于 Python 的 AWS 开发工具包 (Boto3) 连接到数据库集群 - Amazon Aurora
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 IAM 身份验证和 适用于 Python 的 AWS 开发工具包 (Boto3) 连接到数据库集群

您可以使用 适用于 Python 的 AWS 开发工具包 (Boto3) 从命令行连接到 Aurora MySQL 或 Aurora PostgreSQL 数据库集群,如下所述。

生成 IAM 身份验证令牌

您可以调用 generate_db_auth_token 方法来获取签名令牌。提供数据库集群终端节点、端口、用户名、AWS 区域和数据库引擎,以生成用于通过 IAM 凭证连接到数据库集群的令牌。以下代码示例说明如何使用 PostgreSQL 数据库执行此操作。

此代码可为 Aurora MySQL 数据库集群生成 IAM 身份验证令牌。

import sys import boto3 ENDPOINT="mysqlcluster.cluster-123456789012.us-east-1.rds.amazonaws.com" PORT="3306" USR="jane_doe" REGION="us-east-1" os.environ['LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN'] = '1' #gets the credentials from .aws/credentials session = boto3.Session(profile_name='RDSCreds') client = boto3.client('rds') token = client.generate_db_auth_token(DBHostname=ENDPOINT, Port=PORT, DBUsername=USR, Region=REGION)

此代码可为 Aurora PostgreSQL 数据库集群生成 IAM 身份验证令牌。

import sys import boto3 ENDPOINT="postgresmycluster.cluster-123456789012.us-east-1.rds.amazonaws.com" PORT="5432" USR="jane_doe" REGION="us-east-1" #gets the credentials from .aws/credentials session = boto3.Session(profile_name='RDSCreds') client = boto3.client('rds') token = client.generate_db_auth_token(DBHostname=ENDPOINT, Port=PORT, DBUsername=USR, Region=REGION)

连接到数据库集群

以下代码示例演示如何生成一个身份验证令牌,然后使用该令牌连接到运行 PostgreSQL 的数据库集群

要运行该代码示例,您需要使用 AWS 网站上提供的 适用于 Python 的 AWS 开发工具包 (Boto3)

根据需要修改以下变量的值:

  • ENDPOINT – 要访问的数据库集群的终端节点。

  • PORT – 用于连接到数据库集群的端口号

  • USER – 要访问的数据库账户。

  • REGION – 在其中运行数据库集群的 AWS 区域

  • DBNAME – 数据库引擎, aurora(对于与 MySQL 5.6 兼容的 Aurora)、aurora-mysql(对于与 MySQL 5.7 兼容的 Aurora)或 aurora-postgresql

此代码连接到 Aurora MySQL 数据库集群。

import mysql.connector import sys import boto3 import os ENDPOINT="mysqlcluster.cluster-123456789012.us-east-1.rds.amazonaws.com" PORT="3306" USR="jane_doe" REGION="us-east-1" DBNAME="aurora" os.environ['LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN'] = '1' #gets the credentials from .aws/credentials session = boto3.Session(profile_name='default') client = boto3.client('rds') token = client.generate_db_auth_token(DBHostname=ENDPOINT, Port=PORT, DBUsername=USR, Region=REGION) try: conn = mysql.connector.connect(host=ENDPOINT, user=USR, passwd=token, port=PORT, database=DBNAME) cur = conn.cursor() cur.execute("""SELECT now()""") query_results = cur.fetchall() print(query_results) except Exception as e: print("Database connection failed due to {}".format(e))

此代码连接到 Aurora PostgreSQL 数据库集群。

import psycopg2 import sys import boto3 ENDPOINT="postgresmycluster.cluster-123456789012.us-east-1.rds.amazonaws.com" PORT="5432" USR="jane_doe" REGION="us-east-1" DBNAME="aurora-postgresql" #gets the credentials from .aws/credentials session = boto3.Session(profile_name='RDSCreds') client = boto3.client('rds') token = client.generate_db_auth_token(DBHostname=ENDPOINT, Port=PORT, DBUsername=USR, Region=REGION) try: conn = psycopg2.connect(host=ENDPOINT, port=PORT, database=DBNAME, user=USR, password=token) cur = conn.cursor() cur.execute("""SELECT now()""") query_results = cur.fetchall() print(query_results) except Exception as e: print("Database connection failed due to {}".format(e))