ALIYUN::ROS::ResourceCleaner类型用于创建资源清理器。

支持清理的资源类型

云服务 资源类型
ECS
  • ECS:AutoProvisioningGroup
  • ECS:AutoSnapshotPolicy
  • ECS:Command
  • ECS:CustomImage
  • ECS:DedicatedHost
  • ECS:DeploymentSet
  • ECS:Disk
  • ECS:HpcCluster
  • ECS:Instance
  • ECS:LaunchTemplate
  • ECS:NetworkInterface
  • ECS:PrefixList
  • ECS:SSHKeyPair
  • ECS:SecurityGroup
  • ECS:Snapshot
VPC
  • VPC:AnycastEIP
  • VPC:CommonBandwidthPackage
  • VPC:DhcpOptionsSet
  • VPC:EIP
  • VPC:EipSegment
  • VPC:FlowLog
  • VPC:HaVip
  • VPC:Ipv6Gateway
  • VPC:NatGateway
  • VPC:NetworkAcl
  • VPC:RouteTable
  • VPC:VPC
  • VPC:VSwitch
RDS

RDS:DBInstance

SLB
  • SLB:AccessControl
  • SLB:Certificate
  • SLB:LoadBalancer
ALB
  • ALB:LoadBalancer
  • ALB:ServerGroup
ESS
  • ESS:AlarmTask
  • ESS:ScalingGroup
  • ESS:ScheduledTask
ECI
  • ECI:ContainerGroup
  • ECI:ImageCache
MONGODB MONGODB:Instance
Memcache Memcache:Instance
REDIS REDIS:Instance
SLS SLS:Project
FC FC:Service
CS CS:Cluster
NAS
  • NAS:AccessGroup
  • NAS:FileSystem
OSS OSS:Bucket
OOS
  • OOS:Execution
  • OOS:Template
POLARDB POLARDB:DBCluster
DRDS DRDS:DrdsInstance
ROCKETMQ ROCKETMQ:Instance
ADB ADB:DBCluster
EDAS
  • EDAS:Application
  • EDAS:Cluster
EMR EMR:Cluster
ElasticSearch ElasticSearch:Instance
SearchEngine SearchEngine:Instance
HBR HBR:DBVault
PVTZ PVTZ:Zone
CAS CAS:Certificate
SAG
  • SAG:ACL
  • SAG:Qos
CDN CDN:Domain
DCDN DCDN:Domain
DNS DNS:Domain
WAF WAF:Domain
说明 ROS会持续增加支持清理的资源。您可以调用GetFeatureDetails接口获取支持清理的资源列表。

语法

{
  "Type": "ALIYUN::ROS::ResourceCleaner",
  "Properties": {
    "Action": String,
    "ResourceFilters": List,
    "Resources": List,
    "Mode": String,
    "FailureOption": String,
    "CleanUpRetryCount": Integer,
    "CleanUpTimeout": Number,
    "ExcludedResources": List,
    "CleanUpAlgorithm": String,
    "ResourceTypeOrder": List,
    "DisabledSideEffects": List
  }
}

属性

属性名称 类型 必须 允许更新 描述 约束
Action String 资源清理动作。 取值:
  • Scan:资源扫描。扫描出需要清理的资源。
  • CleanUp:资源清理。清理扫描出的资源。要求已经扫描过。创建资源清理器时,不允许指定为该值,只能在更新时指定。
  • Scan+CleanUp:先进行资源扫描,再进行资源清理。
  • ScanWhenCreatingAndUpdating +CleanUpWhenDeleting:创建或更新资源清理器时进行资源扫描,删除资源清理器时进行资源清理。
ResourceFilters List 资源过滤器列表。

资源清理器使用过滤器扫描出所有需要进行清理的资源。

过滤器列表最大长度为100。

只能指定ResourceFilters或Resources中的一个。

如果在更新资源清理器时,资源过滤器列表发生改变,则资源清理器会重新进行资源扫描。如果此时Action为CleanUp,则会引发失败。

