限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

如何使用 AWS Lambda 为 AWS Service Catalog 产品启动创建审批流程

  • 2019-11-11
  • 本文字数:2209 字

    阅读完需:约 7 分钟

如何使用 AWS Lambda 为 AWS Service Catalog 产品启动创建审批流程

利用 AWS Service Catalog,组织可以集中管理通常部署的 IT 服务,实现一致的监管以及帮助满足合规性要求。AWS Service Catalog 可为产品配置提供标准化环境。用户浏览其有权访问的产品 (服务或应用程序) 的列表,找到要使用的产品并自行将其作为已配置产品启动。AWS Service Catalog API 还提供对所有用户操作的编程控制。


假设您需要为用户的启动请求构建一个审批工作流。许多解决方案都可以使用 AWS Service Catalog API 来构建复杂的自定义工作流 (例如,ServiceNow)。在本博客文章中,我将从 AWS Service Catalog 管理员的角度介绍如何使用 AWS Lambda、Amazon API Gateway、AWS CloudFormation 和 Amazon Simple Notification Service (Amazon SNS) 构建简单的工作流审批流程。


为构建此审批流程,我将使用 WaitCondition WaitHandle 等 AWS CloudFormation 功能,并使用 AWS Lambda 作为自定义资源来创建简单的审批工作流。如果您正在寻找 AWS 原生解决方案来扩展现有 AWS Service Catalog 功能,则可使用此方法。这也有助于在产品启动时保留 AWS Service Catalog 用户界面。

架构概述:


  1. 用户从其可用产品列表中启动产品,并通过 AWS Service Catalog 界面填写所有必需的数据。您可以通过此输入信息获取用户的电子邮件地址。

  2. 对于需要管理员审批的产品,将有三个额外的 CloudFormation 资源:WaitHandle、WaitCondition 和自定义资源。将调用 Lambda 自定义资源以通知负责审批产品启动的管理员。堆栈将处于等待状态,直至它收到来自管理员的响应。

  3. 管理员收到有关产品启动的电子邮件通知,以及允许创建堆栈的审批 URL。该 URL 包含 WaitHandle 预签名 URL 作为参数,用于向堆栈发送继续操作的信号。

  4. 当管理员单击该 URL 时,API Gateway 后面的 Lambda 函数会收到管理员批准继续操作的信号。

  5. 如果管理员批准产品启动,则 Lambda 审批函数会发送确认以允许 WaitHandle 继续创建堆栈。否则,堆栈会在最长等待时间 12 小时之后回滚。

  6. 用户会在 AWS Service Catalog 控制台上收到完成或回滚状态。此外,管理员还可以联系用户,询问有关启动请求的更多信息,然后再进行审批。

构建步骤:

现在我们已经介绍了这些步骤,下面让我们构建审批流程所需的资源。我附上了一个 AWS CloudFormation 模板以方便您使用。当您启动该模板时,系统将提示您输入用于审批流程的电子邮件地址。在堆栈完成之后,将创建以下资源:


SNS 主题:一个 SNS 主题以及提供的电子邮件订阅。您将收到一封确认您的订阅的电子邮件。订阅该主题以接收消息。


SNS 通知函数:一个可发送审批邮件的 Lambda 函数。每当新产品启动需要审批时,都会调用此 Lambda 函数。此函数将获取 WaitHandle 预签名 URL 和用户电子邮件地址作为输入。


审批函数:一个通过发送 WaitHandle 预签名 URL 的状态来通知 CloudFormation 堆栈的 Lambda 函数。


除这些资源外,还将创建一个 API Gateway API 和一些 IAM 角色。


记下输出中的 Lambda 函数的 ARN。稍后您将需要此信息来测试设置。

测试:

要测试设置,您可以使用随附 CloudFormation 模板示例。这是由 Amazon 提供的、在 AWS 上部署 WordPress 的标准模板,但我已对其进行修改以引入审批流程,并添加了三个额外的资源:WaitCondition、WaitConditionHandle 和 NotificationFunction。


WaitCondition 和 WaitConditionHandle 用于暂停堆栈的创建,并在继续创建堆栈前等待信号。模板中的所有其他资源都取决于 WaitCondition 的审批状态。


Python


WaitHandle:Type: 'AWS::CloudFormation::WaitConditionHandle'WaitCondition:Type: 'AWS::CloudFormation::WaitCondition'Properties:Handle:Ref: 'WaitHandle'Timeout: '43200'
复制代码


NotificationFunction 是一个自定义资源,它可触发负责发送审批电子邮件的 Lambda 函数。


Python


NotificationFunction:Type: Custom::NotificationFunctionProperties:ServiceToken: ''Region: !Ref "AWS::Region"WaitUrl: !Ref WaitHandleEmailID: !Ref UserEmail
复制代码


您将需要下载该模板并修改 NotificationFunction 资源的 ServiceToken 参数,以指定您在上一部分中获得的 ARN。更新 Lambda ARN 后,就可以将该模板作为新产品添加到现有目录中,或在 CloudFormation 控制台中测试该模板。


