AWS 基础设施即代码(五)

网友投稿 286 2022-10-13

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 模板剖析

自定义资源管理

为了处理不受 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功能已确定可以调用非本站点资源

好处

选择合适的解决方案

实际上实在便利性和控制性上寻找平衡

欢迎大家扫码关注,获取更多信息

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Ambassador,云原生应用的“门神”
下一篇:MyBatis 详细讲解动态 SQL的使用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~