AWS Lambda Python / Boto3 / psycopg2 Redshift临时凭证

问题描述 投票:1回答:1

我是AWS的新手,所以请告诉我,如果我想做的不是一个好主意,但它的基本要点是我有一个Redshift集群,我希望能够从Lambda查询( Python)使用psycopg2和boto3的组合。我已经为Lambda函数分配了一个角色,允许它从Redshift获取临时凭证(get_cluster_credentials)。然后我使用psycopg2传递这些临时凭证来创建连接。当我从本地Python控制台以交互方式运行时,这很好用,但是我收到错误:

OperationalError:FATAL:用户“IAMA:temp_user_cred:vbpread”的密码验证失败

如果我使用Lambda直接在我的python控制台的连接语句中生成的临时凭证,它们实际上可以工作(直到过期)。我想我错过了一些明显的东西。我的代码是:

import boto3
import psycopg2

print('Loading function')

def lambda_handler(event, context):

    client = boto3.client('redshift')
    dbname = 'medsynpuf'
    dbuser = 'temp_user_cred'
    response = client.describe_clusters(ClusterIdentifier=dbname)
    pwresp = client.get_cluster_credentials(DbUser=dbuser,DbName=dbname,ClusterIdentifer=dbname,DurationSeconds=3600,AutoCreate=True, DbGroups=['vbpread'])
    dbpw = pwresp['DbPassword']
    dbusr = pwresp['DbUser']
    endpoint = response['Clusters'][0]['Endpoint']['Address']
    print(dbpw)
    print(dbusr)
    print(endpoint)
    con = psycopg2.connect(dbname=dbname, host=endpoint, port='5439', user=dbusr, password=dbpw)
    cur = con.cursor()

    query1 = open("001_copd_yearly_count.sql","r")
    cur.execute(query1.read())
    query1_results = cur.fetchall()

    result = query1_results

    return result

我正在使用Python 3.6。

谢谢!格里

python amazon-web-services aws-lambda boto3 psycopg2
1个回答
0
投票

我使用的是Windows编译版的psycopg2,需要Linux。把它换成了这里的一个:https://github.com/jkehler/awslambda-psycopg2

© www.soinside.com 2019 - 2024. All rights reserved.