速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

构建您自己的 AWS Service Broker 服务

  • 2019-09-25
  • 本文字数:5447 字

    阅读完需:约 18 分钟

构建您自己的 AWS Service Broker 服务


AWS Service Broker 开源项目在 re:Invent 2017 大会上推出,方便开发人员使用 Pivotal Cloud Foundry 等平台在应用程序平台接口内部预置和暴露原生的 AWS 服务。


虽然 Service Broker 支持的服务不断增长,但客户希望能通过一种简单的方式来扩展 AWS Service Broker 的服务本身。在本博文中,我们将探索 AWS Service Broker 背后的工作原理,以及开发、运营和安全团队如何根据自己的业务需求自定义解决方案。


从 Service Broker 首次面世以来,创建自定义服务的流程已经改变,使其成为一个更加简单、更加愉悦的过程。我们将略微深入介绍此方面,首先是 Broker 如何使用 AWS CloudFormation 以及可以如何自定义 CloudFormation 模板。然后,我们将介绍 CloudFormation 与 Broker 的参数映射的简化情况,以及如何使用自定义的模板目录来存储自定义设置。

Service Broker 与 AWS CloudFormation

AWS Service Broker 使用 AWS CloudFormation 基础设施即代码模板来预置将在应用程序平台中使用的资源。对于 Service Broker 中可用的每个资源,都有一个规定的模板。AWS Service Broker 模板已经开源化,因此您可以根据自己的需求对它们进行修改和扩展。


在 Service Broker 的首次发行版中,您必须为您希望使用的服务创建一个 CloudFormation 模板。通过在预置时为 CloudFormation 模板中需要的一些输入使用默认值,我们简化了用户体验。(虽然这些默认参数值适合大多数常见的使用案例,但它们可以根据需要进行修改。)


然后,Service Broker 需要通过某种方式来了解应该在应用程序平台 UI 中呈现哪些 CloudFormation 模板参数,哪些参数是可选的,哪些参数是必选的,等等。在最初版本的 Broker 中,这需要创建一个 YAML 文件来记录 CloudFormation 模板和 Broker 中参数的映射关系。现在,您可以将自己的模板存储在自定义目录中,并使用自动生成的 Service Broker 元数据,无需手动参数映射。

将您自己的模板存储在自定义目录中

现在,Service Broker 本身允许您将模板存储在一个自定义目录中 — 您可以完全自定义您将用于 Broker 的模板。有一些使用案例需要这种功能。


一些客户在 Broker 中使用自己现有的 CloudFormation 模板;这些模板往往已经在他们现有的基础设施即代码管理中使用,满足他们的要求,并且通过了安全评估。对于这些客户,在 Broker 中使用这些现有的模板是非常合理的。


一些客户(尤其是希望执行严格安全性评估流程的客户)希望使用复杂的模板集合(例如 VPC、数据库层,然后使用通过网状模板堆栈来管理的前端),并将这些模板作为可重复使用的自助式构建块,供开发团队使用。开发安全运营团队可以评估现有的模板,根据自己的业务需求进行修改,然后在自己的目录中存储通过安全审批的白名单版本。这将需要用一个 S3 存储桶来存储模板,并且 Broker 的 YAML 配置文件也将需要更新以列出存储桶的位置。此外,这还需要客户将 AWS Service Broker 与 AWS GovCloud 结合使用,因为在 GovCloud 中运行的系统要求将其资源存储在 GovCloud 区域运行的 Amazon S3 中,不能使用来自公有 S3 目录的现有 Service Broker 模板。


有关设置目录的更多详细信息,请参阅 AWS Service Broker 文档。甚至还有一个 CloudFormation 前提模板,您可以使用此模板来构建 S3 存储桶和需要的权限,启动堆栈,以及将输出中的信息添加到 Broker 配置中。

OpenShift 配置示例

(请注意 S3 存储桶和区域配置。)


TARGETACCOUNTID=


TARGETROLENAME=


VPCID=


REGION=us-east-1


IMAGE=awsservicebroker/aws-servicebroker:beta


IMAGEPULLPOLICY=Always


S3BUCKET=S3KEY=templates/latestS3REGION=us-gov-west-1TABLENAME=awssbVERBOSITY=10BROKERID=awsservicebrokerPRESCRIBE_OVERRIDES=true

