2017-02-08 49 views
2

我正在使用CloudFormation模板来部署API网关资源并遇到Deployment(AWS :: ApiGateway :: Deployment)和UsagePlan资源问题。这是一种鸡/鸡蛋的情况。CloudFormation堆栈资源依赖关系问题:API网关部署+使用计划

在用法计划中,我指定了ApiStage的配置,这意味着我需要先创建部署资源。但是,当我尝试删除堆栈时,由于相应的阶段仍连接到UsagePlan,所以UsagePlan出现故障。

我有一个DependsOn语句为UsagePlan(UsagePlan取决于部署)。这允许堆栈创建而没有问题。但是由于这个DependsOn声明,它强制用户计划在删除操作中首先删除。这会导致错误。

请参阅下面的相关代码摘录。

任何人都有解决这个问题的方法?我不能成为第一个绊倒在这!

谢谢!

"UppRestApiDeployment": { 
    "Type": "AWS::ApiGateway::Deployment", 
    "Properties": { 
    "Description": "Upp Rest API Deployment", 
    "RestApiId": { 
     "Ref": "UppRestApi" 
    }, 
    "StageName": { 
     "Ref": "StackIdentifier" 
    }, 
    "StageDescription": { 
     "CacheClusterEnabled": false, 
     "CacheClusterSize": "0.5", 
     "CacheDataEncrypted": false, 
     "CacheTtlInSeconds": 10, 
     "CachingEnabled": false, 
     "DataTraceEnabled": false, 
     "LoggingLevel": "ERROR", 
     "MetricsEnabled": true, 
     "StageName": { 
     "Ref": "StackIdentifier" 
     }, 
     "Description": { 
     "Fn::Sub": "${StackIdentifier} Stage" 
     }, 
     "ThrottlingBurstLimit": 2000, 
     "ThrottlingRateLimit": 1000, 
     "Variables": { 
     "lambdaAlias": { 
      "Ref": "StackIdentifier" 
     } 
     } 
    } 
    } 
}, 
"UppApiUsagePlan": { 
    "Type": "AWS::ApiGateway::UsagePlan", 
    "Properties": { 
    "ApiStages": [ 
     { 
     "ApiId": { 
      "Ref": "UppRestApi" 
     }, 
     "Stage": { 
      "Ref": "StackIdentifier" 
     } 
     } 
    ], 
    "Description": "Upp Rest API Usage Plan to Prevent Overage Charges", 
    "Quota": { 
     "Limit": 5000, 
     "Period": "MONTH" 
    }, 
    "Throttle": { 
     "BurstLimit": 200, 
     "RateLimit": 100 
    }, 
    "UsagePlanName": { 
     "Fn::Sub": "${StackIdentifier}_UppApiUsagePlan" 
    } 
    }, 
    "DependsOn": [ 
    "UppRestApiDeployment" 
    ] 
} 
+0

你自相矛盾了一下。如果您包含Deployment and UsagePlan资源的代码段(如果作为独立资源创建,则也是Stage),我相信我们可以为您整理它。 – lebryant

+0

谢谢你看看。我添加了脚本的摘录。 – theoneandonly2

回答

2

UsagePlan可以在多个API之间重复使用。因此,理想情况下,我们建议您为每个API使用不同的CloudFormation堆栈,并为UsagePlans使用不同的CloudFormation堆栈。这样,您可以在不删除UsagePlan的情况下删除API,也不会陷入此依赖性问题。

+0

我看到你在说什么,但看到这有点问题。即使我要为使用计划创建不同的模板,我也需要在使用API​​部署之后创建该堆栈。然后我需要以相反的顺序删除它们。这使得我无法自动执行该过程。一个简单的解决方法是能够在部署中指定UsagePlan,而不是在UsagePlan中指定Deployment(如果AWS中的任何人正在监听!)。 – theoneandonly2