web-dev-qa-db-fra.com

Comment puis-je cloudformer une ressource de passerelle API avec une intégration de proxy lambda

J'ai essayé de comprendre comment exprimer (dans cloudformation) une ressource de passerelle API ayant un type d'intégration de fonction Lambda à l'aide de l'intégration du proxy Lambda.

Ceci est facile à faire dans la console AWS car il y a une case à cocher que vous pouvez sélectionner:  API gateway console showing the Use Lambda Proxy Integration checkbox

Cependant, il n'y a pas de champ correspondant dans la ressource AWS :: ApiGateway :: Method CloudFormation (il devrait être dans la propriété Integration ).

Comment puis-je configurer cela dans cloudformation?

13
sihil

Le type d'intégration doit être défini sur AWS_PROXY. Vous trouverez ci-dessous un exemple d'extrait de méthode provenant d'un modèle YAML CloudFormation en cours de fonctionnement.

ProxyResourceAny:
  Type: AWS::ApiGateway::Method
  Properties:
    AuthorizationType: NONE
    HttpMethod: ANY
    ResourceId:
      Ref: ProxyResource
    RestApiId:
      Ref: API
    Integration:
      Type: AWS_PROXY
      IntegrationHttpMethod: POST
      Uri: !Sub
        - arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${Arn}/invocations
        - Arn:
            Fn::GetAtt:
            - RestorerLambda
            - Arn

Cela vaut la peine de dire comment j'ai compris cela ...

Après m'être gratté la tête pendant un moment, j'ai examiné le résultat de la commande CLI aws apigateway get-method à la recherche d'une méthode configurée de cette manière à l'aide de la console. Cela m'a donné le JSON suivant et je me suis rendu compte que la case à cocher pourrait être encodée dans le type. J'ai testé mon hypothèse et suis venu avec la CloudFormation ci-dessus.

{
    "apiKeyRequired": false,
    "httpMethod": "ANY",
    "methodIntegration": {
        "integrationResponses": {
            "200": {
                "responseTemplates": {
                    "application/json": null
                },
                "statusCode": "200"
            }
        },
        "passthroughBehavior": "WHEN_NO_MATCH",
        "cacheKeyParameters": [],
        "uri": "arn:aws:apigateway:eu-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-west-1:XXXXXXXXX:function:Shildrew-Restorer-Play-Lambda/invocations",
        "httpMethod": "POST",
        "cacheNamespace": "64bl3tgw4g",
        "type": "AWS_PROXY"
    },
    "requestParameters": {},
    "authorizationType": "NONE"
}
12
sihil

J'ai résolu ce même problème en changeant simplement le

Integration:
Type: AWS_PROXY

À

Integration:
Type: AWS

La documentation relative à la formation dans le cloud est actuellement rare et la documentation relative à cloudformation de la passerelle API ne correspond pas à ce qui peut être vu sur la console, ce qui empêche toute personne tentant de résoudre un problème.

J'espère que cela t'aides!

0
Alex Johnston