Когда я использую 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.