如何 return 使用 Boto3 for Redshift get_cluster_credentials 临时密码和用户名

How to return temporary password and username using Boto3 for Redshift get_cluster_credentials

我可以打印 boto3.client.get_cluster_credentials 并查看 'DbUser: 'IAM:#####" and 'DbPassword'###########' 但无法将其分配给变量。

我试图在我的连接字符串中设置来自我的函数调用的 DbUserDbPassword 但出现错误。当我硬编码实际的用户名和密码时,它可以工作,但我需要将 AWS returns 作为临时凭证给我:

client = boto3.client('redshift', region_name='us-east-1')
cluster_creds = client.get_cluster_credentials( DbUser=',dbuser', DbName='dbName', ClusterIdentifier='ClusterName', AutoCreate=False)
conn = psycopg2.connect("host='<clusername>.<randomKey>.us-east-1.redshift.amazonaws.com' port='5439' user=cluster_cred['Dbuser'] password=cluster_creds['DbPassword'] dbname='databaseName'")

我将代码更改为 user=cluster_creds.DbUser 并且它通过了但是当我更改 password=cluster_creds.DbPassword 时它无法验证。

此行引用字符串中的变量,因此未替换该值:

conn = psycopg2.connect("host='<clusername>.<randomKey>.us-east-1.redshift.amazonaws.com' port='5439' user=cluster_cred['Dbuser'] password=cluster_creds['DbPassword'] dbname='databaseName'")

另外,应该是cluster_creds(不是cluster_cred)和DbUser(不是Dbuser)。

这是对我有用的代码:

import boto3
import psycopg2

DB_NAME = '<DB-NAME>'
CLUSTER_IDENTIFIER = '<CLUSTER-IDENTIFIER>'
DB_USER = '<DB-USER>'
ENDPOINT = '<DB-NAME>.<RANDOM-KEY>.us-east-1.redshift.amazonaws.com'

client = boto3.client('redshift', region_name='us-east-1')
cluster_creds = client.get_cluster_credentials(DbUser=DB_USER, DbName=DB_NAME, ClusterIdentifier=CLUSTER_IDENTIFIER, AutoCreate=False)
temp_user=cluster_creds['DbUser']
temp_password=cluster_creds['DbPassword']
conn = psycopg2.connect("host='" + ENDPOINT + "' port='5439' user=" + temp_user + " password=" + temp_password + " dbname='" + DB_NAME + "'")

如果您使用的是 Python 3.6+,那么最后一行可以使用更漂亮的 f-strings:

conn = psycopg2.connect(f"host='{ENDPOINT}' port='5439' user={temp_user} password={temp_password} dbname='{DB_NAME}'")

您需要用您的值替换 <VALUES>