过滤器有两种过滤行为(Effect):Allow和Deny。其工作方式如下(数字越小优先级越高):
  1. 被任意一个Deny过滤器命中的资源不会被清理。
  2. 被至少一个Allow过滤器命中的资源才会被清理。
更多信息,请参见ResourceFilters属性
Resources List 要清理的资源列表。 列表长度:1~1000。

只能指定ResourceFilters或Resources中的一个。

更多信息,请参见Resources属性

Mode String 资源清理器运行模式。 取值:
  • Strict:任何资源扫描或资源清理失败会导致资源清理器失败。
  • Loose(默认值):只有极少量资源扫描或资源清理失败会导致资源清理器失败。大多数扫描失败会被忽略,失败信息可以在资源输出ScanErrors和ResourceDetails中找到。大多数清理失败会被忽略,失败信息可以在资源输出ResourceDetails中找到
FailureOption String 资源清理失败选项。 取值:
  • Normal(默认值):资源清理失败不会影响依赖的资源。
  • Fast:资源清理失败会引起依赖的资源失败。
说明 依赖是指删除依赖,而非创建依赖。
CleanUpRetryCount Integer 清理资源时的最大重试次数。 取值范围:1~6。

默认值为:1,表示不重试。

触发重试条件如下:(满足任意一项)
  • 存在资源清理失败。
  • 清理超时。
CleanUpTimeout Number 清理资源时的超时时间。 取值范围:60~14400。

单位:秒。

默认值:3600。

ExcludedResources List 待清理资源中要排除的资源列表。 列表长度:1~1000。

每一项只能排除一个资源。如果存在歧义,指向了多个资源,则会引发失败。指定更多字段消除歧义。

更多信息,请参见ExcludedResources属性

CleanUpAlgorithm String 资源清理算法。 取值:
  • ResourceDependency(默认值):按照资源删除依赖关系进行清理。
  • ResourceTypeOrder:按照资源类型顺序从前往后进行清理。可以使用ResourceTypeOrder属性指定资源类型顺序。如果未指定,则使用系统默认顺序,系统默认顺序包含所有支持的资源类型。
ResourceTypeOrder List 资源类型清理顺序。 列表长度:1~1000。

当CleanUpAlgorithm取值为ResourceTypeOrder时,本参数生效。

列表中未指定的资源类型相关的资源不会进行扫描或清理。

关于资源类型可选值,请参见支持清理的资源类型

DisabledSideEffects List 要禁用的副作用列表。 列表长度:1~50。

列表项由字母、数字和模糊匹配字符组成,长度范围:1-100。

模糊匹配仅支持*?字符。

清理部分类型资源的时候会产生一定的副作用,可以通过调用GetFeatureDetails接口进行查询。

ResourceFilters语法

"ResourceFilters": [
  {
    "IncludeDeletionProtection": Boolean,
    "ResourceTypePatterns": List,
    "ResourceIds": List,
    "RegionIds": List,
    "ResourceGroupIds": List,
    "Effect": String,
    "ResourceNamePatterns": List,
    "Tags": List
  }
]

ResourceFilters属性

属性名称 类型 必须 允许更新 描述 约束
IncludeDeletionProtection Boolean 删除保护过滤。 取值:
  • false:开启删除保护的资源不通过此项过滤。
  • true(默认值):开启删除保护的资源通过此项过滤。
ResourceTypePatterns List 资源类型模糊匹配过滤列表。关于资源类型,请参见支持清理的资源类型 列表长度:1~100。

当资源类型匹配列表中任意一项时,则通过此项过滤。

模糊匹配仅支持*?字符。

列表中每一项的格式为Service:Type,长度范围:3-100。Service由字母和模糊匹配字符组成。Type由字母、数字和模糊匹配字符组成。

ResourceIds List 资源ID过滤列表。 列表长度:1~100。

当资源匹配列表中的任意一个资源ID时,则通过此项过滤。

列表项长度范围:1-256。

RegionIds List 地域过滤列表。 列表长度:1~100。

