使用WaitCondition与WaitConditionHandle进行信号通知
1. 编写ROS模板
编写ROS模板的基本方式可以参考《使用ROS创建VPC、VSwitch》。
查询资源类型详情
当在ECS实例中安装Nginx服务时,您可以在ROS模板中定义ALIYUN::ECS::RunCommand、ALIYUN::ROS::WaitCondition和ALIYUN::ROS::WaitConditionHandle资源,实现单次发送并接收信号。
说明:访问资源类型索引,根据部署场景查询资源类型。
声明创建的资源(Resources)
示例代码段如下:
{ "ROSTemplateFormatVersion": "2015-09-01", "Description": "", "Parameters": { "InstanceId": { "Type": "String", "AssociationProperty": "ALIYUN::ECS::Instance::InstanceId" } }, "Resources": { "InstallNginx": { "Type": "ALIYUN::ECS::RunCommand", "Properties": { "Timeout": 60, "Name": "InstallNginxScript", "CommandContent": { "Fn::Replace": [ { "ros-notify": { "Fn::GetAtt": [ "InstallNginxWaitConditionHandle", "CurlCli" ] } }, { "Fn::Join": [ "", [ "#!/bin/sh \n", "yum install -y nginx\n", "systemctl restart nginx\n", "if [[ $? -eq 0 ]];\n", "then \n", " ros-notify -d \"{\\\"status\\\" : \\\"SUCCESS\\\"}\" \n", "else \n", " ros-notify -d \"{\\\"status\\\" : \\\"FAILURE\\\"}\" \n", "fi \n" ] ] } ] }, "Type": "RunShellScript", "InstanceIds": [ { "Ref": "InstanceId" } ] } }, "InstallNginxWaitCondition": { "Type": "ALIYUN::ROS::WaitCondition", "Properties": { "Handle": { "Ref": "InstallNginxWaitConditionHandle" }, "Timeout": 60 } }, "InstallNginxWaitConditionHandle": { "Type": "ALIYUN::ROS::WaitConditionHandle" } }, "Outputs": { }, "Metadata": { "ALIYUN::ROS::Interface": { "ParameterGroups": [ { "Parameters": [ "InstanceId" ], "Label": { "default": "ECS配置" } } ], "TemplateTags": [ "acs:example:云起实验室:使用WaitCondition与WaitConditionHandle进行信号通知" ] } } }
模板解释:
1. 选择当前账号所选地域下已有ECS实例运行安装Nginx服务的Shell脚本。
说明:本场景需要当前地域下有ECS实例。您可以提前购买ECS服务器,或结合《使用ROS创建ECS实例》一起练习。
2. 通过Fn::GetAtt获取ALIYUN::ROS::WaitConditionHandle中的返回值CurlCli作为发送信号的命令。
说明:通过添加-Body {"status": ""}指定信号类型,status取值包括SUCCESS、FAILURE和WARNING。如果出现以下情况,则资源栈创建失败。
收到FAILURE信号。
在设定时间内,收到的信号数量未满足要求。
收到的信号数量满足了要求,且所有信号均为WARNING。
3. 通过Fn::Replace将ALIYUN::ROS::WaitConditionHandle中的CurlCli替换为云助手执行的自定义脚本中发送信号的变量ros-notify。
您可以使用变量ros-notify简化自定义脚本代码,发送Nginx服务安装成功或失败的信号。
2. 创建资源栈
以下操作需登录阿里云账号,在资源编排控制台完成以下操作流程。
访问资源编排控制台
进入资源编排控制台。
访问资源栈页面
在资源编排控制台左侧导航栏中单击资源栈。
选择资源创建地域
在页面左上角的地域下拉列表,选择资源栈的所在地域(例如:华北2:北京)。
创建资源栈
在资源栈列表页面,单击创建资源栈,然后在下拉列表中选择使用新资源(标准)。
输入模板
在选择模板页面,选择已有模板:选择输入模板方式,然后将上述示例模板内容复制到模板内容输入框内。然后单击下一步。
模板参数关联关系动态呈现
在配置模板参数页面,配置资源栈名称及其余参数,然后单击下一步。
说明:体验本场景需要您提前在当前资源栈地域下准备一台ECS服务器。
资源栈信息配置(可选)
配置项 |
说明 |
资源栈策略 |
取值: 无资源栈策略:不设置资源栈策略。 输入资源栈策略:上传文件或在文本框手动输入资源栈策略。 关于资源栈策略的更多信息,请参见资源栈策略。 |
失败时回滚 |
取值: 已启用:创建资源栈失败时,启用回滚策略。 已禁用:创建资源栈失败时,禁用回滚策略。 |
超时设置 |
如果所有资源的创建或更新没有在该时间内完成,系统将自动回滚到创建或更新之前的状态。 取值范围:10~1440。 单位:分钟。 |
删除保护 |
防止资源栈被意外删除。 取值: 已启用:启用删除保护。 已禁用:禁用删除保护。 |
RAM角色 |
您可以创建可信实体为资源编排服务的RAM角色,然后根据ROS模板中资源所需最小权限为RAM角色授权。 如果指定RAM角色,ROS将根据RAM角色的权限创建资源栈。关于如何创建RAM角色和为RAM角色授权,请参见创建可信实体为阿里云服务的RAM角色和为RAM角色授权。 如果不指定RAM角色,ROS将使用当前账号相关权限创建资源栈。 |
标签 |
由一对键值对组成,方便您对资源栈进行分类。 您可以单击添加,然后在编辑标签绑定对话框设置标签键和标签值,最后单击确定。 |
资源组 |
您可以选择资源栈所在的资源组。如果不指定资源组,资源栈将加入默认资源组。 关于如何创建资源组,请参见创建资源组。 |
创建资源栈
在检查并确认页面,单击创建。
3. 查看资源栈
本步骤将指导您在完成创建资源栈操作后,如何查询资源栈详情。
1. 进入资源编排控制台。
2. 在左侧导航栏单击资源栈。
3. 在页面左上角的地域下拉列表,选择资源栈的所在地域。
4. 在资源栈列表页面,找到需要查看的资源栈,单击资源栈名称列的资源栈ID。
5. 在资源栈管理页面,您可以执行以下操作:
单击资源栈信息页签,查看基本信息和资源栈策略。
查看资源栈事件
6. 单击事件页签,查看资源栈生命周期中发生的每一个事件。通过查看资源栈事件可以判断,查看当Nginx服务安装成行时,ECS实例发送的成功信号:Signal: status:SUCCESS reason:Signal 1 received
查看资源栈资源
7. 单击资源页签,查看资源栈创建涉及到的资源。
4. 释放资源栈
本步骤将指导您如何释放通过资源编排控制台创建资源内容。
进入资源栈列表
1. 在模板页签,单击右上角的 图标。
选择待删除的资源栈
2. 在资源栈列表页面,找到您创建的资源栈,单击操作列下的删除。
选择资源栈删除方式并删除
3. 在删除资源栈对话框中,删除方式选择释放资源,单击确定。
实验链接:https://developer.aliyun.com/adc/scenario/cb7950f6a40f4c0db71a2160cb7a26c3