Интеграция OpenAPI и Lambda в шлюз API - PullRequest
0 голосов
/ 24 января 2019

Когда я использую CloudFormation для развертывания API с интеграцией Lambda, я могу динамически связывать функцию Lambda с методом API, используя стандартный синтаксис CloudFormation, такой как !Ref и !GetAtt:

SomeMethod:
  Type: AWS::ApiGateway::Method
  Properties:
    HttpMethod: PUT
    Integration:
      Type: AWS_PROXY
      IntegrationHttpMethod: POST

#     this is defined during deployment
      Uri: !Join ["", ["arn:aws:apigateway:", !Ref "AWS::Region", ":lambda:path/2015-03-31/functions/", !GetAtt LambdaFunction.Arn,  "/invocations"]]
      IntegrationResponses:
        - StatusCode: 200
    ResourceId: !Ref APIResource

Теперь, когда я хочу сослаться на внешний файл сваггера, чтобы определить мой API, что я могу сделать через свойство BodyS3Location объекта AWS::ApiGateway::RestApi, я не могу понять, как динамически связатьопределенные методы для лямбда-функции.

API в качестве лямбда-прокси описывает, как статически связать метод с лямбда-функцией, т.е.

"x-amazon-apigateway-integration": {
    "credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
    "responses": { ... },

#   this is statically defined
    "uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:Calc/invocations",
    "httpMethod": "POST",
    "requestTemplates": { ... },
    "type": "aws"
}

Но если моя лямбда-функцияявляется частью того же стека CloudFormation (который он есть и должен быть), и я хочу развернуть несколько экземпляров, как я могу динамически интегрировать мой API с Lambda?Я не могу использовать !Ref или !GetAttr, потому что я вне контекста CloudFormation.

...