Cloud Foundry 配置示例


从手动参数映射转向元数据


我们进行的第二项更改是降低参数映射过程的难度。Broker 更新后,不再需要单独的 YAML 文件来记录映射,而是在 CloudFormation 模板中利用元数据生成此映射。


...Metadata:  AWS::ServiceBroker::Specification:    Version: 1.0    Tags:    - AWS    - Lex    - Bot    - NLU    - chatbot    Name: lex    DisplayName: Amazon Lex    LongDescription: Amazon Lex is a service for building conversational interfaces      into any application using voice and text.Amazon Lex provides the advanced      deep learning functionalities of automatic speech recognition (ASR) for converting      speech to text, and natural language understanding (NLU) to recognize the intent      of the text, to enable you to build applications with highly engaging user experiences      and lifelike conversational interactions.    ImageUrl: https://s3.amazonaws.com/awsservicebroker/icons/AmazonLex_LARGE.png    DocumentationUrl: https://aws.amazon.com/documentation/lex/    ProviderDisplayName: Amazon Web Services    ServicePlans:      default:        DisplayName: Standard        Description: Amazon Lex        LongDescription: Creates an Amazon Lex bot        Cost: https://aws.amazon.com/lex/pricing/        ParameterValues: {}...
复制代码


您可以看出,Broker 的规范定义了一个描述、服务计划、必选或可选参数以及默认值。此规范可以如此处的示例一样非常简单,也可以更为复杂,例如对于 Amazon Relational Database Service (Amazon RDS),开发环境和生产环境需要不同的计划,同时参数和选项也相当不同。


将映射信息变为 CloudFormation 模板中的元数据部分,有利于确保单个真相来源,更加方便客户进行自定义。但元数据的创建也仍然是一个负担。


根据一位客户工程师的反馈,元数据的创建十分痛苦,容易产生错误,处理多个计划是更需要特别小心。根据 CloudFormation 模板中参数选项的复杂度不同,人们会很容易丢失、忘记甚至忽略某个东西。该工程师反映最多的一个意见是,手动构建元数据需要的时间和精力导致他无力构建新的乐高登月模块!

自动生成 Service Broker 元数据

简单的脚本搞定一切! 现在,我们提供了一个元数据生成器来帮助构建自定义。这让您可以构建或自定义 CloudFormation 模板,并运行将会根据模板中的参数构建元数据的元数据生成器。然后,来自元数据生成器的输出将放入 CloudFormation 模板,并将新模板添加到您的自定义目录 S3 存储桶中。


元数据生成器输出示例


...==================================YAML========================================
AWS::ServiceBroker::Specification: Version: 1 Tags: - '' - '' Name: '' DisplayName: '' LongDescription: '' ImageUrl: '' DocumentationUrl: '' ProviderDisplayName: Amazon Web Services ServicePlans: production: DisplayName: Production Description: Configuration designed for production deployments LongDescription: '' Cost: '' ParameterValues: &o0 AccessCidr: AllocatedStorageAndIops: 100GB 1000IOPS AllowMajorVersionUpgrade: false AutoMinorVersionUpgrade: true AvailabilityZones: Auto BackupRetentionPeriod: 35 CidrBlocks: Auto ...
复制代码


根据使用 Service Broker 的应用程序平台不同,您可能需要为 Broker 执行一项操作才能看到新模板。Red Hat OpenShift 等应用程序平台将会在一定时间后轮询更改和更新。 Pivotal Cloud Foundry 仅会加载安装时存在的模板列表,如果您使用 Pivotal Cloud Foundry,您将需要执行 Broker 部署。这将不会影响 Broker 预置的任何现有服务,因为此信息存储在 DynamoDB 稳定会话状态中。


