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:
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?
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"
}
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!