Я хочу интегрировать лямбда-функцию в шлюз API, чтобы при выполнении процедуры POST для пути, определенного на шлюзе API, выполнялась лямбда-функция и возвращалось значение.
Теперь в моем текущем проектеВ настоящее время у нас есть 2 шаблона Cloudformation: - один, который является общим и содержит определение ресурсов, общих для всех сред разработки; - и еще один неуниверсальный, который развертывает различные ресурсы в зависимости от среды, передаваемой в качестве параметра (dev, prod и т. д.).
В не универсальном я определил лямбда-функцию, а также развертывание и этап.В общем шаблоне CF я определил APIGateway следующим образом:
Resources:
RecargakiApiGateway:
Type: AWS::ApiGateway::RestApi
Properties:
Body:
swagger: "2.0"
info:
version: "VersionTimestamp"
title: "Some API"
host: "some.host"
schemes:
- "https"
paths:
/payment:
post:
produces:
- "application/json"
responses:
"200":
description: "200 response"
schema:
$ref: "#/definitions/Empty"
x-amazon-apigateway-integration:
credentials:
Fn::ImportValue:
"lambda-credentials-outputvalue-in-another-generic-stack"
uri: !Sub
- "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda::${AWS::Region}:${AWS::AccountId}:function:${lambdaName}/invocations"
- lambdaName: "${stageVariables.lambda_name}"
responses:
default:
statusCode: "200"
passthroughBehavior: "when_no_match"
timeoutInMillis: 5000
httpMethod: "POST"
contentHandling: "CONVERT_TO_TEXT"
type: "aws_proxy"
definitions:
Empty:
type: "object"
title: "Empty Schema"
Description: "Desc"
Name: "Name"
EndpointConfiguration:
Types:
- REGIONAL
Теперь в соответствии с документами по интеграции прокси-серверов AWS можно построить лямбда-ури следующим образом:
arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda::<account_id>:function:${stageVariables.<function_variable_name>}/invocations
Я пытался построить URI в соответствии с этим форматом, но я получаю эту ошибку:
Unable to put integration on 'POST' for resource at path '/payment': Invalid function ARN or invalid uri (Service: AmazonApiGateway; Status Code: 400; Error Code: BadRequestException
Во всех примерах, которые я видел, люди предполагают, что интегрируемая функция Lambdaнаходится в том же шаблоне / стеке CF, что и ресурс API-шлюза, но я понятия не имею, как ссылаться на ARN и / или имя функции в определении Swagger шлюза API, когда функция фактически находится в другом стеке CF.
Я также пытался ссылаться на переменную stage, которая содержала бы полный URI, например:
uri: "${stageVariables.functionURI}" # the URI would be constructed in the non generic stack in the format stated by the docs
Но она не работает с:
Unable to put integration on 'POST' for resource at path '/payment': Invalid ARN specified in the request (Service: AmazonApiGateway; Status Code: 400; Error Code: BadRequestException
Любая помощь очень ценится.