使用AWS Lambda函数Python的递归API调用

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

我以前从未写过递归python脚本。我习惯将单片函数拆分为子AWS Lambda函数。但是,我正在处理的这个特殊脚本很难分解成较小的功能。

这里是我当前用于上下文的代码。我正在使用一个api请求返回表中的对象列表。

url_pega_EEvisa = requests.get('https://cloud.xxxx.com:443/prweb/api/v1/data/D_pxCaseList?caseClass=xx-xx-xx-xx', auth=(username, password))
pega_EEvisa_raw = url_pega_EEvisa.json()
pega_EEvisa = pega_EEvisa_raw['pxResults']

这将特定表中的每个对象(主键)作为列表返回。例如,

['XX-XXSALES-WORK%20PO-1', 'XX-XXSALES-WORK%20PO-10', 'XX-XXSALES-WORK%20PO-100', 'XX-XXSALES-WORK%20PO-101', 'XX-XXSALES-WORK%20PO-102', 'XX-XXSALES-WORK%20PO-103', 'XX-XXSALES-WORK%20PO-104', 'XX-XXSALES-WORK%20PO-105', 'XX-XXSALES-WORK%20PO-106', 'XX-XXSALES-WORK%20PO-107']

然后,我使用此列表通过for循环填充更多的get请求,然后将每个对象的所有数据抓取给我。

for t in caseid:
    url = requests.get(('https://cloud.xxxx.com:443/prweb/api/v1/cases/{}'.format(t)), auth=(username, password)).json()
    data.append(url)

此特定的lambda函数大约需要15分钟,这是一个AWS Lambda函数的限制。理想情况下,我想将列表分成较小的部分并运行相同的过程。我正在努力标记失败之前最后一次运行的时间点,并将该信息传递给下一个功能。

感谢您的任何帮助!

python amazon-web-services api aws-lambda tail-recursion
1个回答
0
投票

我不确定是否在获取了有关案例的所有信息后是否完全理解您要使用数据的处理方式,但是一旦lambda分解为许多lambda,就意味着要分拆工作,您应该能够分块案例列表,并将其传递给同一lambda的新调用。下面的Python psuedocode,希望它可以帮助说明这个想法。我stole the chunks method from this answer有助于将列表分成几批

import boto3
import json

client = boto3.client('lambda')

def handler
  url_pega_EEvisa = requests.get('https://cloud.xxxx.com:443/prweb/api/v1/data/D_pxCaseList?caseClass=xx-xx-xx-xx', auth=(username, password))
  pega_EEvisa_raw = url_pega_EEvisa.json()
  pega_EEvisa = pega_EEvisa_raw['pxResults']

  for chunk in chunks(pega_EEvisa, 10)
    client.invoke(
      FunctionName='lambdaToHandleBatchOfTenCases',
      Payload=json.dumps(chunk)
    )

希望有帮助吗?让我知道这是否没有达到目标😅

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