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

本文涉及的产品
资源编排,不限时长
简介: 资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。ROS资源编排接入了大量的阿里云资源,目前涉

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

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

使用方法

  • 在创建Stack时,通过Webhook(2015-09-01版本)或NotificationURLs(2019-09-10版本)参数指定回调地址。
  • 回调地址可以是一个或多个,最多5个。Webhook(2015-09-01版本)可以通过逗号分隔传递,NotificationURLs(2019-09-10版本)直接传递。
  • 回调目前只支持HTTP POST。
  • Stack至少包含一个输出。

示例

搭建HTTP服务器

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

pip install web.py==0.39

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/
目录
相关文章
|
移动开发 自然语言处理 运维
使用资源编排ROS一键批量开通阿里云产品
## 背景 如果你使用过阿里云的云产品/服务,你会发现其中有不少需要手动点击“开通”。比如初次使用 SLS 日志服务时,就会进入下面的界面: ![sls-enable-service.jpg](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/561d3fc5d9805e79a62a41a9094019c3.jpg) 作为个人用户,以手
1736 0
使用资源编排ROS一键批量开通阿里云产品
|
JSON Cloud Native Serverless
阿里云资源编排之函数计算
资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。本文将为您详细介绍阿里云资源编排服务的函数计算相关功能。
1080 0
阿里云资源编排之函数计算
|
JSON Serverless 调度
阿里云资源编排之函数计算
资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。 ROS资源编排接入了大量的阿里云资源,目前涉
1432 0
阿里云资源编排之函数计算
|
Serverless 对象存储
阿里云资源编排之函数计算
本文介绍阿里云资源编排服务(ROS)(下面简称ROS)函数计算相关功能,涉及如下资源类型: ALIYUN::FC::Service  创建服务 ALIYUN::FC::Function  创建函数 ALIYUN::FC::FunctionInvoker 主动执行函数 ALIYUN::FC::Trigger  创建触发器,触发执行函数 通过使
1534 0
|
监控
使用阿里云资源编排部署SAP单节点HANA
本文使用[阿里云资源编排服务(ROS)](https://www.aliyun.com/product/ros/)(下面简称ROS),在控制台中快速部署和安装SAP单节点HANA。 相较于原SAP HANA部署流程([SAP HANA 部署指南](SAP HANA 部署指南)),使用ROS部署只需要三步即可完成。不仅可以轻松创建SAP HANA需要的云资源,并且支持自动化部署和配置,简化了交
2861 0
|
运维 数据可视化 API
阿里云启动API创新大赛 资源编排技术为场景赛题
云计算如何为企业提供更高效的服务已经成为一个无法绕开的技术领域。企业对云资源的使用,对云资源的管控等等都成为我们必须要优化的部分。如何通过统一的方式,向各行各业的企业提供统一的解决方案和软件快速交付的手段,都面临这个挑战。
3515 0
|
机器学习/深度学习 API 双11
11月14日云栖精选夜读:轻松使用阿里云资源编排,方便你的API管理
11月初,阿里云ROS正式发布API 网关(API Gateway)资源,为云计算用户提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。
3942 0
|
Web App开发 测试技术 API
轻松使用阿里云资源编排,方便你的API管理
11月初,阿里云ROS正式发布API 网关(API Gateway)资源,为云计算用户提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。
3643 0
|
26天前
|
Ubuntu 机器人 Linux

推荐镜像

更多