如果您希望在扩容时为新创建的ECS实例执行运维任务,或在缩容时为即将被释放的ECS实例执行运维任务,可以使用弹性伸缩生命周期挂钩挂起ECS实例,并结合运维编排服务OOS的模板实现自动化的定制化配置,从而更加灵活地管理ECS实例。

前提条件

  • 使用本教程进行操作前,请确保您已经注册了阿里云账号。如还未注册,请先完成账号注册
  • 已创建伸缩组,且伸缩组处于启用状态。
  • 已为OOS服务创建RAM角色OOSServiceRole,具体操作请参见为OOS服务设置RAM权限

背景信息

运维编排服务(OOS)是阿里云提供的云上自动化运维服务,能够自动化管理和执行任务。您可以通过模板定义执行任务、执行顺序、执行输入和输出,然后执行模板完成一组运维任务。更多说明,请参见什么是运维编排服务

弹性伸缩的生命周期挂钩功能支持选择OOS模板作为通知方式,在扩缩容时将ECS实例设置为挂起状态,然后通过OOS服务对ECS实例执行指定模板中定义的运维操作,实现自动化的定制化配置。更多说明,请参见创建生命周期挂钩

在以下场景中,推荐您使用生命周期挂钩与OOS模板自动完成运维任务:
  • 使用伸缩组自动响应高峰期的突增流量时,扩容出的ECS实例需要先启动内部的应用程序,并注册到统一的资源管理中心,才能开始正常处理业务流量。
  • 伸缩组需要与PolarDB等实例联动,在扩容时将ECS实例的IP加入PolarDB等实例的IP白名单,在缩容时将ECS实例移出PolarDB等实例的IP白名单。
  • 缩容时,需要从即将删除的ECS实例拷贝出某些日志文件等。

操作步骤

本教程以OOS公共模板ACS-ESS-LifeCycleCreateNetworkInterfaceAndEipAndAttachToInstance为例,实现在扩容时为所有新创建的ECS实例绑定一张辅助弹性网卡和一个弹性公网IP。步骤如下:

步骤一:对用户账号授予OOS服务权限

您需要拥有OOS的执行权限才能执行OOS的模板。执行ACS-ESS-LifeCycleCreateNetworkInterfaceAndEipAndAttachToInstance中定义的运维操作时涉及ECS、弹性伸缩、弹性公网IP的资源。

  1. 登录RAM控制台
  2. 在左侧导航栏,单击RAM角色管理
  3. 找到OOSServiceRole,在操作列,单击添加权限
    为OOS服务扮演的RAM角色OOSServiceRole添加权限即可完成授权。
  4. 添加权限页面,指定权限配置,然后单击确定
    本教程中使用的配置如下表所示,未提及的配置保持默认即可。
    配置项 说明
    授权范围 选择云帐号全部资源
    选择权限 添加系统策略AliyunECSFullAccess、AliyunESSFullAccess和AliyunEIPFullAccess。

