1

我正在玩 API Gateway。基本上,我有一个简单的 java 代码,旨在返回问候消息:

public class Greetings implements RequestHandler<GreetingsRequest, String> {

    //enable pretty print JSON output
    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    
    public String handleRequest(GreetingsRequest input, Context context) {

        LambdaLogger logger = context.getLogger();
            
        System.out.println("Welcome to lambda function");
        
        // log execution details
        logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv()));
        logger.log("CONTEXT: " + gson.toJson(context));
        
        
         // process event
        logger.log("EVENT: " + gson.toJson(input));
        logger.log("EVENT TYPE: " + input.getClass().toString());
        
        return "Hello " + input.getName();
        
    }

}

我已将具有以下特征的角色附加到 lambda 函数:

4 个默认策略(AmazonAPIGatewayInvokeFullAccess、CloudWatchFullAccess、AmazonAPIGatewayAdministrator、AWSLambdaBasicExecutionRole)和一个自定义策略(lambda_execute)。

角色的信任关系:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "lambda.amazonaws.com",
          "apigateway.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

关于自定义策略“lambda_execute”:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "*"
        }
    ]
}

关于 API 网关:

资源:

在此处输入图像描述

方法请求:

在此处输入图像描述

集成请求:

在此处输入图像描述

在此处输入图像描述

当我测试资源时,会发出以下消息:

<AccessDeniedException>
  <Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>

在此处输入图像描述

任何人都可以指出我错过了什么或做错了什么?提前这么多。

4

1 回答 1

1

从 Api Gateway REST Api 调用 Lambda 函数的两个选项。

  1. 集成类型 Lambda:只需要给出 Lambda 函数名称。
  2. 集成类型 AWS 服务:此方法还用于将事件直接从 Api Gateway 发送到其他 AWS 服务,如 Sns、Sqs、Kinesis 等。

问题是关于使用 AWS 服务调用 lambda 的第二种方法。

PathOverride 代理从 Api Gateway 到不同端点的请求。

调用 Lambda 函数的完整端点是https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-east-1:111122223333:function:my-function-name/invocations

第一部分https://lambda.us-east-1.amazonaws.com/将由 Api Gateway 附加,第二部分 2015-03-31/functions/arn:aws:lambda: us-east-1: 111122223333:function: my-function-name/invocations 应该给出在路径覆盖中。

如果路径覆盖不正确,那就是我们得到Unable to determine service/operation name to be authorized错误的时候。

于 2021-02-11T21:35:48.040 回答