AWS CloudFormation删除资源

时间:2018-05-15 10:21:19

标签: amazon-web-services amazon-cloudformation

我有以下cloudformation模板:

Parameters:
  SizeCondition1:
    Type: String
    Default: SizeCondition1
    Description: >-
      Enter the name of the size condition. Note names cannot be modified after
      creation and must be alphanumeric without spaces.
  SizeURI1:
    Type: String
    Default: '8192'
    Description: Enter the size limit of the URI.
  SizeQuery1:
    Type: String
    Default: '8192'
    Description: Enter the size limit of the query string.
Resources:
  WAFSizeCondition1:
    Type: 'AWS::WAF::SizeConstraintSet'
    Properties:
      Name: !Ref SizeCondition1
      SizeConstraints:
        - FieldToMatch:
            Type: QUERY_STRING
          ComparisonOperator: GT
          Size: !Ref SizeQuery1
          TextTransformation: NONE
        - FieldToMatch:
            Type: URI
          ComparisonOperator: GT
          Size: !Ref SizeURI1
          TextTransformation: NONE
  WafRule:
    Type: 'Custom::CustomResource'
    Properties:
      ServiceToken: !Join 
        - ''
        - - 'arn:aws:lambda:'
          - !Ref 'AWS::Region'
          - ':'
          - !Ref 'AWS::AccountId'
          - ':function:WafLambdaTest'
      Name: WAFRateTest1
      RateLimit: '2000'
      MetricName: WAFRateTest1
      Predicates:
        - DataId: !Ref WAFSizeCondition1
          Negated: false
          Type: SizeConstraint

当我发起DELETE事件时,我会看到以下内容:

stack progress

问题:

  1. 为什么首先删除WafRule?什么时候无法删除 WAFSizeCondition1?如何在模板中声明依赖项以使WAFSizeCondition1先删除?
  2. 为什么WAFSizeCondition1无法删除?它引用了哪些资源?如何正确处理资源删除?

1 个答案:

答案 0 :(得分:1)

  1. Cloudformation将根据某些内部逻辑选择订单。要影响其顺序,可以使用DependsOn属性指定某种形式的依赖关系。 e.g:
  2. WAFSizeCondition1:

    输入:'AWS :: WAF :: SizeConstraintSet'

    DependsOn:WafRule

    1. 您的自定义资源中存在错误,您没有显示您编写函数的方式,我怀疑您没有采取正确的步骤来删除它。根据{{​​3}}:
    2.   

      永久删除WebACL。如果WebACL仍然存在,则无法删除   包含任何规则。

           

      要删除WebACL,请执行以下步骤:

           

      更新WebACL以删除规则(如果有)。有关更多信息,请参阅   the waf.delete_web_acl docs

           

      使用GetChangeToken获取您的更改令牌   提供DeleteWebACL请求的ChangeToken参数。提交   一个DeleteWebACL请求。