步骤二:为扩容活动创建生命周期挂钩并触发扩容

  1. 登录弹性伸缩控制台
  2. 在左侧导航栏中,单击伸缩组管理
  3. 在顶部菜单栏处,选择地域。
  4. 找到待操作的伸缩组,选择一种方式打开伸缩组详情页面。
    • 伸缩组名称/ID区域,单击伸缩组ID。
    • 操作区域,单击查看详情
  5. 为扩容活动创建生命周期挂钩。
    1. 在左侧导航栏中,单击生命周期挂钩
    2. 指定生命周期挂钩配置,然后单击确认创建
      本教程中使用的配置如下表所示,未提及的配置保持默认即可。
      配置项 说明
      名称 输入ESSHookForAddNicEip。
      适用的伸缩活动类型 选择弹性扩张活动
      超时时间 输入适当的超时时间,例如300秒。
      说明 超时时间即用于执行自定义操作的时间,若超时时间过短,可能导致自定义操作失败,请评估自定义操作耗时并设置适当的超时时间。
      执行策略 选择继续
      通知方式 模板配置如下:
      • 通知方式:选择OOS模板
      • OOS模板类型:选择公共模板
      • 公共模板:选择ACS-ESS-LifeCycleCreateNetworkInterfaceAndEipAndAttachToInstance。
      ACS-ESS-LifeCycleCreateNetworkInterfaceAndEipAndAttachToInstance的执行参数配置如下:
      • internetChargeType:选择PayByBandwidth,代表使用弹性公网IP时按固定带宽计费。
      • bandwidth:输入5,代表使用弹性公网IP时带宽峰值为5 Mbit/s。
      • 执行使用到的权限的来源:选择OOSServiceRole,步骤一中已为RAM角色OOSServiceRole添加操作ECS、弹性伸缩、弹性公网IP资源的权限,OOS服务扮演该RAM角色即可拥有相关权限。
  6. 触发扩容。
    本教程中以手动执行伸缩规则为例,您也可以通过定时任务、报警任务等方式触发扩容。
    说明 手动执行规则触发扩容与手动添加ECS实例的效果不同,手动执行规则触发缩容与手动移出ECS实例的效果也不同。手动添加和移出ECS实例时,ECS实例不会被生命周期挂钩挂起。
    1. 在左侧导航栏中,单击伸缩规则
    2. 在页面右上角,单击创建伸缩规则
    3. 设置伸缩规则的属性,然后单击创建伸缩规则
      本教程中使用的配置如下表所示,未提及的配置保持默认即可。
      配置项 说明
      伸缩规则名称 输入Add1。
      伸缩规则类型 选择简单规则
      执行的操作 设置为增加1台。
    4. 伸缩规则页面,找到新建的伸缩规则Add1,在操作列,单击执行
    5. 执行伸缩规则对话框,单击确定
    执行伸缩规则后自动创建1台ECS实例,由于伸缩组内已创建生命周期挂钩ESSHookForAddNicEip,ECS实例会被挂起,同时自动通知OOS服务执行ACS-ESS-LifeCycleCreateNetworkInterfaceAndEipAndAttachToInstance中定义的运维操作。
    如果伸缩活动的状态为失败,且出现以下报错,请前往OOS控制台查看运维任务执行情况,具体步骤请参见(可选)步骤三:查看OOS执行情况伸缩活动失败
  7. 查看自动创建的ECS实例是否符合预期。
    1. 在左侧导航栏中,单击ECS实例列表
    2. 找到自动创建的ECS实例,在云服务器ID/名称列,单击实例ID。
    3. 在左侧导航栏中,单击本实例弹性网卡
      如下图所示,除主网卡外,ECS实例自动绑定了一张辅助弹性网卡并且分配了弹性公网IP,符合使用公共模板ACS-ESS-LifeCycleCreateNetworkInterfaceAndEipAndAttachToInstance的预期。自动绑定的辅助ENI

      如果成功创建了ECS实例,但ECS实例并没有自动绑定辅助弹性网卡并分配弹性公网IP,请前往OOS控制台查看运维任务执行情况,具体步骤请参见(可选)步骤三:查看OOS执行情况

(可选)步骤三:查看OOS执行情况

  1. 登录OOS管理控制台
  2. 在左侧导航栏,单击执行管理
  3. 按开始时间找到执行,然后在操作列,单击详情
  4. 单击高级视图
    执行结果页签中显示执行状态。查看执行情况
    如果执行失败,执行结果页签中也会显示相关的报错信息。OOS执行结果

常见问题

如果运维任务执行失败,请根据执行结果中的报错信息排查原因。常见的报错信息及解决方案如下:
  • 报错信息:Forbidden.Unauthorized message: A required authorization for the specified action is not supplied.

    解决方案:请检查是否为RAM角色OOSServiceRole添加了相应的权限,例如步骤一中的示例权限。您需要为RAM角色添加操作权限,确保OOS服务能够操作OOS模版中涉及的资源。

  • 报错信息:Forbidden.RAM message: User not authorized to operate on the specified resource, or this API doesn't support RAM.

    解决方案:请检查是否为RAM角色OOSServiceRole添加了相应的权限,例如步骤一中的示例权限。您需要为RAM角色添加操作权限,确保OOS服务能够操作OOS模版中涉及的资源。

  • 报错信息:LifecycleHookIdAndLifecycleActionToken.Invalid message: The specified lifecycleActionToken and lifecycleActionId you provided does not match any in process lifecycle action.

    解决方案:请评估生命周期挂钩的超时时间,确保在超时时间内可以执行完OOS模板中定义的运维任务。