使用WaitCondition与WaitConditionHandle进行信号通知

简介: 本场景主要介绍使用ALIYUN::ROS::WaitCondition与ALIYUN::ROS::WaitConditionHandle进行信号通知。

使用WaitCondition与WaitConditionHandle进行信号通知

1. 编写ROS模板

编写ROS模板的基本方式可以参考《使用ROS创建VPC、VSwitch》

查询资源类型详情

当在ECS实例中安装Nginx服务时,您可以在ROS模板中定义ALIYUN::ECS::RunCommandALIYUN::ROS::WaitConditionALIYUN::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

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 数据采集 Prometheus
【云原生监控系列第一篇】一文详解Prometheus普罗米修斯监控系统(山前前后各有风景,有风无风都很自由)(一)
【云原生监控系列第一篇】一文详解Prometheus普罗米修斯监控系统(山前前后各有风景,有风无风都很自由)(一)
2917 0
【云原生监控系列第一篇】一文详解Prometheus普罗米修斯监控系统(山前前后各有风景,有风无风都很自由)(一)
|
存储 数据可视化 安全
一张图的七十二变——阿里云OSS图片处理实践
      小张是某视频网站的新入职的UED,日常工作就是创作各式各样的海报banner。踌躇满志的小张,上了三天班就蔫了。因为他在完成一张图的创作后,还需要考虑:• 同一张图会以不同的形式应用于网站各处:有时候需裁剪成不同形状,有时需要加水印,有时需转换格式....• 为了风格统一,不同的图需要保持样式统一:不同图片排列组成成一组,每组图片风格(
3355 0
|
Python
Python字符串格式化利器:f-strings入门指南
Python字符串格式化利器:f-strings入门指南
680 80
|
负载均衡 监控 Java
Spring Cloud 5大组件有哪些?
Spring Cloud 提供了许多组件来构建分布式系统和微服务架构。
890 0
|
JavaScript
|
安全 机器人 Shell
【靶机】Windows渗透初体验-Steel Mountain
本靶机是windows版的mr robot,难度适中,值得一做。
646 0
|
测试技术 Android开发 iOS开发
Appium 是一个开源的自动化测试框架,它支持多种平台和多种编程语言
Appium是一款开源自动化测试框架,支持iOS和Android多平台及多种编程语言。通过WebDriver协议,开发者可编写自动化测试脚本。在iPhone上实现屏幕点击等操作需安装Appium及其依赖,启动服务器,并设置所需的测试环境参数。利用Python等语言编写测试脚本,模拟用户交互行为,最后运行测试脚本来验证应用功能。对于iPhone测试,需准备真实设备或Xcode模拟器。
718 1
|
域名解析 负载均衡 网络协议
【域名解析DNS专栏】DNS解析中的Anycast技术:原理与优势
在互联网中,DNS将域名转换为IP地址至关重要。Anycast技术通过将同一IP地址分配给多台地理上分散的服务器,确保客户端总能连接到最近且最轻载的服务器,从而加速DNS解析、实现负载均衡、提升抵御DDoS攻击的能力及服务高可用性。通过动态路由协议如BGP实现,Anycast极大地增强了DNS系统的性能和稳定性。
2003 2
|
测试技术 持续交付 开发工具
工作区:软件开发中的环境管理
【8月更文挑战第31天】
576 0
基于matlab的风力发电系统建模与详细性能仿真分析
本研究介绍风力发电原理与系统模型,使用MATLAB 2022a进行性能仿真。风力通过风轮转化为电能,涉及贝努利定理及叶素理论。仿真展示了风速与输出功率间的关系,包括风电利用系数、切入切出控制与MPPT控制效果。当风速超过25m/s时,系统自动停机保护设备。MPPT算法确保了在变化风速下获得最大功率。