#sql #amazon-web-services #aws-lambda #amazon-redshift #aws-api-gateway
Вопрос:
Я столкнулся с проблемой, как задать параметры для шлюза API для запроса Amazon Redshift с помощью функции Lambda.
Мое соединение работает нормально, но я все время получаю ответы за полную таблицу. Мне нужно определить переменные, чтобы пользователь мог запрашивать конкретные параметры, значения и схемы
Может ли кто-нибудь предложить примеры того, как это настроить
Моя конфигурация такова:
#!/usr/bin/env python
import psycopg2
import logging
import traceback
import json
from os import environ
query="SELECT * from public"
logger=logging.getLogger()
logger.setLevel(logging.INFO)
def make_connection():
conn=psycopg2.connect(dbname= 'database', host='redshift-cluster.amazonaws.com',
port= '5439', user= 'user', password= 'password')
conn.autocommit=True
return conn
def log_err(errmsg):
logger.error(errmsg)
return {"body": errmsg , "headers": {}, "statusCode": 400,
"isBase64Encoded":"false"}
logger.info("Cold start complete.")
print('Loading Function')
def handler(event,context):
try:
cnx = make_connection()
cursor=cnx.cursor()
try:
cursor.execute(query)
except:
return log_err ("ERROR: Cannot execute cursor.n{}".format(
traceback.format_exc()) )
try:
results_list=[]
for result in cursor: results_list.append(result)
print(results_list)
cursor.close()
except:
return log_err ("ERROR: Cannot retrieve query data.n{}".format(
traceback.format_exc()))
return {"body": str(results_list), "headers": {}, "statusCode": 200,
"isBase64Encoded":"false"}
except:
return log_err("ERROR: Cannot connect to database from handler.n{}".format(
traceback.format_exc()))
finally:
try:
cnx.close()
except:
pass
if __name__== "__main__":
handler(None,None)
Ответ №1:
Вместо использования psycopg2
я бы рекомендовал использовать API данных Amazon Redshift. Это обеспечивает гораздо более простой способ выполнения запроса на Amazon Redshift.
Сначала отправьте запрос с execute_statement()
помощью , а затем получите результаты с get_statement_result()
помощью .