当资源所在地域匹配列表中的任意一个地域时,则通过此项过滤。

列表项长度范围:1-64。

ResourceGroupIds List 资源组过滤列表。 列表长度:1~100。

当资源属于列表中的任意一项资源组时,则通过此项过滤。

列表项长度范围:1-256。

Effect String 过滤行为。 取值:
  • Deny:通过所有过滤项的资源不会被清理。
  • Allow:通过所有过滤项的资源会被清理。
    说明 如果资源通过此过滤器,但也通过了Deny过滤器,则仍然不会被清理。
ResourceNamePatterns List 资源名称模糊匹配过滤列表。 列表长度:1~100。

当资源名称匹配列表中任意一项时,则通过此项过滤。

模糊匹配仅支持*?字符。

资源名称仅支持字母、数字、中文、空格、_-和模糊匹配字符。

列表项长度范围:1-100。

Tags List 标签过滤列表。支持自定义标签和系统标签。 列表长度:1~100。
工作方式如下:
  • 对于某一个过滤标签键(Key),只要资源的标签中存在该标签键,且资源相应的标签值与相应的过滤标签值(Value)相等,则该资源通过该过滤标签键(Key)的过滤。
    说明
    1. 如果存在多个过滤标签值(Value),则只需要与其中之一相等,就通过该过滤标签键(Key)的过滤。
    2. 如果存在一个标签过滤项,未指定过滤标签值,则只需要资源存在该标签键,就通过该过滤标签键(Key)的过滤。
  • 只有通过所有不相同的过滤标签键(Key)的过滤,才能通过此项过滤。

更多信息,请参见Tags属性

Tags语法

"Tags": [
  {
    "Value": String,
    "Key": String
  }
]

Tags属性

属性名称 类型 必须 允许更新 描述 约束
Value String 标签值。 长度:0-256。
说明 未指定该值与指定为空字符串不等价。
Key String 标签键。 长度:1-256。

Resources语法

"Resources": [
  {
    "ResourceId": String,
    "ResourceType": String,
    "RegionId": String
  }
]

Resources属性

属性名称 类型 必须 允许更新 描述 约束
ResourceId String 要清理的资源的ID。 长度:1-256。
ResourceType String 要清理的资源类型。 更多信息,请参见支持清理的资源类型
RegionId String 要清理的资源的地域ID。 长度:1-64。

ExcludedResources语法

"ExcludedResources": [
  {
    "ResourceId": String,
    "ResourceType": String,
    "RegionId": String
  }
]

ExcludedResources属性

属性名称 类型 必须 允许更新 描述 约束
ResourceId String 要排除的资源ID。 长度:1-256。
ResourceType String 要排除的资源类型。 更多信息,请参见支持清理的资源类型
RegionId String 要排除的资源的地域ID。 长度:1-64。

返回值

