使用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

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Java 测试技术
SpringBoot整合Zookeeper做分布式锁
SpringBoot整合Zookeeper做分布式锁
424 0
|
JavaScript 前端开发
JavaScript 获取地址栏指定参数(整理)
JavaScript 获取地址栏指定参数(整理)
|
存储 安全 JavaScript
【XSS】XSS漏洞详细指南
【XSS】XSS漏洞详细指南
762 3
|
自然语言处理 安全 前端开发
什么是CMS?CMS适合搭建什么网站?
CMS(内容管理系统)用于快速搭建、管理和发布网站内容。它支持自定义板块,降低建站门槛。CMS分为独立CMS和SaaS CMS两种类型,主要功能包括角色分配、SEO优化、多语言支持等。建站流程包括确定需求、选择系统、购买域名和主机、安装系统、选择模板、扩展栏目、添加内容、上线和维护。PageAdmin CMS是一款优秀的建站系统,推荐免费试用。
723 1
|
存储 Linux Docker
使用Docker存储驱动
【10月更文挑战第9天】
373 3
|
JavaScript Java 测试技术
基于Java的儿童福利院管理系统设计和实现(源码+LW+部署讲解)
基于Java的儿童福利院管理系统设计和实现(源码+LW+部署讲解)
295 7
|
消息中间件 Ubuntu 数据安全/隐私保护
Ubuntu上安装RabbitMQ
Ubuntu上安装RabbitMQ
462 1
|
Java 开发工具 Android开发
OpenCV(一):Android studio jni配置OpenCV(亲测有效,保姆级)
OpenCV(一):Android studio jni配置OpenCV(亲测有效,保姆级)
2535 0
Math.atan2求角度解析
`Math.tan(x/y)` 求得是与y轴的夹角,而 `Math.atan2(y, x)` 求得是与x轴的夹角(范围:\(-\pi\) 到 \(\pi\)),顺时针为负,逆时针为正。`Math.atan2` 函数注意点:y在前,x在后。它能正确处理各象限的角度,例如 `Math.atan2(1, 1)` 返回 \(\frac{\pi}{4}\),而 `Math.atan2(-1, -1)` 返回 \(-\frac{3\pi}{4}\)。
362 0
Math.atan2求角度解析
|
搜索推荐
【qt】自定义界面类
【qt】自定义界面类
261 0