我正在玩 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>
任何人都可以指出我错过了什么或做错了什么?提前这么多。