简体   繁体   中英

Failed to create API Gateway

I'm trying to create this API Gateway ( gist ) with Authorizer, and ANY method.

I run into this error:

The following resource(s) failed to create: [BaseLambdaExecutionPolicy, ApiGatewayDeployment]

I've checked the parameters passed into this template from my other stacks and they're correct. I've checked this template and it's valid.

My template is modified from this template with "Runtime": "nodejs8.10" .

This is the same stack ( gist ) which is created successfully using swagger 2 . I just want to replace swagger 2 with AWS::ApiGateway::Method .

Update 6 Jun 2019:

I tried to create the whole nested stack using the working version of the API Gateway stack, then create another API Gateway with the template that doesn't work with the parameters I get from the nested stack, then I have this:

The REST API doesn't contain any methods (Service: AmazonApiGateway; Status Code: 400; Error Code: BadRequestException; Request ID: ID)

But I did specify the method in my template following AWS docs :

"GatewayMethod": {
            "Type" : "AWS::ApiGateway::Method",
            "DependsOn": ["LambdaRole", "ApiGateway"],
            "Properties" : {
                "ApiKeyRequired" : false,
                "AuthorizationType" : "Cognito",
                "HttpMethod" : "ANY",
                "Integration" : {
                    "IntegrationHttpMethod" : "ANY",
                    "Type" : "AWS",
                    "Uri" : {
                        "Fn::Sub": "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaFunction.Arn}/invocations"
                    }
                },
                "MethodResponses" : [{
                    "ResponseModels": {
                      "application/json": "Empty"
                    },
                    "StatusCode": 200
                }],
                "RequestModels" : {"application/json": "Empty"},
                "ResourceId" : {
                    "Fn::GetAtt": ["ApiGateway", "RootResourceId"] 
                },
                "RestApiId" : {
                    "Ref": "ApiGateway"
                }
            }
        },

Thanks to @John's suggestion. I've tried to create the nested stack with the version that worked and pass in the parameters for the version that doesn't work.

The reason for that error is:

CloudFormation might try to create Deployment before it creates Method

from balaji 's answer here .

So this is what I did:

"methodANY": {
            "Type": "AWS::ApiGateway::Method",
            "Properties": {
              "AuthorizationType": "COGNITO_USER_POOLS",
...},
"ApiGatewayDeployment": {
            "Type": "AWS::ApiGateway::Deployment",
            "DependsOn": "methodANY",
...

I also found this article on cloudonaut.io by Michael Wittig helpful.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM