对 AWS Lambda 事件和上下文函数错误感到困惑

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

我一直在尝试使用 AWS Lambda、DynamoDB 和 Eventbridge 开发交易机器人。然而,我在尝试运行测试环境以确保我的代码正常工作时遇到了一些奇怪的问题。我对 AWS 环境还很陌生,非常感谢我能得到的任何帮助。

我试图让 AWS Lambda 使用默认参数调用

lambda_hander
,这里是我的
lambda_handler
的片段供参考。

def lambda_handler(event, context):
    url = "https://paper-api.alpaca.markets/v2/orders"
    ticker = "AAPL"
    yesterday = str(datetime.today() - timedelta(days = 1))
    
    dynamodb = boto3.resource("dynamodb")
    dynamodb.Table("my_table")
    dynamodb_item = dynamodb.get_item(
        Key = {
            'Date': yesterday[0:10],
            'TickerSymbol': ticker,
        }
    )

    alpaca_headers = {
        "accept": "application/json",
        "content-type": "application/json",
        "APCA-API-KEY-ID": ALPACA_CONFIG['API_KEY'],
        "APCA-API-SECRET-KEY": ALPACA_CONFIG['API_SECRET']
    }
    
    alpaca_payload = {
        "symbol": "AAPL",
        "notional": "string",
        "type": "stop",
        "time_in_force": "day",
        "limit_price": "string",
        "stop_price": "string",
        "trail_price": "string",
        "trail_percent": "string",
        "extended_hours": False,
    }
    
    asset = get_current_asset_position(ticker=ticker)
    prev_closing_price = fast_atof(dynamodb_item['ClosingPrice'])
    curr_price = fast_atof(asset['current_price'])
    
    if curr_price > prev_closing_price * 1.05:
        alpaca_payload['qty'] = asset['qty']
        alpaca_payload['side'] = 'sell'
        
        response = requests.post(url, json=alpaca_payload, headers=alpaca_headers)
        return response
    
    if curr_price < prev_closing_price * 0.8995:
        alpaca_payload['qty'] = '10'
        alpaca_payload['side'] = 'buy'
        
        response = requests.post(url, json=alpaca_payload, headers=alpaca_headers)
        return response

但是,在测试环境中运行代码时,仍然会出现此错误:

{
  "errorMessage": "lambda_handler() missing 2 required positional arguments: 'event' and 'context'",
  "errorType": "TypeError",
  "requestId": "",
  "stackTrace": [
    "  File \"/var/lang/lib/python3.11/importlib/__init__.py\", line 126, in import_module\n    return _bootstrap._gcd_import(name[level:], package, level)\n",
    "  File \"<frozen importlib._bootstrap>\", line 1204, in _gcd_import\n",
    "  File \"<frozen importlib._bootstrap>\", line 1176, in _find_and_load\n",
    "  File \"<frozen importlib._bootstrap>\", line 1147, in _find_and_load_unlocked\n",
    "  File \"<frozen importlib._bootstrap>\", line 690, in _load_unlocked\n",
    "  File \"<frozen importlib._bootstrap_external>\", line 940, in exec_module\n",
    "  File \"<frozen importlib._bootstrap>\", line 241, in _call_with_frames_removed\n",
    "  File \"/var/task/lambda_function.py\", line 80, in <module>\n    lambda_handler()\n"
  ]
}

我如何尝试解决这个问题。

  • 我尝试过增加超时范围,认为默认的 3 秒会使我的代码超时,但它并没有解决问题。
  • 我还尝试将运行时处理程序从默认的 lambda_function.lambda_handler 重命名为其他名称。
  • 我还确保所有依赖项均已正确导入,并且正确的轮文件已解压到压缩文件夹中。

但是问题仍然存在,我不知道该怎么办。

python aws-lambda python-requests amazon-dynamodb trading
1个回答
0
投票

您没有显示导入内容,但很明显您正在使用

requests
库。默认情况下,Lambda 不与该库捆绑在一起,因此您可以使用 Lambda Layer 或从 botocore 导入它:

from botocore.vendored import requests

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