Access Stage变量 - AWS API Gateway

时间:2017-10-09 06:43:52

标签: java scala amazon-web-services aws-api-gateway

我在 AWS API GATEWAY 下定义了Stage变量。

我想在Scala编写的请求处理程序中访问我为这些值定义的值。 根据AWS API网关控制台,可以使用 $ context 对象访问Stage变量。

Stage variables through context

上下文对象的文档存在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?
}

2 个答案:

答案 0 :(得分:2)

您可以在集成请求部分中使用正文映射模板,并创建一个类似下面示例的JSON来获取阶段变量。

#set($inputRoot = $input.path('$'))
{
"version" : "$stageVariables.version"
}

来源: - http://docs.aws.amazon.com/apigateway/latest/developerguide/amazon-api-gateway-using-stage-variables.html#call-api-lambda-backend-with-stage-variable

如果您对车身贴图模板有所了解,请查看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"
           }
       }
   }
}