使用偏差检测可以识别在资源编排ROS(Resource Orchestration Service)管理之外进行配置更改的资源栈资源。您可以采取纠正措施,使资源栈资源再次与其在资源栈模板中的定义同步。解决偏差有助于确保资源配置的一致性。

背景信息

您可以在ROS之外更改资源,使用创建资源的底层服务直接编辑资源。例如:您可以使用ECS控制台来更新作为ROS资源栈一部分而创建的服务器实例。在ROS之外进行的更改会使资源栈的更新或删除操作复杂化。使用偏差检测可以识别在ROS管理之外进行配置更改的资源栈资源。

通过偏差检测,您可以检测资源栈的实际配置是否与其预期配置不同或已经存在偏差。使用ROS可以在整个资源栈或资源栈内的单个资源上检测偏差,您可以检测属性、资源是否被删除:

  • 如果某个资源的实际属性值与预期属性值不同,则认为该资源已经存在偏差。
  • 如果资源栈的一个或多个资源已经存在偏差,则认为资源栈已经存在偏差。

为了确定资源是否已经存在偏差,ROS将预期的资源属性值(如资源栈模板中所定义)指定为模板参数的值,并将预期值与这些资源属性的实际值进行比较。

说明 如果资源的一个或多个属性值被删除或修改,则认为该资源已经存在偏差。ROS将生成已经存在偏差的资源栈中每个资源的详细信息。

检测偏差时的注意事项

ROS仅在支持偏差检测的资源上检测偏差,不支持偏差检测的资源会显示NOT_CHECKED状态。详情请参见支持偏差检测的资源类型

您可以在具有以下状态的资源栈上执行偏差检测:
  • CREATE_COMPLETE
  • UPDATE_COMPLETE
  • ROLLBACK_COMPLETE
  • ROLLBACK_FAILED
  • CHECK_COMPLETE

当在资源栈上检测偏差时,ROS不会在任何属于该资源栈的嵌套资源栈上检测偏差。您也可以直接在嵌套资源栈上启动偏差检测操作。

ROS仅通过资源栈模板或指定模板参数来确定属性值的偏差,这不包括资源属性的默认值。要使ROS跟踪资源属性以确定偏差,需要显示设置的属性值。

为了在资源栈上成功执行偏差检测,您必须具有以下权限:

  • 支持包含在资源栈中的偏差检测的每个资源的读取权限。例如,如果资源栈包含ALIYUN::VPC::EIP资源,则您必须具有vpc:DescribeEipAddresses权限才能在资源栈上进行偏差检测。
  • 如果需要对资源栈进行偏差检测,则需要具有ros:DetectStackDrift权限。
  • 如果需要对资源进行偏差检测,则需要具有ros:DetectStackResourceDrift权限。

在某些情况下,ROS可能无法返回准确的偏差结果。您应该了解这些情况,以便正确解释您的偏差检测结果:

  • 在某些情况下,属性数组中包含的对象将报告为偏差,而实际上它们是从负责该资源的底层服务提供给属性的默认值。
  • 您可以在资源栈模板中指定某些资源属性。ROS无法将其与生成的资源栈资源中的属性进行比较,因此这些属性不能包括在偏差检测结果中。这些属性可分为四大类:
    • ROS无法在资源栈模板中映射回初始资源属性值的属性值。
    • 负责资源的服务不返回的属性值。
    • 某些属性值被有意设计成永远不会由资源所属的服务返回。这些属性值往往包含机密信息,例如密码或其他不应泄露的敏感数据。
    • ROS尚未支持的资源属性。

    资源的属性究竟是否支持偏差检查,可以通过GetResourceType接口查询,详情请参见GetResourceType。以查询ALIYUN::ESS::ScalingRule资源的返回值为例,最外层的SupportDriftDetection字段表明资源是否支持偏差检查。如果取值为true,表明资源支持偏差检查,此时每个属性都有SupportDriftDetection字段表明该属性是否支持偏差检查。

    {
        ...
        "ResourceType": "ALIYUN::ESS::ScalingRule",
        "Properties": {
            "ScalingRuleName": {
                ...
                "SupportDriftDetection": true
            },
            ...
        },
        "SupportDriftDetection": true
    }

偏差检测状态码

以下给出了资源偏差状态的具体解释:

  • 偏差检测操作状态:描述偏差检测操作的当前状态。
  • 偏差状态。
    • 资源栈组:根据属于资源栈组的资源栈实例的偏差状态来描述资源栈组的总体偏差状态。
    • 资源栈实例:根据资源栈实例关联资源栈的偏差状态来描述资源栈实例的偏差状态。
    • 资源栈:根据资源栈资源的偏差状态来描述资源栈的总体偏差状态。
  • 资源偏差状态:描述单个资源的偏差状态。
ROS分配给资源栈偏差检测操作的状态码如下表所示。
偏差检测操作状态 描述
DETECTION_COMPLETE 已经对支持偏差检测的资源栈中的所有资源成功完成了资源栈偏差检测操作。
DETECTION_FAILED 资源栈偏差检测操作对于资源栈中的至少一个资源检测失败。
DETECTION_IN_PROGRESS 资源栈偏差检测操作目前正在进行中。

ROS分配给资源栈的偏差状态码如下表所示。

偏差状态 描述
DRIFTED
  • 资源栈:资源栈与其预期模板配置不同或已经存在偏差。如果资源栈的一个或多个资源已经存在偏差,则认为资源栈已经存在偏差。
  • 资源栈实例:如果与资源栈实例关联的资源栈已经存在偏差,则认为该实例已经存在偏差。
  • 资源栈组:如果一个或多个资源栈实例已经存在偏差,则认为资源栈组已经存在偏差。
NOT_CHECKED ROS尚未检查资源栈、资源栈组或资源栈实例是否与其预期模板配置不同。
IN_SYNC 偏差检测支持资源的当前配置与其预期的模板配置相匹配。
说明 资源栈、资源栈组或资源栈实例没有支持偏差检测的资源时,也具有IN_SYNC状态。

ROS分配给资源栈资源的偏差代码如下表所示。

资源偏差状态 描述
DELETED 资源与预期的模板配置不同,因为资源已被删除。
MODIFIED 资源与预期的模板配置不同。
NOT_CHECKED ROS没有检查资源是否与预期的模板配置不同。
IN_SYNC 资源的当前配置与其预期的模板配置相匹配。
ROS分配给与预期模板配置不同的资源属性的差异类型状态代码如下表所示。
属性差异类型 描述
ADD 已将值添加到数据类型为数组或列表的资源属性。
REMOVE 属性已从当前资源配置中删除。
NOT_EQUAL 当前属性值与资源栈模板中定义的预期值不同。

相关内容

偏差检测的相关内容如下表所示。
内容 描述
检测资源栈的偏差状态 在资源栈上执行偏差检测操作,可以确定资源栈是否已偏离其预期的模板配置,并返回有关支持偏差检测的资源栈中每个资源的偏差状态详情。
检测资源的偏差状态 对资源栈上单个资源执行偏差检测操作,可以确定资源是否已偏离其预期的模板配置。
支持偏差检测的资源类型 ROS仅在支持偏差检测的资源上检测偏差。
检测资源栈组的偏差状态 对资源栈组执行偏差检测,可以确定属于该资源栈组的任何资源栈实例是否与它们的预期配置不同或已经存在偏差。
纠正资源栈的偏差状态 纠正资源栈偏差有助于确保资源配置的一致性,使资源栈资源与资源栈模板中定义的资源保持同步。