如何在swagger中为API-Gateway设置Use Lambda Proxy integration
?
我当前的招摇过关但是我真的想设置代理集成。我会让我简化很多事情,更不用说我可以从swagger定义中移除requestTemplates
和responses
块。
我正在尝试从this blog帖子设置新的Lambda代理模式。
当前招摇:
'/document':
options:
summary: CORS support
description: |
Enable CORS by returning correct headers
consumes:
- application/json
produces:
- application/json
tags:
- CORS
x-amazon-apigateway-integration:
type: mock
requestTemplates:
application/json: |
{
"statusCode" : 200
}
responses:
"default":
statusCode: "200"
responseParameters:
method.response.header.Access-Control-Allow-Headers : "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
method.response.header.Access-Control-Allow-Methods : "'*'"
method.response.header.Access-Control-Allow-Origin : "'*'"
responseTemplates:
application/json: |
{}
responses:
200:
description: Default response for CORS method
headers:
Access-Control-Allow-Headers:
type: "string"
Access-Control-Allow-Methods:
type: "string"
Access-Control-Allow-Origin:
type: "string"
x-amazon-apigateway-any-method:
produces:
- "application/json"
responses:
200:
description: "200 response"
schema:
$ref: "#/definitions/Empty"
x-swagger-router-controller: main
x-lambda-function: ../../swiki/build/document
x-amazon-apigateway-integration:
type: aws
httpMethod: POST
uri: arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/@@LambdaFunctionDocument/invocations
credentials: @@APIGatewayExecutionRole
passthroughBehavior: "when_no_templates"
requestTemplates:
application/json: |
#set($allParams = $input.params())
{
"bodyJson" : $input.json('$'),
"format": "html",
"params" : {
#foreach($type in $allParams.keySet())
#set($params = $allParams.get($type))
"$type" : {
#foreach($paramName in $params.keySet())
"$paramName" : "$util.escapeJavaScript($params.get($paramName))"
#if($foreach.hasNext),#end
#end
}
#if($foreach.hasNext),#end
#end
},
"stageVariables" : {
#foreach($key in $stageVariables.keySet())
"$key" : "$util.escapeJavaScript($stageVariables.get($key))"
#if($foreach.hasNext),#end
#end
},
"context" : {
"accountId" : "$context.identity.accountId",
"apiId" : "$context.apiId",
"apiKey" : "$context.identity.apiKey",
"authorizerPrincipalId" : "$context.authorizer.principalId",
"caller" : "$context.identity.caller",
"cognitoAuthenticationProvider" : "$context.identity.cognitoAuthenticationProvider",
"cognitoAuthenticationType" : "$context.identity.cognitoAuthenticationType",
"cognitoIdentityId" : "$context.identity.cognitoIdentityId",
"cognitoIdentityPoolId" : "$context.identity.cognitoIdentityPoolId",
"httpMethod" : "$context.httpMethod",
"stage" : "$context.stage",
"sourceIp" : "$context.identity.sourceIp",
"user" : "$context.identity.user",
"userAgent" : "$context.identity.userAgent",
"userArn" : "$context.identity.userArn",
"requestId" : "$context.requestId",
"resourceId" : "$context.resourceId",
"resourcePath" : "$context.resourcePath"
}
}
responses:
default:
statusCode: "200"
答案 0 :(得分:4)
对于Lambda Proxy集成,必填字段为
x-amazon-apigateway-integration:
type: aws_proxy
httpMethod: <method>
uri: <function_uri>
credentials: <optional_creds>
编辑:拼写错误 edit2:固定类型 edit3:添加httpMethod
答案 1 :(得分:3)
请参阅此blog post以获取HTTP和Lambda代理的3个新功能(贪婪路径,ANY方法,代理集成)的完整示例:
---
swagger: "2.0"
info:
version: "2016-09-23T22:23:23Z"
title: "Simple Proxy Example - Ryan Green"
host: "zte3bswjjb.execute-api.us-east-1.amazonaws.com"
basePath: "/demo"
schemes:
- "https"
paths:
/http/{proxy+}:
x-amazon-apigateway-any-method:
parameters:
- name: "proxy"
in: "path"
x-amazon-apigateway-integration:
type: "http_proxy"
uri: "http://httpbin.org/{proxy}"
httpMethod: "ANY"
passthroughBehavior: "when_no_match"
requestParameters:
integration.request.path.proxy: "method.request.path.proxy"
/lambda/{proxy+}:
x-amazon-apigateway-any-method:
parameters:
- name: "proxy"
in: "path"
responses: {}
x-amazon-apigateway-integration:
type: "aws_proxy"
uri: "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:[MY_ACCOUNT_ID]]:function:[MY_FUNCTION_NAME]]/invocations"
passthroughBehavior: "when_no_match"
httpMethod: "POST"
答案 2 :(得分:1)
x-amazon-apigateway-integration:
type: aws_proxy
uri: "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<USER_ACCOUNT_ID>:function:<LAMBDA_FUNCTION_NAME>/invocations"
httpMethod: POST
credentials: "arn:aws:iam::<USER_ACCOUNT_ID>:role/<ROLE_NAME>"
passthroughBehavior: when_no_match