Fn::GetAtt

  • ResourceDetails:待清理资源的详细信息。取值为dict的列表,dict包含以下字段:
    字段 类型 说明
    ResourceType String 资源类型。
    RegionId String 资源所在的地域ID。
    ResourceId String 资源ID。
    ResourceName String 资源名称。
    CleanupType String 资源的清理类型。取值:
    • Normal:可以正常删除资源。
    • DeleteWithInstance:资源将连同他所属的资源一起被删除。如果他所属的资源被过滤或排除,删除可能会失败。CleanupTypeReasons提供了更多信息。
    • UnableToDelete:无法删除资源。CleanupTypeReasons提供了更多信息。
    CleanupTypeReasons List 资源清理类型原因列表。
    ResourceStatus String 资源状态。取值:
    • Deleting:资源正在删除中。
    • Failure:资源删除失败。
    • Success:资源删除成功。
    • Skipped:资源删除被跳过。
    • Pending:资源待删除。
    ResourceStatusReason String 资源状态原因。
    Dependencies List 资源的删除依赖。取值为dict的列表,dict包含以下字段:
    • ResourceType:依赖资源的资源类型。
    • RegionId:依赖资源的地域ID。
    • ResourceId:依赖资源的ID。
  • ResourcePartialDetails:简化版本ResourceDetails,只包含ResourceType、RegionId、ResourceId、ResourceName、ResourceStatus、ResourceStatusReason字段。
  • NoCleanupResourceDetails:扫描过但不进行清理的资源详情。格式与ResourceDetails相同。
  • NoCleanupResourcePartialDetails:简化版本NoCleanupResourceDetails,只包含ResourceType、RegionId、ResourceId、ResourceName、ResourceStatus、ResourceStatusReason字段。
  • ResourceSummary:要清理的资源的摘要信息。取值为dict的列表,dict包含以下字段:
    字段 类型 说明
    ResourceType String 资源类型。
    DeletingCount Integer 删除中的资源数量。
    SuccessCount Integer 删除成功的资源数量。
    FailureCount Integer 删除失败的资源数量。
    SkippedCount Integer 跳过删除的资源数量。
    PendingCount Integer 待删除的资源数量。
    OtherCount Integer 其他状态的资源数量。
    TotalCount Integer 资源的总数量。
  • ScanErrors:扫描错误。仅在Mode为Loose时返回。取值为dict的列表,dict包含以下字段:
    字段 类型 说明
    ResourceType String 资源类型。
    RegionId String 地域ID。
    ErrorMessage String 相关地域和资源类型扫描错误信息。
  • CleanResult:清理结果。取值如下:
    • Success:所有资源清理成功。
    • ResourceFailure:部分资源清理失败。
    • Timeout:清理超时。
    • CheckFailure:清理预检查失败。
    • UnknownFailure:未知错误。
    • UserCancelled:用户取消。
    • None:未触发清理。

示例

