【问题标题】:Executing AWS Lambda Function not working执行 AWS Lambda 函数不起作用
【发布时间】:2020-09-29 09:44:36
【问题描述】:

我正在尝试使用以下代码创建一个简单的 Lambda 函数 ChildFunction

    import json
    import uuid
 
    def lambda_handler(event, context):
        
        productName = event['ProductName']
        quantity    = event['Quantity']
        unitPrice   = event['UnitPrice']
 
        transactionId   = str(uuid.uuid1())
 
        amount      = quantity * unitPrice
 
        return {
            'TransactionID' :   transactionId,
            'ProductName'   :   productName,
            'Amount'        :   amount
        }

我正在使用以下测试参数创建Test Event

{

  "ProductName": "iPhone SE",
  "Quantity": "2",
  "UnitPrice": "499"
}

当我执行Test Event 时,我得到以下输出:

Response:
{
  "statusCode": 200,
  "body": "\"Hello from Lambda!\""
}

Request ID:
"9c68e0d8-3781-4046-ac26-127c45321d71"

Function logs:
START RequestId: 9c68e0d8-3781-4046-ac26-127c45321d71 Version: $LATEST
END RequestId: 9c68e0d8-3781-4046-ac26-127c45321d71
REPORT RequestId: 9c68e0d8-3781-4046-ac26-127c45321d71  Duration: 1.19 ms   Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 52 MB

我不知道为什么 Lambda 函数没有执行。我在这里做错了什么?

【问题讨论】:

  • 你真的在执行正确的 Lambda 吗?给定您的代码,JSON 对象和关键 statusCode 的响应如何?
  • @raupach 是的,我正在执行正确的 Lambda。我的意思是我在 Lambda 函数中创建了一个测试事件,但它不起作用
  • 你确定它指向你最新的 lambda 吗?您如何部署最新代码?
  • @TraychoIvanov 我正在使用“测试”按钮执行。 Cloudwatch 中没有错误日志。当我点击测试时,它说Execution result: succeeded。但它没有给出任何输出。
  • 显示您的配置。添加截图等

标签: python amazon-web-services aws-lambda


【解决方案1】:

Lambda 有特定的响应格式:

试试这个,你的输出字典在哪里:

import json

return { 'statusCode': 200,  
    'body' :json.dumps({'response': out})
    }

相关问题:Serverless Framework Python lambda return JSON directly

【讨论】:

  • 这需要为 API 网关集成设置。如果它是独立的函数,那么它可以有自定义的返回格式。
  • 您的响应仍然需要一个正文作为输出。 json.dumps(out) 也很关键!试试看吧。
【解决方案2】:

即使你正确地执行了你的函数,它也不会工作。原因是quantityunitPrice 是字符串,而不是整数。正确的版本是:

import json
import uuid

def lambda_handler(event, context):
    
    productName = event['ProductName']
    quantity    = int(event['Quantity'])
    unitPrice   = int(event['UnitPrice'])

    transactionId   = str(uuid.uuid1())

    amount      = quantity * unitPrice

    return {
        'TransactionID' :   transactionId,
        'ProductName'   :   productName,
        'Amount'        :   amount
    }

根据您的描述,无法确定您执行不同功能的原因。也许你没有在测试之前部署它,或者测试它的一些旧版本。在第一种情况下,您必须在测试前显式部署您的函数,而在第二种情况下,您必须确保选择正确的版本进行测试。

【讨论】:

    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 2016-11-01
    • 1970-01-01
    相关资源
    最近更新 更多