Как определить Лямбда-переменные для запроса красного смещения через шлюз API

#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() помощью .