JSON格式

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "FailureOption": {
      "Type": "String",
      "Description": "The failure option of cleanup phase:\n- Normal: Resource failure does not affect the resources that depend on it.\n- Fast: Resource failure causes all resources that depend on it to fail.\nDefault to Normal.",
      "AllowedValues": [
        "Normal",
        "Fast"
      ],
      "Default": "Normal"
    },
    "ResourceFilters": {
      "Type": "Json",
      "Description": "Resource filters that ResourceCleaner uses to filter out the resources to be cleaned up during scanning.\nThere are two filtering behaviors(Effect): Allow and Deny. The filters work as below:\n1.Any resource denied by any Deny filter will not be cleaned up.\n2.If there is not any Allow filter, all resources not denied by any Deny filter will be cleaned up.\n3.If there are some Allow filters, only resources allowed by some Allow filter and not denied by any Deny filter will be cleaned up.\nIf filters are changed during resource update, ResourceCleaner requires to rescan. And if Action equals CleanUp, an error occurs.",
      "MinLength": 1,
      "MaxLength": 100,
      "Default": [
        {
          "ResourceIds": [
            "i-bp1h09ipy0atb4kq****"
          ]
        }
      ]
    },
    "Action": {
      "Type": "String",
      "Description": "Resource cleaner actions:\n- Scan: Scanning phase. Scan out the resources to be cleaned up.\n- CleanUp: Cleanup phase. Clean up the scanned resources. It it not allowed for resource creation.\n- Scan+CleanUp: Scan first, then CleanUp.\n- ScanWhenCreatingAndUpdating+CleanUpWhenDeleting: Scan when creating or updating resource, and CleanUp when deleting resource.",
      "AllowedValues": [
        "Scan",
        "CleanUp",
        "Scan+CleanUp",
        "ScanWhenCreatingAndUpdating+CleanUpWhenDeleting"
      ],
      "Default": "Scan"
    },
    "CleanUpRetryCount": {
      "Type": "Number",
      "Description": "The maximum number of executions of cleanup phase.\nDefault to 1, which means no retry.\nConditions that trigger a retry: (the relationship is or)\n1.There are resources which fail to be cleaned up.\n2.The cleanup is timeout.",
      "MinValue": 1,
      "MaxValue": 5,
      "Default": 1
    },
    "CleanUpTimeout": {
      "Type": "Number",
      "Description": "The timeout seconds of executions of cleanup phase.\nDefault to 1 hour.",
      "MinValue": 60,
      "MaxValue": 14400,
      "Default": 3600
    },
    "ExcludedResources": {
      "Type": "Json",
      "Description": "Exclude parts from resources to be cleaned up.",
      "MinLength": 1,
      "MaxLength": 1000,
      "Default": [
        {
          "ResourceId": "i-bp1h09ipy0atb4kq****",
          "ResourceType": "ECS:Instance"
        }
      ]
    }
  },
  "Resources": {
    "ResourceCleaner": {
      "Type": "ALIYUN::ROS::ResourceCleaner",
      "Properties": {
        "FailureOption": {
          "Ref": "FailureOption"
        },
        "Action": {
          "Ref": "Action"
        },
        "ResourceFilters": {
          "Ref": "ResourceFilters"
        },
        "CleanUpRetryCount": {
          "Ref": "CleanUpRetryCount"
        },
        "CleanUpTimeout": {
          "Ref": "CleanUpTimeout"
        },
        "ExcludedResources": {
          "Ref": "ExcludedResources"
        }
      }
    }
  },
  "Outputs": {
    "ResourceDetails": {
      "Description": "The details of resources to be cleaned up.\nThe value is a list of dict. The dict contains the fields below:\n- ResourceType: Resource type of the resource.\n- RegionId: Region ID of the resource.\n- ResourceId: ID of the resource.\n- ResourceName: Name of the resource.\n- CleanupType: Cleanup type of the resource. Valid values:\n  - Normal: The resource can be deleted normally.\n  - DeleteWithInstance: The resource will be deleted with the resource it belongs to. If the resource it belongs to is filtered or excluded, the deletion probably fails. CleanupTypeReasons give more information.\n  - UnableToDelete: Unable to delete the resource. CleanupTypeReasons give more information.\n- CleanupTypeReasons: The information of the related CleanupType.\n- ResourceStatus: Status of the resource. Valid values:\n  - Deleting: The resource is deleting.\n  - Failure: The deletion of the resource failed.\n  - Success: The resource is deleted.\n  - Skipped: The deletion of the resource is skipped.\n  - Pending: The deletion of the resource is not started.\n- ResourceStatusReason: The information of the related ResourceStatus.\n- Dependencies: The resources that need to be deleted before the deletion of the resource. The value is a list of dict. The dict contains the fields below:\n  - ResourceType: Resource type of the dependency resource.\n  - RegionId: Region ID of the dependency resource.\n  - ResourceId: ID of the dependency resource.",
      "Value": {
        "Fn::GetAtt": [
          "ResourceCleaner",
          "ResourceDetails"
        ]
      }
    },
    "NoCleanupResourceDetails": {
      "Description": "The details of the resources that are scanned but filtered.\nOnly resources with the resource types ResourceCleaner supports and the regions not filtered are scanned.\nThe format is the same as ResourceDetails.",
      "Value": {
        "Fn::GetAtt": [
          "ResourceCleaner",
          "NoCleanupResourceDetails"
        ]
      }
    },
    "ResourceSummary": {
      "Description": "The details of resources to be cleaned up.\nThe value is a list of dict. The dict contains the fields below:\n- ResourceType: Resource type of the resources.\n- DeletingCount: Number of deleting resources of the resource type.\n- SuccessCount: Number of deleted resources of the resource type.\n- FailureCount: Number of resources that failed to delete of the resource type.\n- SkippedCount: Number of skipped resources of the resource type.\n- PendingCount: Number of resources that have not been deleted of the resource type.\n- OtherCount: Number of other resources of the resource type.\n- TotalCount: Number of total resources of the resource type.",
      "Value": {
        "Fn::GetAtt": [
          "ResourceCleaner",
          "ResourceSummary"
        ]
      }
    }
  }
}