Boto3, AWS Lambda - результаты составляют каждый вызов - PullRequest
1 голос
/ 01 февраля 2020

Когда я вызываю свою лямбда-функцию, результаты, кажется, соединяются друг с другом. Каждый ответ, который я получаю, - это все с начала создания экземпляра функции, плюс новое значение.

Есть ли способ гриппа sh this или, по крайней мере, способ выяснить, что такое новое возвращение находятся? Я не уверен, является ли это предполагаемым поведением или нет, или это предназначено, как отфильтровать это правильно (или я делаю что-то дико неправильно).


ACCESS_KEY = 'xxxxx'
SECRET_KEY = 'xxxxx'

lambda_client = boto3.client('lambda', 
                              region_name='xxxxx',
                              aws_access_key_id=ACCESS_KEY,
                              aws_secret_access_key=SECRET_KEY,)

test_event = {'firstname' : 'mark'}

def invoke_lambda(test_event):
    r = lambda_client.invoke( 
        FunctionName='Python3MySQLEndpoint',
        InvocationType='RequestResponse',
        Payload=json.dumps(test_event)
    )

    p = r['Payload']
    return p

data = invoke_lambda(test_event)
print data

приводит к (7 прогонов):

{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'xxxxx@gmail.com', u'firstname': u'mark'}, u'employee_id': 1}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'xxxxx@gmail.com', u'firstname': u'mark'}, u'employee_id': 1}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'xxxxx@gmail.com', u'firstname': u'mark'}, u'employee_id': 1}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'xxxxx@gmail.com', u'firstname': u'mark'}, u'employee_id': 1}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'xxxxx@gmail.com', u'firstname': u'mark'}, u'employee_id': 1}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'xxxxx@gmail.com', u'firstname': u'mark'}, u'employee_id': 1}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}

Я хотел бы, чтобы он только возвратил две записи, которые соответствуют жестко закодированному запросу.

1 Ответ

0 голосов
/ 01 февраля 2020

Это не имеет ничего общего с кодом в этом вызове. Мне пришлось удалить список извне функции-обработчика (глобальной) в функцию-обработчик.

from:

# array to store values to be returned
records = []

# executes upon API event
def handler(event, context):
    ...
    records.append(record)

Выше функция продолжает добавляться в растущий список.

до:

# executes upon API event
def handler(event, context):
    # array to store values to be returned
    records = []
    ...
    records.append(record)

Список стирается и перезапускается каждый раз, когда вызывается функция.

Кажется, что функция Lambda удерживала все. Я надеюсь, что это помогает кому-то. Мне потребовалось написать этот резиновый уточняющий вопрос, чтобы понять его, но это было время, которое я бы предпочел не потратить:)

...