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

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
QT自定义信号,信号emit,信号参数注册
使用signals声明返回值是void在需要发送信号的地方使用emit 信号名字(参数)进行发送在需要链接的地方使用connect进行链接ct进行链接。
70 0
QT自定义信号,信号emit,信号参数注册
|
设计模式 Unix Shell
ECF机制:信号 (Signal)
ECF机制:信号 (Signal)
183 0
|
3月前
|
Linux 程序员 API
信号的机制——信号处理函数的注册
【9月更文挑战第17天】在 Linux 系统中,信号用于响应各种事件,可通过 `kill -l` 查看所有信号。每个信号有唯一 ID 及默认操作,如终止(Term)或生成核心转储(Core)。进程可执行默认操作、捕获信号或忽略信号,但无法忽略 SIGKILL 和 SIGSTOP。常用 `signal` 或 `sigaction` 函数注册信号处理函数,后者更灵活且推荐使用。信号处理涉及系统调用和内核设置,建议根据需求定制参数。
使用信号集,验证可靠信号挨个排队响应和不可靠信号会丢失的特点
使用信号集,验证可靠信号挨个排队响应和不可靠信号会丢失的特点
|
7月前
|
存储 Linux
【linux进程信号(二)】信号的保存,处理以及捕捉
【linux进程信号(二)】信号的保存,处理以及捕捉
|
7月前
|
Go
通道计时器,处理事件的新思路
通道计时器,处理事件的新思路
52 0
|
7月前
|
API
epoll监听信号事件-signalfd
epoll监听信号事件-signalfd
76 0
|
关系型数据库 RDS
MOSFET大信号工作及开关应用
MOSFET(金属氧化物半导体场效应晶体管)是一种常见的半导体器件,具有高输入阻抗、低输出阻抗和较高的开关速度,因此广泛应用于各种电子设备和电路中。
127 0
|
Linux Windows Ubuntu
时钟回调
时钟回调
391 1
|
Linux
【Linux信号专题】三、未决信号集、阻塞信号集与信号集操作函数
【Linux信号专题】三、未决信号集、阻塞信号集与信号集操作函数
363 0
【Linux信号专题】三、未决信号集、阻塞信号集与信号集操作函数