本教程介绍如何使用弹性伸缩生命周期挂钩挂起ECS实例,并结合运维编排服务OOS的模板,实现将ECS实例自动加入和移出MongoDB实例白名单。
前提条件
- 使用本教程进行操作前,请确保您已经注册了阿里云账号。如还未注册,请先完成账号注册。
- 已创建伸缩组,且伸缩组处于启用状态。
- 已创建MongoDB实例。
- 已为OOS服务创建RAM角色。该RAM角色的可信实体必须为阿里云服务,受信服务为运维编排服务,且拥有执行OOS模板的权限。具体操作,请参见为OOS服务设置RAM权限。说明 本教程中使用的示例RAM角色为OOSServiceRole,您也可以使用其他自定义的RAM角色。
背景信息
伸缩组支持关联负载均衡实例和RDS实例,但是暂时不能关联MongoDB实例。如果您有业务数据存储在MongoDB实例上,手动配置ECS实例加入或移出MongoDB实例白名单,操作效率较低。您可以通过生命周期挂钩和OOS模板将ECS实例自动加入和移出MongoDB实例白名单,但需要注意以下内容:
- 如果伸缩组已有存量的ECS实例,您需要手动将相关ECS实例的IP添加至MongoDB实例白名单。否则,当移除一个MongoDB白名单中不存在的实例私网IP时,将出现错误。
- 您需要通过生命周期挂钩的通知标识(NotificationMetadata,简称metadata)为创建OOS执行指定所需的参数。
- metadata必须为JSON字符串格式。
- metadata中的键,必须与OOS模板参数一一对应。
- OOS模板中不存在默认值的参数必须指定,存在默认值的参数可选择是否指定以覆盖默认值。
操作步骤
本教程以OOS公共模板ACS-ESS-LifeCycleModifyMongoDBIPWhitelist为例,实现在扩容时将ECS实例加入MongoDB实例白名单。步骤如下:
说明 如果需要在缩容时将ECS实例移出MongoDB实例白名单,创建适用于弹性收缩活动的生命周期挂钩并触发缩容即可。
步骤一:对RAM角色授予OOS服务权限
您需要拥有OOS的执行权限才能执行OOS的模板。执行ACS-ESS-LifeCycleModifyMongoDBIPWhitelist中定义的运维操作时涉及云服务器ECS、弹性伸缩、云数据库MongoDB的资源。
- 登录RAM控制台。
- 创建权限策略。
- 为OOSServiceRole授予权限策略。
步骤二:为扩容活动创建生命周期挂钩并触发扩容
- 登录弹性伸缩控制台。
- 在左侧导航栏中,单击伸缩组管理。
- 在顶部菜单栏处,选择地域。
- 找到待操作的伸缩组,选择任一种方式打开伸缩组详情页面。
- 在伸缩组名称/ID列,单击伸缩组ID。
- 在操作列,单击查看详情。
- 为扩容活动创建生命周期挂钩。
- 触发扩容。本教程中以手动执行伸缩规则为例,您也可以通过定时任务、报警任务等方式触发扩容。说明 手动执行伸缩规则触发扩缩容时,生命周期挂钩会生效,但手动添加或移出已有ECS实例时,生命周期挂钩不会生效。执行伸缩规则后自动创建1台ECS实例,由于伸缩组内已创建生命周期挂钩ESSHookForAddMongoDBWhitelist,ECS实例会被挂起,同时自动通知OOS服务执行ACS-ESS-LifeCycleModifyMongoDBIPWhitelist中定义的运维操作。
步骤三:查看MongoDB实例白名单
- 登录云数据库MongoDB管理控制台。
- 在左侧导航栏,单击副本集实例列表。
- 找到MongoDB实例,在实例ID/名称区域,单击实例ID。
- 在左侧导航栏,单击 。
- 如果MongoDB实例白名单中加入了新建ECS实例的私有IP,符合使用公共模板ACS-ESS-LifeCycleModifyMongoDBIPWhitelist的预期。
- 如果成功创建了ECS实例,但是新建ECS实例的私有IP并没有加入MongoDB实例白名单,请前往OOS控制台查看运维任务执行情况。具体操作,请参见(可选)步骤四:查看OOS执行情况。
(可选)步骤四:查看OOS执行情况
- 登录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模板中定义的运维任务。