如要进行迭代,您需要:


  • 创建一个 S3 存储桶以存储自定义模板或新的服务模板。

  • 更新 Service Broker 配置以使用目录存储桶(请参阅上文有关 OpenShift 和 Cloud Foundry 的配置示例)。

  • 创建或自定义 CloudFormation 模板,并确保您已经拥有启动和使用业务所需服务需要的所有参数和输出。

  • 使用元数据生成器来生成 Service Broker 规范。

  • 复制生成器的输出并将它复制到 CloudFormation 模板中。

  • 将模板及其元数据规范上传到用于测试的目录 S3 存储桶中。

  • 根据您使用的应用程序平台创建新服务,例如:cf create-servicedefault。此流程是否绝对有必要? 不是,许多客户都在使用现有规定的 Service Broker 服务。AWS GovCloud 区域的客户已经在使用自定义目录,但大多数客户使用现有规定的模板,下载这些模板,然后将它们上传到自己的自定义目录中。需要自行构建自定义模板或聚合 Service Broker 所提供解决方案的客户将发现此过程更为简单。

后续步骤

  • 自己试试吧!

  • * AWS Service Broker 是一个开源项目 — 请大胆为 AWS Service Broker、服务模板的扩展做贡献,也可随时在 Service Broker 项目下提出问题。

  • 更多详细信息请参阅 AWS Service Broker。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/building-own-service-broker-services/


2019-09-25 15:00836
用户头像

发布了 1851 篇内容, 共 119.3 次阅读, 收获喜欢 78 次。

关注

评论

发布
暂无评论
发现更多内容

电脑就是我的安全感|ONES 人物

万事ONES

招聘 软件工程师

743 网络延迟时间

好吃不贵

5G 和 Wi-Fi 市场与技术的一些思考系列之二

李伟-晨泳

从 SVN 迁移到极狐GitLab

极狐GitLab

svn 迁移 极狐GitLab

使用 ABAP 开发的一个基于 Web Socket 的小工具,能提高程序员日常工作效率

汪子熙

自动化 前端开发 websocket 程序员进阶 3月月更

昇腾CANN论文上榜CVPR,全景图像生成算法交互性再增强!

华为云开发者联盟

CVPR CANN 图像生成 昇腾AI处理器 图像布局

多场景推进 服务网格在联通的落地实践(下)

百度大脑

presto是如何保证作业内存不会发生冲突和溢出

华为云开发者联盟

内存 presto 内存计算引擎 System Pool general Pool

如何消除代码山中那一大坨参数列表

华为云开发者联盟

代码 软件设计 参数 全局变量 参数列表

Git 如何回退代码

秋天

一周热点回顾|虎符交易所上线多链合一;俄央行称加强监控加密资产等P2P交易

区块链前沿News

区块链 虎符交易所

春分耕种时,AI“现身”田间地头

百度大脑

科幻变现实:喷下即疗愈,生物3D打印绘就生命密码图

脑极体

计算机编码规则之:Base64编码

程序那些事

Java base64 nio 程序那些事 3月月更

Kubernetes API规范:为optional的字段使用pointer

工程师薛昭君

API Kubernetes 集群

聊聊 C 语言和 ABAP 这两门编程语言的关系

汪子熙

c++ 编程语言 C语言 abap 3月月更

Python迎来31岁生日,蝉联年度编程语言排行榜冠军

Python猫

Python

一文搞定 Flutter 底部弹窗实现

岛上码农

flutter 跨平台 ios开发 Android开发 3月月更

《软件开发的201个原则》思考:4. 高质量软件是可以实现的

非晓为骁

个人成长 软件工程 软件开发

Jetpack Compose之 在Compose中使用Navigation导航

黄林晴

android Compose JetPack

小程序电商微服务设计

唐尤华

架构实战营

最好的 6 个 React Table 组件详细亲测推荐

蒋川

React

深入浅出 Vue3 核心知识点

百瓶技术

Vue 前端 VUE 3.0 源码 vue3.0

WebAssembly技术_JS调用C函数示例_传递参数、方法导出

DS小龙哥

webassembly 3月月更

网络安全:绕过MSF的一次渗透测试

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

Redis集群架构剖析(3):集群处理redis-cli指令

非晓为骁

redis 架构 分布式 redis cluster

如何在新公司快速落地

Hockor

RocketMQ的tag还有这个“坑”!

中间件兴趣圈

RocketMQ tag 消息过滤

Redis:在windows环境安装Redis

喀拉峻

redis

☕️从Java8到Java17的新特性(一):Java8 的新特性

看山

Java java8

HertzBeat赫兹节拍 v1.0.beta.6 发布,Linux监控来啦

TanCloud探云

开源 APM 监控 告警

构建您自己的 AWS Service Broker 服务_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章