开发者社区> 资源编排(ROS)> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 资源编排服务(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一键批量开通阿里云产品
## 背景 如果你使用过阿里云的云产品/服务,你会发现其中有不少需要手动点击“开通”。比如初次使用 SLS 日志服务时,就会进入下面的界面: ![sls-enable-service.jpg](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/561d3fc5d9805e79a62a41a9094019c3.jpg) 作为个人用户,以手
1406 0
阿里云资源编排之函数计算
资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。本文将为您详细介绍阿里云资源编排服务的函数计算相关功能。
817 0
轻松使用阿里云资源编排,方便你的API管理
11月初,阿里云ROS正式发布API 网关(API Gateway)资源,为云计算用户提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。
3220 0
通过命令行工具使用阿里云资源编排服务
通过命令行工具使用阿里云资源编排服务
2943 0
一分钟了解阿里云产品:资源编排概述
阿里云发布了很多产品,今天让我们一起来了解下资源编排(Resource Orchestration)吧。   什么是资源编排呢?   一句话,资源编排提供了通过模板(类JSON)创建一组集群,如典型的SLB+ECS的云服务组合,会自动将云服务之间的依赖配置完成, 并且提供了向导快速生成
4352 0
阿里云资源编排服务Python SDK使用入门
阿里云资源编排服务(ROS)为我们维护云计算资源提供了一个低成本、可靠、标准化的方案。基于ROS提供的能力,我们只要编写和维护资源模板文件,就可以达到维护云计算资源的目的。 ROS同时提供RESTful API和SDK,这使得我们可以很容易的把ROS对于资源的操作能力集成到我们的应用中。
18586 0
+关注
资源编排(ROS)
资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Terraform - 管理云资源的正确姿势
立即下载
Terraform-管理云资源的正确姿势
立即下载
数据资源的基础设施API总线
立即下载