我在 AWS API GATEWAY 下定义了Stage变量。
我想在Scala编写的请求处理程序中访问我为这些值定义的值。 根据AWS API网关控制台,可以使用 $ context 对象访问Stage变量。
上下文对象的文档存在here但它没有定义如何在handleRequest方法中使用阶段变量。
override def handleRequest(input: java.util.Map[java.lang.String, Object], context: Context): util.Map[String, _] = {
context.getLogger.log("Input: " + input + " \n")
// How do I access the Stage variable here?
}
答案 0 :(得分:2)
您可以在集成请求部分中使用正文映射模板,并创建一个类似下面示例的JSON来获取阶段变量。
#set($inputRoot = $input.path('$'))
{
"version" : "$stageVariables.version"
}
如果您对车身贴图模板有所了解,请查看https://aws.amazon.com/blogs/compute/tag/mapping-templates/
答案 1 :(得分:0)
Vijayanath的答案是实现所需要的简单方法。
如果您想以编程方式执行此操作,而无需从控制台更改stageVariables
,
那么我建议使用 Swagger API 集成来处理阶段变量。
您可以使用此处定义的json模板实现此目的 - AWS labs Swagger Api并在x-amazon-apigateway-integration
下添加以下行
"requestTemplates": {
"application/json": "#set($inputRoot = $input.path('$')) \n{ \n \"version\" : \"$stageVariables.version\" \n}"
}
所以整个json文件将是:
"x-amazon-apigateway-auth" : {
"type" : "aws_iam"
},
"x-amazon-apigateway-integration" : {
"type" : "aws",
"uri" : "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:MY_ACCT_ID:function:helloWorld/invocations",
"httpMethod" : "POST",
"credentials" : "arn:aws:iam::MY_ACCT_ID:role/lambda_exec_role",
"requestTemplates": {
"application/json": "#set($inputRoot = $input.path('$')) \n{ \n \"version\" : \"$stageVariables.version\" \n}"
},
"requestParameters" : {
"integration.request.path.integrationPathParam" : "method.request.querystring.latitude",
"integration.request.querystring.integrationQueryParam" : "method.request.querystring.longitude"
},
"cacheNamespace" : "cache-namespace",
"cacheKeyParameters" : [],
"responses" : {
"2\\d{2}" : {
"statusCode" : "200",
"responseParameters" : {
"method.response.header.test-method-response-header" : "integration.response.header.integrationResponseHeaderParam1"
},
"responseTemplates" : {
"application/json" : "json 200 response template",
"application/xml" : "xml 200 response template"
}
},
"default" : {
"statusCode" : "400",
"responseParameters" : {
"method.response.header.test-method-response-header" : "'static value'"
},
"responseTemplates" : {
"application/json" : "json 400 response template",
"application/xml" : "xml 400 response template"
}
}
}
}