AWS Lambda 调用未登录控制台

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

我正在学习 Lambda 并尝试将我的本地应用程序迁移到 AWS lambda。 这很简单。只是一个调用外部服务的函数。 我的处理程序方法调用此方法:

export const addTrack = async (token: string, parameters: any) => {
    const url: string = process.env.URL as string
    const headers = { ...globalHeaders, "authorization": "Bearer " + token };
    try {
        console.log("PARAMS:", parameters);
        let response = await axios.put(url, parameters, { headers })        
        console.log('RESPONSE:', response.status + " | " + response.statusText + " | " + parameters.date + " | " + parameters.hours + " | " + parameters.comments)
    } catch (e) {
        console.error('Error trying to send a record:', parameters)
        console.error(e)
        throw new Error('Failing to call API: ' + e)
    }
}

处理方法:

import { addTrack } from "./time-tracker-api-client"
import { DynamoDBClient, GetItemCommand } from "@aws-sdk/client-dynamodb"

const dynamoClient = new DynamoDBClient({})

export const handler = async (message: any) => {    
    let body = JSON.parse(message.Records[0].body);    

    let { Item }:any = await //call to dynamoBD...
    let token:string = Item.bdToken.S
    addTrack(token, body)
}

注意 axios.put 调用之前和之后的 console.log 以及 catch 块中的日志。我这里有一些间歇性日志。有时显示,有时不显示。 带有 PARAMS 的日志始终显示,因此它是正确的。但有时响应日志不会显示在任何流中的cloudwatch日志中,而且也不显示任何错误日志。 看来 put 调用导致了一些错误,但它没有进入 catch 块。奇怪的是,有时当 put 调用中发生错误时,它会显示在日志中。

例如,lambda 被调用 20 次,我有 20 个 PARAMS 登录流,我的外部服务响应 17 个调用。我只有 17 个响应日志和 1 个错误日志。似乎缺少 2 个错误日志。有时候外部调用可以,但是RESPONSE日志不出现

我不明白这里发生了什么。有人可以对正在发生的事情提供一些提示吗?

我尝试在 put 调用中使用 .then().catch() 进行调用,但它也不起作用。

node.js amazon-web-services logging aws-lambda
1个回答
0
投票

您似乎遇到了自发错误(20 个中的 3 个),因为您的 Lambda 函数的代码处理程序不是

awaiting
addTrack
函数在终止之前完成。确保addTrack函数完整执行。将您的处理程序代码更改为以下内容:

import { addTrack } from "./time-tracker-api-client"
import { DynamoDBClient, GetItemCommand } from "@aws-sdk/client-dynamodb"

const dynamoClient = new DynamoDBClient({})

export const handler = async (message: any) => {    
    let body = JSON.parse(message.Records[0].body);    

    let { Item }:any = await //call to dynamoBD...
    let token:string = Item.bdToken.S

    // Gracefully await the addTrack function to finish.
    await addTrack(token, body);
}
© www.soinside.com 2019 - 2024. All rights reserved.