簡體   English   中英

使用 AWS Lambda 函數 Python 的遞歸 API 調用

[英]Recursive API Calls using AWS Lambda Functions Python

我以前從未寫過遞歸 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 函數的限制。 理想情況下,我想將列表分成更小的部分並運行相同的過程。 我正在努力標記它在失敗前最后一次運行的點並將該信息傳遞給下一個函數。

任何幫助表示贊賞!

我不確定我是否完全理解在您獲取有關案例的所有信息后您想對數據做什么,但是一旦 lambda 將工作分解為許多 lambda,您應該能夠將案例列表分塊並將它們傳遞給同一 lambda 的新調用。 下面的 Python 偽代碼,希望它有助於說明這個想法。 從這個答案竊取了塊方法,這將有助於將列表分成批次

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)
    )

希望這有幫助嗎? 如果這不是目標,請告訴我 😅

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM