时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

使用 AWS Lambda 和 Amazon DynamoDB 自动管理 AWS CloudFormation 模板中的 Parameters 和 Mappings

  • 2019-11-15
  • 本文字数:1902 字

    阅读完需:约 6 分钟

使用AWS Lambda和Amazon DynamoDB自动管理AWS CloudFormation模板中的Parameters和Mappings

背景介绍

相信 AWS 的用户对 AWS CloudFormation 都不会陌生。AWS CloudFormation 是实现 IAC(Infrastructure as Code)自动化运维的一项重要服务,可以帮助用户对 AWS 资源进行建模和设置,以便能花较少的时间管理这些资源。CloudFormation 中有两个重要选项:Mappings 段和 Parameters 段,可以帮助用户组织模板里的参数和映射,让用户更好地自定义堆栈,以实现模板的重用和复用。比方说可以用 Mappings 管理对应 AWS 上不同 region 的 AMI ID,或者管理企业内部的不同部门。



但是当用户所在的组织越来越多地采用 IAC 自动化时,mappings 和 parameters 的数量也会急剧增长,给 CloudFormation 模板的编写和维护带来复杂度。

解决方案

本文里我们介绍一种方法:用当前流行的 Serverless 计算 AWS Lambda 和 Amazon DynamoDB 自动地管理 AWS CloudFormation 模板中的 Parameters 和 Mappings。


本文中主要用到了以下几种 AWS 服务:


1、DynamoDB 表:Amazon DynamoDB 是一个 NoSQL 数据库,这里我们采用它保存 CloudFormation 模板中所有的 mappings 和 parameters。不仅可以实现集中存放,而且可以依赖 DynamoDB 的接口实现方便快速地增删和查找。比方说在我们的 sample code 中,整个企业采用这样一张表:partition key 包括组名(比如说 team1、team2 等)和环境(比如说 development、test、production 等),sort key 保存应用的名字。这个表里的数据类似这样:



当我们把这些数据都 insert 到 DynamoDB 中后,可以在 AWS console 里看到表中的内容是这样的:



2、Lambda 方法:AWS Lambda 又称为 Serverless 的计算,通过它你可以运行你的 code 而不需要预配置或者管理任何服务器。这里我们采用 Lambda 方法实现 CloudFormation 和 DynamoDB 之间的关联,它从 CloudFormation 模板接收 primary key 和 sort key 作为输入,查找 DynamoDB 表,并且返回所有的 key-value 数据。


3、Custom lookup resource:这是 CloudFormation 里的一个自定义资源,与一个 Lambda 方法绑定。CloudFormation 除了可以定义已有的 AWS 资源,还支持几种自定义资源,包括这种以 Lambda 方法作为后端的自定义资源。当这种自定义资源创建、更新或者删除时,CloudFormation 自动地向 Lambda API 发起请求,引发方法并将请求的数据传给 Lambda 方法,本例中所请求的数据是 primary key,返回的数据是 key-value 数据。通常在一个组织中只需要建立这一个 custom resource,所有的 CloudFormation 模板都可以复用它。下图是 sample code 里建立的 custom resource:



让我们将这几种服务组合起来,并且定义好它们之间的交互顺序,整个解决方案就是下图展示的这样:



那么整个的交互顺序如下:


1、用户创建 DynamoDB 表,插入所需的 mappings 和 parameters 数据。


2、CloudFormation 模板中的 custom resource 调用 Lambda 方法,用组名和环境名称(“teamname-environment”)作为 partition key,用应用名称(”appname”)作为 sort key。


3、Lambda 方法用 partition key 和 sort key 作为输入查询 DynamoDB 表。


4、DyanamoDB 将结果返回给 Lambda 方法。


5、Lambda 方法将这些 key-value 数据作为结果返回给模板中的 custom resource。


6、custom resource 拿到数据后,堆栈里的其他资源可以通过 Fn::GetAtt 的方式获得这些数据。

结论

通过这种方式,可以将我们创建堆栈所需的固定部分保存在模板中,而将可变部分 mappings 和 parameters 保存在方便增删改查的 DynamoDB 中,用 Lambda 实现两者之间的关联。对于大型组织来说,这样可以提高运维效率,也是使用 CloudFormation 的一种最佳实践。

参考

可以在我们的网站上下载到相关的 sample code:https://github.com/awslabs/custom-lookup-lambda


关于 AWS Lambda 的更多内容请参考网站:https://aws.amazon.com/lambda/


关于 CloudFormation 自定义资源的更多内容请参考网站:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html


作者介绍



张芸


AWS 云架构咨询顾问,获得 AWS 解决方案架构师专业级认证和 DevOps 工程师专业级认证,为企业客户和合作伙伴提供迈向云端的专业服务。目前已为多家跨国公司及本土公司、合作伙伴提供上云迁移、应用优化、架构设计等咨询设计和实施服务。在加入 AWS 之前有近 10 年的云计算和大数据开源技术研究和开发经验,拥有多项美国和中国专利及专利申请,涉及云计算及服务,分布式系统,软件定义数据中心和自动化运维等领域,合作编著图书《大数据–战略·技术·实践》。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/automatically-manage-parameters-and-mappings/


2019-11-15 08:00965

评论

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

阿里云田涛涛解读未来自动化运维新思路:CloudOps

阿里云弹性计算

CloudOps 云上运维

给弟弟的信第13封|一个北京姑娘的艰辛生活

大菠萝

28天写作

Linux中国对话龙蜥社区4位理事:龙蜥操作系统捐赠的背后,是谁在推动?

OpenAnolis小助手

Linux 国产操作系统 龙蜥社区

面试官:useLayoutEffect和useEffect的区别

全栈潇晨

React

react源码解析12.状态更新流程

buchila11

React

彻底搞通服务发现的原理和实现

高性能架构探索

架构 分布式 微服务 服务发现 签约计划第二季

技术实力过硬,旺链科技斩获“年度区块链技术突破奖”!

旺链科技

区块链 区块链技术 产业区块链

欢迎举报Perforce Helix Core盗版行为

龙智—DevSecOps解决方案

盗版软件 perforce盗版 打击盗版

Homebrew大神面试Google被拒,只因写不出一道算法题

博文视点Broadview

C++ 开发笔记

行者孙

内容合集 签约计划第二季

实用机器学习笔记十四:多层感知机

打工人!

人工智能 机器学习 算法 学习笔记 12月日更

【LeetCode】寻找旋转排序数组中的最小值Java题解

Albert

算法 LeetCode 12月日更

Flyway让数据库版本管理更简单

恒生LIGHT云社区

数据库 sql SqlServer

深入理解Flutter相机插件【Flutter专题22】

坚果

flutter 28天写作 签约计划第二季 12月日更

React进阶(五):导航守卫

No Silver Bullet

React 路由 12月日更

Elasticsearch 查询最大时间(qbit)

qbit

sql UTC TimeZone 时区

react源码解析11.生命周期调用顺序

buchila11

React

智能运维之时间序列预测中的经典时序模型

云智慧AIOps社区

机器学习 算法 智能运维 云智慧 指标预测

一文带你熟知ForkJoin

华为云开发者联盟

jdk 并发编程 并发 forkjoin 多线程并发

netty系列之:小白福利!手把手教你做一个简单的代理服务器

程序那些事

Java Netty 代理 程序那些事 12月日更

用户文章转载:一图看懂 | 我用这张图,看懂了 P4 Reconcile

龙智—DevSecOps解决方案

perforce 一图看懂 P4 Reconcile

lock-free在召回引擎中的实现

高性能架构探索

架构 分布式 微服务 签约计划第二季

有了代码变更分解提交工具SmartCommit,再也不担心复合提交了

华为云开发者联盟

代码 复合提交 SmartCommit 代码提交 代码提交原子性

带波浪效果的CollapsingToolbarLayout + RecycleView

阿策小和尚

28天写作 Android 小菜鸟 12月日更

JerryScript:物联网开发者的得力工具

华为云开发者联盟

物联网 LiteOS JerryScript 引擎 物联网应用

流量控制-从原理到实现

高性能架构探索

架构 分布式 微服务 签约计划第二季

吃透负载均衡

高性能架构探索

负载均衡 架构 分布式 微服务 签约计划第二季

面试官:如何实现 List 集合去重?

王磊

java面试

前端架构师修炼指南精选

杨成功

前端 架构师 内容合集 签约计划第二季

Scrapy Spider中间件,你学会了吗?本篇博客有一案例

梦想橡皮擦

12月日更

亿级流量实验平台设计与实现

高性能架构探索

架构 分布式 微服务 签约计划第二季 实验平台

使用AWS Lambda和Amazon DynamoDB自动管理AWS CloudFormation模板中的Parameters和Mappings_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章