JavaShuo
栏目
标签
AWS 基础设施即代码(五)
时间 2019-11-22
标签
aws
基础设施
代码
繁體版
原文
原文链接
基础设施即代码
概述
手动配置的挑战:可能由于人为错误致使缺少可靠性,环境没法彻底再现,同时须要额外文档
基础设施即代码,是软件开发中用于建立可重用、可维护、可扩展及可测试基础设施的技术、实践和工具,而不降基础设施定义为捆绑硬件的组件。
基础设施即代码的好处:
可靠性
可再现性 - 可重复性、可重用性
可维护性
一致性
并行化
文档性
环境自动化
只要可能,都应该自动对资源执行预置、终止和配置操做,经过取消手动流程,提升系统的稳定性和一致性、以及组织的效率
使用可释放的资源
利用云计算的动态配置特性,将服务器和其余组件视为临时资源
自动部署相同配置的新资源
终止未使用的资源
自动切换到新的IP地址
测试新资源的更新,而后用更新的资源替代旧资源
AWS Lambda
概述
无需配置和管理任何服务器和应用程序就能运行代码。
只须要上传代码,Lambda就会处理运行而且根据须要自动进行横向扩展
Lambda 是彻底托管的计算服务,在响应事件或以事件间隔运行无状态代码
Lambda支持的代码语言
Python
Java
Node.js (JavaScript)
C#
Go
Lambda 能够支持:
服务器
容量需求
部署
扩展和容错
操做系统和语言更新
指标和日志记录
Lambda 能够实现:
使用本身的代码甚至原生库
并行运行代码
建立后端、事件处理程序和数据处理系统
始终没必要为闲置资源付费
使用Lambda进行扩展
扩展事件触发Lambda,使用Lambda函数自动向其余AWS服务发起API调用
扩展基于容器的实例,如Docker 、ECS等
经过函数实现更智能的扩展,如经过分析性能数据来查找,而不只仅是事件
由于Lambda能够自动扩展,可使用Lambda函数来替换一些EC2
使用AWS Lambda 解耦基础设施
Lambda由于其可用性高,占用成本有限,是处理数据的理想解决方案
Lambda 能够用简单的微服务来取代传统服务器,进一步解耦基础设施
当用实例便可处理的简单功能和应用程序,而又不想为高可用和扩展烦恼,建议使用Lambda
如下事件能够触发 Lambda
Lambda使用方法
以.zip 格式上传代码,
用计划函数指定运行频率
用驱动型函数指定事件源
指定所需的计算资源 - 23个级别,从128M最低CPU到1.5GB最高CPU,能够调整计算级别
指定超时时限
指定所须要访问资源的VPC
启动函数 (100ms - 5 min 运行时间,最长为15min)
Lambda代码存储在S3中,而且静态加密
Lambda仅支持无状态函数
每一个 Lambda 函数都会在本身的 /tmp 目录中接收到 500MB 的非永久性磁盘空间。
Lambda 支持代码版本控制
免费套餐包括 每个月100万个免费请求及40w内存GB-秒的计算时间
能够借助CodePipeline 和 CodeDeploy 自动执行无服务应用程序的发布过程,也可使用CloudFormation进行打包加载
Lambda@Edge
响应CloudFront的请求,在全球运行代码
超出并发默认限制
同步调用的 AWS Lambda 函数会返回一条限制错误信息(429 错误代码)。
异步调用的 Lambda 函数能够承受必定范围内的流量突增大约 15 到 30 分钟,以后再进来的事件将会以限制为理由遭到拒绝。
若是调用的 Lambda 函数是用于响应 Amazon S3 事件,则被 AWS Lambda 拒绝的事件可能被 S3 保留 24 小时并在此期间反复重试
Lambda的应用场景
将Lambda做为Web服务器
用Lambda能够执行 轮询/侦听、排队、处理、自动扩展、冗余和负载均衡来替代传统的复杂的数据处理方案
其余案例
AWS CloudFormation
概述
自动建模和设置AWS资源,下降管理从成本
支持快速启动新的测试环境,可靠复制环境
便捷的预配置机制,适用于众多 AWS 资源。它支持许多不一样类型的应用程序的基础设施需求,
三大组件
模板- 用JSON/YAML格式文件描述建立的资源,将其视为源代码进行保存和管理
引擎 - 利用AWS组件将模板解释为AWS资源堆栈
堆栈 - AWS CloudFormation建立资源的集合,可在AWS管理控制台中跟踪和审查
每一个帐户默认只能建立200个堆栈,可申请扩展
模板
模板便是代码
在模板中完整定义应用程序堆栈(应用程序所须要的全部资源)
定义模板运行时的参数(EC2大小、密钥对等)
模板的编辑方法
直接用JSON/YAML文本编辑
第三方VisualOps.io 模板编辑器
AWS CloudFormation Designer经过拖拽资源和编辑属性而生成JSON模板
CloudFormation 模板组织
模板能够在不一样区域被重复使用以实现部署的一致性
应基于全部权和应用程序生命周期将资源分配到不一样的 CloudFormation 模板中
不建议在一个模板内构建应用程序的全部环境,至少将网络资源、安全资源和应用程序资源分开到不一样的模板中
即使是对于相同类型的资源,也应该避免不一样的应用程序共享同一个模板
共享模板,某些特定环境部分常亮依旧不会工做,须要用输入参数等变量进行定义,如EC2秘钥对,安全组名称,子网ID,EBS快照ID等
CloudFormation 模板剖析
Description:
描述模板的文本字符串
不能使用参数或者函数
Metadata
提供关于模板其余详细信息的JSON对象
CloudFormation 的一些功能须要检索的设置或配置信息
能够在模板或资源级别指定,例如
AWS::CloudFormation::Init - 为cfn-init帮助程序脚本定义配置任务
AWS::CloudFormation::Interface - 在控制台中显示输入参数时,定义的参数分组和排序
AWS::CloudFormation::Desinger - 描述资源在 CloudFormation Designer 是如何布局的
Resource
要在堆栈中启动的服务及其设置
必须对每一个资源进行单独声明
能够指定同种类型的多个资源,但须要用逗号分隔开
资源声明中须要包含资源属性
DependsOn
指定只有在建立另外一个资源后才能建立特定资源
例如AutoScaling,EC2,ELB,弹性IP等须要关联公有IP地址并处于一个VPC时,须要依赖于VPC网关链接
等待条件 AWS::CloudFormation::WaitCondition
可暂停建立堆栈并等待,直到收到信号后方继续
建立策略 CreationPolicy
为不一样操做设置执行策略,如等待特定时间或特定数量的信号等
Parameters
可在运行是传入模板的变量值
容许在启动模板时自定义堆栈
可为每一个参数指定容许值和默认值
每模板最多60个参数
Mapping
指定条件参数值的密钥及其关联值
基于特定条件来自定义资源属性
Condition
控制在堆栈创立或更新期间是建立特定资源仍是为特定属性分配值
经过定义资源或属性定义的语句,比较两个值是否相等等前提下进行有条件的建立资源
好比利用同一模板完成对测试和生产环境进行不一样Size的资源部署
Outputs
查看堆栈的属性时返回的值
声明要从 CloudFormation 控制台查看的输出值,或者是响应调用时返回的输出值
每模板最多60个
自定义资源管理
为了处理不受 CloudFormation 直接支持的资源和功能,能够在建立堆栈是加入本身的逻辑
支持WaitCondition,确保应用程序或管理系统等外部资源收到完成信号前,阻止其余资源建立
如配置第三方订阅,将身份认证秘钥返回给须要的EC2实例
使用Lambda将新的VPC与其余VPC创建对等关系
使用模板建立堆栈时,如有任一资源建立失败,因此已经建立的资源都会被回滚和删除
能够经过提交原始模板的修改版原本建立更改集以更新堆栈和资源
默认状况下,删除堆栈会删除全部资源,但能够经过设置删除策略来保留某些资源
当任一资源删除失败,剩余未删除资源都将被暂时保留,直到成功删除整个堆栈
AWS Elastic Beanstalk
概述
适用于Web应用程序和Worker process 环境的 一项自动部署和扩展服务, 是最快速最简单的方式
开发人员只需上传应用程序,Elastic Beanstalk 将自动处理容量预配置、负载均衡、Auto Scaling 和应用程序运行情况监控的部署细节
支持 Docker
支持多种语言,包括 PHP、Java、Python、Ruby、Node.js、.Net、Go等直接上传运行
在Apache、Nginx、Passenger 和 IIS服务器上部署
Beanstalk建立的环境是独立的
Beanstalk 是一个包括环境、版本和环境配置的逻辑组合,概念上与文件夹相似
能够自动部署和处理负载均衡、运行情况监控、自动扩展、应用程序平台管理、代码部署等
大多数现有的应用程序容器或平台即服务解决方案在减小所需的编程量的同时,会大大下降开发人员的灵活性和控制。使用 AWS Elastic Beanstalk,开发人员可保留对支持其应用程序的 AWS 资源的彻底控制。若是开发人员决定要管理基础设施的某些(或所有)元素,可以使用 Elastic Beanstalk 的管理功能无缝操做。
能够轻松为每个应用程序版本建立一个独立的运行环境,因为是一次运行的,因此完成会就会自动删除
能够运行Docker环境
特性
能够内置CloudWatch监控指标对基础架构进行监控和管理,而且经过SNS发布通知
开发人员能够彻底控制支持其应用程序的AWS资源
选择最合适的EC2实例类型
选择合适的存储和数据库
启用对EC2实例的登陆访问
经过ELB启用HTTPS来加强安全性
调整应用服务器设置并传递变量
调整Auto Scaling设置
默认状况下应用程序是公开的,可使配置VPC、设置安全组和nACL设置为私有。
底层平台建议设置每周两个小时的维护时段进行新平台版本的发布和更新
使用场景
很是适用于蓝绿部署的场景
在全规模生产和最小规模预生产切换
使用两个ELB保持预热状态
出现错误时能够实现快速回滚
实际上 CloudFormation 也能够实现蓝绿部署
AWS OpsWorks
概述
利用Chef 和 Puppt 实现的配置管理服务,帮助配置和操做各类形态和规模的应用程序
能够定义应用程序的总体架构和规范,包括软件包安装、软件配置、资源等
利用OpsWorks 生命周期工具能够简化应用程序管理、减小部署周期数
支持对Linux和Windows服务器的管理
支持DevOps持续集成
管理
有组织的方式对堆栈、层和应用程序进行建模和可视化
堆栈
AWS将应用程序所须要的包括EC2,EBS,ELB等资源组称为堆栈
OpsWorks 采用简单和灵活地方式来建立、配置、管理和监视堆栈及应用程序
AWS可使用OpsWorks 和 IAM来管理用户权限,且二者不排斥能够共同工做。
层 Layer
能够将整个应用程序分为多层来定义堆栈元素,每层服务于特定目的
每层经过Chef任务列表来处理任务能够经过修改默认配置或添加任务来自定义或扩展图层
用户能够彻底控制安装哪些软件包,部署哪些应用程序,如何配置他们。
应用程序
OpsWorks能够运行生命周期事件,每一个应用程序能够在合适的事件自动运行一组指定的任务
监控
OpsWorks能够将全部资源的指标发送给CloudWatch,以即可视化和设置警报
支持各类自定义指标
AWS EC2 Run Command
概述
提供简单的方法自动执行常见的管理任务,包括
Linux Shell
Windows PowerShell
安装软件或补丁
能够跨多个实例执行命令
使结果具备可见性
AWS 上还支持包括Chef、Puppt、Ansible 和 Salt等其余第三方自动化解决方案
Amazon API Gateway
概述
能够在AWS上建立API,做为后端服务访问数据、业务逻辑或功能的接口
彻底托管并接受处理高达数万并发API调用时涉及的全部任务
能够处理如下工做负载
Lambda
使用AWS Step Function状态机调用EC2,ECS, Beanstalk, Web应用程序
能够与其余AWS服务集成,如Kinesis
支持建立HTTP/REST API 和 WebSocket API
HTTP/REST API 是一组资源和方法,或者是终端节点。HTTP/REST API 能够部署到不一样阶段,并可克隆到新版本。
WebSocket API 能够在互连客户端之间维持永久链接,以启用实时消息通讯。
能够托管和使用不一样版本和阶段的API
建立API秘钥并分配给开发人员
利用签名v4授予API访问权限
限制并监控请求以保护后端系统
与AWS Lambda高度集成
若是使用JavaScript/AJAX来跨域访问资源,必须在API Gateway上启用CORS功能已肯定能够调用非本站点资源
好处
计量
计量和限制第三方开放人员访问API的计划
安全
支持多种受权访问工具
保护系统免受DDOS***
弹性
默认提供托管缓存以存储API响应
经过Amazon CloudFront下降延迟
一种低成本的无服务方案,能够自动弹性伸缩
操做监控
经过指标监控面板,监控服务调用状况
包括调用次数、延迟数据和错误率
收集错误日志、访问日志和调试日志
生命周期管理
专为开发人员设计
适用于iOS,Android和Java的新一×××发工具包
支持OpenAPI规范(Swagger)
实时双向通讯
维持用户间永久链接,支持消息传输
请求/响应数据转换
数据库
API管理台配置
资源
资源是一种类型化对象,属于您的 API 的域。
每一个资源可能都关联了一个数据模型,或与其余资源相关,而且能够响应不一样的方法。
您也能够将资源定义为变量来拦截对多个子资源的请求。
资源策略
资源策略是一种 JSON 策略文档,您能够将其附加到某个 API 来控制指定的主体(一般是 IAM 用户或角色)是否能够调用该 API。
您可使用资源策略让来自其余 AWS 帐户的用户安全访问您的 API,或者只容许从指定的源 IP 地址范围或 CIDR 块调用该 API
资源策略能够与 Amazon API Gateway 中的 REST API 配合使用。
方法
REST API 中的每种资源能够支持一个或多个标准 HTTP 方法。
您将定义应每种资源应支持的动词(GET、POST、PUT、PATCH、DELETE、HEAD 和 OPTIONS)及其实施方法。
阶段
阶段相似于标签,定义了部署访问路径。例如,您能够定义开发阶段,您还能够设置直接指向阶段的自定义域名,这样您就无需使用其余路径参数了。
生命周期
借助 Amazon API Gateway,每一个 REST API 均可以有多个阶段。
阶段
用于划分 API 的开发生命周期,例如,在您构建了 API 并将其部署到开发阶段后,或者当您准备好进行生产时,您能够将其部署到生产阶段。
阶段变量
阶段变量可定义与某个阶段相关的配置值的密钥/值对。这些值与环境变量类似,可用于配置您的 API。
使用计划
使用计划可帮助您声明针对第三方开发人员的计划,即将访问限制到特定 API、定义限制以及请求配额限制,并将这些限制与 API 密匙关联。
您还能够基于每一个 API 密匙提取使用数据,以分析 API 使用状况并生成帐单单据。
选择合适的解决方案
实际上实在便利性和控制性上寻找平衡
编程
相关文章
1.
AWS 基础设施即代码(五)
2.
解读基础设施即代码
3.
解读与部署:基于 Kubernetes 的基础设施即代码
4.
容器: 让“基础设施即代码”更容易
5.
揭秘LOL背后的IT基础架构丨基础设施即代码
6.
解读与部署(二):基于 Kubernetes 的 CICD 基础设施即代码
7.
使用Helm优化Kubernetes下的研发体验:基础设施即代码
8.
使用Helm优化Kubernetes下的研发体验:基础设施即代码 ...
9.
基础设施
10.
介绍一些基础云设施----基于AWS
更多相关文章...
•
Markdown 代码
-
Markdown 教程
•
Eclipse 代码模板
-
Eclipse 教程
•
IntelliJ IDEA代码格式化设置
•
IntelliJ IDEA安装代码格式化插件
相关标签/搜索
基础设施
设施
aws
基础设计
五代
代码
基础
公共设施
aws+easystack
网站建设指南
MyBatis教程
SQLite教程
代码格式化
乱码
设计模式
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
1.2 Illustrator多文档的几种排列方式
2.
5.16--java数据类型转换及杂记
3.
性能指标
4.
(1.2)工厂模式之工厂方法模式
5.
Java记录 -42- Java Collection
6.
Java记录 -42- Java Collection
7.
github使用
8.
Android学习笔记(五十):声明、请求和检查许可
9.
20180626
10.
服务扩容可能引入的负面问题及解决方法
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
1.
AWS 基础设施即代码(五)
2.
解读基础设施即代码
3.
解读与部署:基于 Kubernetes 的基础设施即代码
4.
容器: 让“基础设施即代码”更容易
5.
揭秘LOL背后的IT基础架构丨基础设施即代码
6.
解读与部署(二):基于 Kubernetes 的 CICD 基础设施即代码
7.
使用Helm优化Kubernetes下的研发体验:基础设施即代码
8.
使用Helm优化Kubernetes下的研发体验:基础设施即代码 ...
9.
基础设施
10.
介绍一些基础云设施----基于AWS
>>更多相关文章<<