阿里云资源编排之异步通知

本文涉及的产品
资源编排,不限时长
简介: 本文介绍阿里云资源编排服务(ROS)(下面简称ROS)的异步通知功能。 创建、更新或删除资源栈(下面简称Stack)时,为了判断操作是否完成,通常我们会起一个定时任务,轮询Stack的状态直至完成。这种做法比较低效,使用异步通知功能,可以避免这个问题。ROS会在资源栈的操作完成时,回调通知客户。 使用方法 在创建Stack时,通过Webhook参数指定回调地址。 回调地址可以是一个或多

本文介绍阿里云资源编排服务(ROS)(下面简称ROS)的异步通知功能。

创建、更新或删除资源栈(下面简称Stack)时,为了判断操作是否完成,通常我们会起一个定时任务,轮询Stack的状态直至完成。这种做法比较低效,使用异步通知功能,可以避免这个问题。ROS会在资源栈的操作完成时,回调通知客户。

使用方法

  • 在创建Stack时,通过Webhook参数指定回调地址。
  • 回调地址可以是一个或多个,通过逗号分隔。
  • 回调目前只支持HTTP POST。
  • Stack至少包含一个输出。

示例

搭建HTTP服务器

申请一台拥有公网IP的ECS,并安全组入方向开放相应端口。这里我创建一台CentOS 7.6的机器,安全组开放8081端口。登录机器执行如下命令,启动一个Web服务。

pip install web.py

cat >website.py <<EOF
# -*- coding: utf-8 -*-

import web
import json


urls = (
    '/', 'Index'
)


class Index(object):

    def GET(self):
        return "Hello, world!"

    def POST(self):
        s = web.data()
        try:
            print(json.dumps(json.loads(s), sort_keys=True, indent=4, separators=(',', ': ')))
        except:
            print(s)
        return "Hello, world!"


if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()
EOF

python website.py 8081

创建Stack

以Python SDK为例,重点关注带注释部分。

# coding:utf-8

import json
import pprint

from aliyunsdkcore import client
from aliyunsdkros.request.v20150901 import CreateStacksRequest


AK = '<AK>'                           # Access Key
SECRET = '<SECRET>'                   # Access Key Secret
REGION = '<REGION>'                   # RegionId,比如cn-beijing
WEB_HOOK = 'http://<PUBLIC_IP>:8081'  # 回调地址,使用ECS的公网IP代替PUBLIC_IP


class RequestHelper(object):

    def __init__(self):
        self._clt = client.AcsClient(AK, SECRET, REGION)

    _instance = None

    @classmethod
    def instance(cls):
        if not cls._instance:
            cls._instance = cls()
        return cls._instance

    def run(self, request, body=None):
        if body is not None:
            request.set_content(json.dumps(body))
        request.set_content_type('application/json')

        status, headers, body = self._clt.get_response(request)

        pprint.pprint(status)
        pprint.pprint(headers)
        try:
            pprint.pprint(json.loads(body))
        except ValueError:
            pprint.pprint(body)


def main():
    request = CreateStacksRequest.CreateStacksRequest()
    body = {
        'Name': 'test-web-hook',
        'DisableRollback': False,
        'TimeoutMins': 120,
        'Webhook': WEB_HOOK,          #通过Webhook参数指定回调地址
        'Template': {
            'ROSTemplateFormatVersion': '2015-09-01',
            'Resources': {
                'WaitConditionHandle': {
                    'Type': 'ALIYUN::ROS::WaitConditionHandle'
                }
            },
            'Outputs': {
                'CurlCli': {
                    'Value': {
                        'Fn::GetAtt': ['WaitConditionHandle', 'CurlCli']
                    }
                }
            }
        }
    }
    RequestHelper.instance().run(request, body)


if __name__ == '__main__':
    main()

观察回调结果

{
    "Outputs": [
        {
            "Description": "No description given",
            "OutputKey": "CurlCli",
            "OutputValue": "curl -i -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'x-acs-region-id: cn-beijing' http://100.100.100.110/waitcondition?stackname=test-web-hook\\&stackid=80bd6b6c-e888-4573-ae3b-93d29144911d\\&resource=WaitConditionHandle\\&expire=1555424388\\&signature=e014516fa8028d8a8df9c9f4c9f7dc82a49421c1"
        }
    ],
    "StackId": "80bd6b6c-e888-4573-ae3b-93d29144911d",
    "StackName": "test-web-hook",
    "Status": "CREATE_COMPLETE"
}

 

 

 

 

 

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
22天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
3月前
|
弹性计算 缓存 Kubernetes
异步任务处理系统问题之任务执行子系统实现资源的弹性伸缩的问题如何解决
异步任务处理系统问题之任务执行子系统实现资源的弹性伸缩的问题如何解决
|
弹性计算 运维 持续交付
基于资源编排服务(ROS)实现存量资源的IaC化
如果您需要一种简单而有效的方法来管理大量云资源并实现自动化部署,推荐使用阿里云的资源编排服务ROS(Resource Orchestration Service)。ROS能够将存量资源转化为IaC(基础设施即代码),通过资源场景创建、模版生成和资源栈导入等功能,实现资源的统一管理和自动化部署。这不仅提高了资源管理的效率,还降低了成本。如果您想了解如何更轻松地管理云资源并加速部署流程,ROS是一个值得深入了解的工具。
144 1
使用资源编排为云资源批量绑定标签
本场景介绍利用资源编排服务ROS(Resource Orchestration Service)在资源栈中创建资源,并同时为资源绑定标签,提升运维效率。
|
弹性计算 关系型数据库 RDS
运维编排系列场景-批量开启资源删除保护
背景删除保护是云产品针对云资源的一种保护措施,防止资源被意外删除。当您启用删除保护时,针对资源的删除操作将会失败,有效避免因操作疏忽、团队成员沟通不及时等原因造成不可挽回的后果。本文为您介绍如何通过运维编排批量开启资源删除(释放)保护。前提条件为ECS实例开启释放保护前提条件,参见开启和关闭实例释放保护。为用户主密钥(CMK)开启或关闭删除保护前提条件,参见开启删除保护。为RDS实例开启释放保护前
运维编排系列场景-批量开启资源删除保护
|
6月前
|
Kubernetes 安全 数据安全/隐私保护
ACK场景下应用程序安全访问云资源最佳实践
在实际的容器安全实践中,怎么样避免应用程序永久访问密钥。本文会介绍基于云原生的产品能力来实现无AK方案。
257 6
ACK场景下应用程序安全访问云资源最佳实践
|
存储 弹性计算 运维
资源编排ROS之资源场景
# 背景 [资源编排服务](https://help.aliyun.com/document_detail/28852.html)(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎
267 0
资源编排ROS之资源场景
|
JSON 弹性计算 运维
资源编排ROS之资源栈策略
背景 资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。 在创建资源栈时,允许对所有资源执行所有更新操
1150 0
|
消息中间件 JSON 弹性计算
资源编排ROS之自定制资源(基础篇)
本文介绍资源编排ROS的基础知识配置。
1950 1
资源编排ROS之自定制资源(基础篇)
|
移动开发 自然语言处理 运维
使用资源编排ROS一键批量开通阿里云产品
## 背景 如果你使用过阿里云的云产品/服务,你会发现其中有不少需要手动点击“开通”。比如初次使用 SLS 日志服务时,就会进入下面的界面: ![sls-enable-service.jpg](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/561d3fc5d9805e79a62a41a9094019c3.jpg) 作为个人用户,以手
1738 0
使用资源编排ROS一键批量开通阿里云产品