当模板成功启动后,您将收到请求继续审批的电子邮件,内容类似于:



当您选择审批链接时,API 后面的 Lambda 函数将发送确认以允许 WaitHandle 继续创建堆栈。否则,堆栈将在最长等待时间 12 小时之后回滚。

故障排除:

如果您没有收到审批邮件,请查看 SNS 主题订阅状态。此外,请验证您是否在模板中指定了正确的 Lambda ARN。检查 Amazon CloudWatch 日志中是否有启动堆栈的任何异常或错误。此外,您还可以查看以下信息来源,获得有关 Amazon SNS、API Gateway 和 AWS Lambda 等服务的一般故障排除帮助:


总结:

现在,您可以通过添加三个资源从测试模板示例向您的 Service Catalog 堆栈中添加简单的审批工作流。有关从管理员控制台管理产品组合、产品和约束的更多信息,请查看此文档。


我希望本文和示例模板能够帮助您扩展 AWS Service Catalog 功能。欢迎在评论中留下您的反馈或建议。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/how-to-create-an-approval-flow-for-an-aws-service-catalog-product-launch-using-aws-lambda/


2019-11-11 08:00976

评论

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

图灵访谈 | Vue.js官方团队成员霍春阳:跨专业做程序员,是什么感受?

图灵社区

vue.js 代码人生

HMS Core Discovery第17期直播预告|音随我动,秒变音色造型师

HarmonyOS SDK

灏天农业签约旺链科技,推动中药材产业健康发展

旺链科技

区块链 产业区块链 中药材

Apache顶级项目Ranger和Alluxio的最佳实践(附教程)

Alluxio

Ranger Alluxio Apache 分布式 大数据 开源 8月月更

开源一夏 | 大佬,人人都说精通的单例模式,你精通了吗

知识浅谈

单例模式 8月月更

使用 yo 命令行向导创建 SAP UI5 应用

汪子熙

前端开发 SAP SAP UI5 ui5 8月月更

语音聊天app源码:系统功能有哪些?

开源直播系统源码

软件开发 直播系统源码 语音直播系统 语音直播

静态IP是什么意思?和动态IP 有什么区别

郑州埃文科技

静态IP 动态IP IP地址

藏不住了,数据分类分级利器「极盾·智辨」发布

极盾科技

网络安全 安全 数据 数据分类 数据安全

我想搞信息资讯聚合类产品,如何编写PHP爬虫?

智伍应用

Kubernetes 1.25 发布!博云带你玩转新特性

BoCloud博云

容器 云平台 #k8s

DR600VX-Atheros-QCA9880-2T2R-MIMO-802.11ac-Mini-PCIe-Wi-Fi-Module-Dual-Band-2.4GHz-5GHz

wallys-wifi6

基于STM32的录音机设计(STM32F103+VS1053B)

DS小龙哥

8月月更

SpringBoot 整合 MyBatis-Plus

SpringBoot 2 Mybatis-Plus 8月月更

RedisSyncer同步引擎的设计与实现

京东科技开发者

同步代码 key 引擎 redis 底层原理

中仑网络全站 Dubbo 2 迁移 Dubbo 3 总结

阿里巴巴中间件

阿里云 开源 云原生 dubbo

搜索引擎分布式系统思考实践

得物技术

搜索引擎 分布式系统

Go-Excelize API源码阅读(十八)——GetPageMargins、SetWorkbookPrOptions、GetWorkbookPrOptions

Regan Yue

Go 开源 源码解析 8月日更 8月月更

密集计算场景下的 JNI 实战

vivo互联网技术

Java c++ 性能 JVM jni

JS【数组合并】的性能差异对比

掘金安东尼

JavaScript 前端 8月月更

极盾·析策XDR,助力顶级汽车集团构建安全运营中台

极盾科技

网络安全 安全 信息安全 数据安全 xdr

攻击面管理:企业向主动安全转变的开始

SEAL安全

攻击技术 黑客攻击 软件供应链安全

数据治理几乎所有常见问题的简答都在这里了

雨果

数据治理

说实话,Hibernate 和 MyBatis 哪个更好用?

TimeFriends

8月月更

【python】通用的json_diff方法

转转技术团队

测试工具

高效的工作从取消汇报开始|敏捷实践

LigaAI

高效工作 Scrum 敏捷开发 研发团队 每日站会

面试突击76:${} 和 #{} 有什么区别?

王磊

Java 常用面试题

阿里云丁宇:以领先的云原生技术,激活应用构建新范式

阿里巴巴中间件

阿里云 Serverless 容器 RocketMQ 云原生

DR882-Qualcomm-Atheros-QCA9882-2T2R-MIMO-802.11ac-Mini-PCIe-Wi-Fi-Module-5G-high-powe

wallys-wifi6

从零开始实现一个MyBatis加解密插件

vivo互联网技术

spring mybatis

如何使用 AWS Lambda 为 AWS Service Catalog 产品启动创建审批流程_其他_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章