如何正确调用 lambda 函数?

How can i invoke lambda function correctly?

我正在尝试在 AWS 上创建我的第一个 Lambda 函数。 我正在关注 YouTube 教程并编写了以下代码以便从 DynamoDB 在线服务获取一些用户。

const aws = require('aws-sdk')
aws.config.update({
region : "eu-west-3"
})

const dynamodb = new aws.DynamoDB.DocumentClient()
const dynamoUsersTable = "Users"
const usersPath = "/users" 

exports.handler  = async (event) => {
console.log('Request event : ', event);
let response;

switch (true) {
    case event.httpMethod === 'GET' && event.path === usersPath:
        response = await getAllUsers();
        break;

    default:
        break;
} 
// UPDATED ANSWER - ADDED RETURN RESPONSE LIGNE ! -> New error : Missing Authentication Token
  return response;
}

const buildResponse = (statusCode, body) => {
return {
    statusCode : statusCode,
    headers : {
        "content-type" : "application/json"
    },
    body : JSON.stringify(body)
}
}

const scanDynamoRecords = async (scanParams, itemArray ) => {
try {
  const dynamoData = await dynamodb.scan(scanParams).promise();
  itemArray = itemArray.concat(dynamoData.Items);
  if (dynamoData.LastEvaluatedKey) {
    scanParams.ExclusiveStartkey = dynamoData.LastEvaluatedKey;
    return await scanDynamoRecords(scanParams, itemArray);
  }
  return itemArray;
} catch(error) {
  console.error('Do your custom error handling here. I am just gonna log it: ', error);
}
}
const getAllUsers = async () => {
const params = {
  TableName: dynamoUsersTable
}
const allUsers = await scanDynamoRecords(params, []);
const body = {
  users: allUsers
}
return buildResponse(200, body);
}

但显然,当我在 Postman 上发出 GET 请求时出现内部服务器错误:

PS:函数有DynamoDBFullAccess Policy和CloudWatch Policy,我在cloud watch上找不到报错信息日志


更新:错误是我在切换后丢失了一个“return”语句,但是在修复之后,“缺少身份验证令牌”消息被return编辑为来自对 Postman 的 GET 请求。我怀疑 IAM 对此有发言权,因为我正在使用多个 AWS 服务。

您需要 return 您的 handler 方法中的 response 变量。

创建 Lambda 函数时,您定义了一个用于 运行 Lambda 函数的 IAM 角色。如果您的 Lambda 函数要调用其他 AWS 服务,则您需要创建一个 IAM 角色,该角色有权调用那些给定的服务。如果您没有正确设置 IAM 角色权限,那么您的 Lambda 函数将不会成功。

请参阅此 AWS 教程。虽然它是在Java中实现的,但它涵盖了重要信息,例如设置IAM角色以从Lambda函数调用AWS服务等。

Creating scheduled events to invoke Lambda functions