AWS 16 AWS_Elastic_Beanstalk
作者:互联网
AWS弹性豆茎 AWS Elastic Beanstalk
在AWS中安全且可预测地部署应用程序
AWS上的开发者问题
•管理基础设施
•部署代码
•配置所有数据库、负载平衡器等
•规模问题
•大多数网络应用都有相同的架构(ALB+ASG)
•开发人员只想让他们的代码运行!
•可能会在不同的应用程序和环境中保持一致
-----------------------------------------------------------------------------
弹性豆茎–概述
•Elastic Beanstalk是一种以开发人员为中心的应用程序部署视图在AWS上
•它使用了我们以前见过的所有组件:EC2、ASG、ELB、RDS…
•托管服务
•自动处理容量调配、负载平衡、扩展和应用程序,运行状况监视、实例配置…
•仅应用程序代码由开发人员负责
•我们仍然可以完全控制配
•Beanstalk是免费的,但您需要为基础实例付费
弹性豆茎–组件
•应用:收集弹性豆茎组件(环境、版本、配置等)
•应用程序版本:应用程序代码的迭代
•环境
•运行应用程序版本(仅一个应用程序)的AWS资源集合(一次一个版本)
•层:Web服务器环境层和工作环境层
•您可以创建多个环境(开发、测试、生产等)
弹性豆茎支撑平台
• Go
• Java SE
• Java with Tomcat
• .NET Core on Linux
• .NET on Windows Server
• Node.js
• PHP
• Python
• Ruby
• Packer Builder
• Single Container Docker
• Multi-container Docker
• Preconfigured Docker
•如果不支持,您可以编写您的定制平台(高级)
Web Server Tier vs. Worker Tier
•根据SQS消息的数量进行缩放
•可以将消息从另一个Web服务器层推送到SQS队列
-----------------------------------------------------------------------------
用于更新的Beanstalk部署选项
•一次完成(一次完成部署)All at once (deploy all in one go) ——速度最快,但实例暂时无法为流量提供服务(停机)
•滚动Rolling:一次更新几个实例(bucket),然后在第一个bucket运行正常后移动到下一个bucket
•使用其他批处理进行滚动Rolling with additional batches:
与滚动类似,但会增加新的实例以移动批处理(以便旧应用程序仍然可用)
•不可变Immutable:在新的ASG中启动新实例,并将版本部署到这些ASG中实例,然后在一切正常时交换所有实例
Elastic Beanstalk Deployment
All at once
•最快的部署
•应用程序有停机时间
•非常适合快速迭代开发环境
•无额外费用
Rolling
•应用程序正在低于容量运行
•可以设置bucket大小
•应用程序同时运行两个版本
•无额外费用
•长期部署
Rolling with additional batches
•应用程序正在满负荷运行
•可以设置bucket大小
•应用程序同时运行两个版本
•额外成本小
•额外批次在部署结束时移除
•部署时间更长
•对prod有好处
Immutable
•零停机时间
•新代码部署到临时ASG上的新实例
•成本高,容量加倍
•部署时间最长
•故障时快速回滚(只需终止新ASG)
•非常适合prod
弹力豆茎展开蓝色/绿色
•不是弹性豆茎的“直接特征”
•零停机和释放设施
•创建一个新的“阶段”环境,并在那里部署v2
•新环境(绿色)可以独立验证,并在必要时回滚问题
•可使用加权策略设置路线53,以将少量流量重定向至舞台环境
•使用Beanstalk进行环境测试时,“交换URL”
弹性豆茎——流量分割
•金丝雀测试
•新的应用程序版本部署到具有相同容量的临时ASG
•少量流量被发送到临时ASG,数量可配置时间的问题
•监控部署健康状况
•如果部署失败,会触发自动回滚(非常快)
•没有应用程序宕机
•新实例从临时ASG迁移到原始ASG
•然后终止旧的应用程序版本
-----------------------------------------------------------------------------
弹性豆茎 Elastic Beanstalk CLI
•我们可以安装一个名为“EB CLI”的附加CLI,它可以使来自CLI的豆茎
•基本命令包括:
• eb create
• eb status
• eb health
• eb events
• eb logs
• eb open
• eb deploy
• eb config
• eb terminate
•它有助于您的自动化部署管道!
弹性豆茎部署过程
•描述依赖关系
(Python的requirements.txt,Node.js的package.json)
•包装代码为zip,并描述依赖关系
•Python:requirements.txt
•Node.js:package。json
•控制台:上传zip文件(创建新的应用程序版本),然后部署
•CLI:使用CLI(上传zip)创建新的应用程序版本,然后部署
•Elastic Beanstalk将在每个EC2实例上部署zip,resolve并启动应用程序
-----------------------------------------------------------------------------
豆茎生命周期策略
•Elastic Beanstalk最多可存储1000个应用程序版本
•如果不删除旧版本,将无法再部署
•要逐步淘汰旧的应用程序版本,请使用生命周期策略
•基于时间(删除旧版本)
•基于空间(当版本太多时)
•当前使用的版本不会被删除
•选择不删除S3中的源捆绑包,以防止数据丢失
弹性豆茎Extensions
•必须将包含我们代码的zip文件部署到Elastic Beanstalk
•用户界面中设置的所有参数都可以通过使用文件的代码进行配置
•要求:
•在代码根目录中的有这个扩展文件.ebextensions
•YAML/JSON格式
• .config扩展在.ebextensions文件夹下(例如:logging.config)
•能够使用option_settings修改一些默认设置
•能够添加资源,如RDS、ElastiCache、DynamoDB等…
•如果环境消失,由管理的资源ebextensions将被删除
-----------------------------------------------------------------------------
Elastic Beanstalk Under the Hood
引擎盖下的弹性豆茎
•在引擎盖下,弹性豆茎依靠云层CloudFormation形成
•CloudFormation用于提供其他AWS服务(我们稍后将看到)
•用例:您可以在自己的应用程序中定义云信息资源.ebextensions
提供ElastiCache,S3桶,任何你想要的东西!
弹性豆茎克隆 Elastic Beanstalk Cloning
•克隆具有完全相同配置的环境
•用于部署应用程序的“测试”版本
•保留所有资源和配置:
•负载平衡器类型和配置
•RDS数据库类型(但不保留数据)
•环境变量
•克隆环境后,您可以更改设置
弹性Beanstalk迁移:负载均衡器
•制作弹性豆茎后环境,你不能改变弹性负载平衡器类型(仅限配置)
•迁移:
1.创造一个新的环境
除了LB,配置相同(无法克隆)
2.将应用程序部署到新环境
3.执行CNAME交换或Route 53最新情况
弹性豆茎
•RDS可以配置Beanstalk,这对开发/测试非常有用
•这对prod来说并不好,因为数据库生命周期与豆茎环境生命周期分层
•prod最好单独创建一个RDS数据库,并提供我们的EB应用程序与连接字符串
弹性豆茎迁移:解耦RDS
1.创建RDS DB的快照(作为保护)
2.进入RDS控制台,保护RDS数据库不被删除
3.创建一个新的弹性豆茎环境,没有RDS,指向你的
对现有RDS的应用
4.执行CNAME交换(蓝色/绿色)或路线53更新,确认工作
5.终止旧环境(RDS不会被删除)
6.删除云信息堆栈(处于删除失败状态)
-----------------------------------------------------------------------------
弹性豆茎——单码头工人 Single Docker
•将应用程序作为单个docker容器运行
•要么提供:
•Dockerfile:Elastic Beanstalk将构建并运行Docker容器
•Dockerrun.aws.json (v1)::描述*已构建*Docker映像的位置
• Image
• Ports
• Volumes
• Logging
• Etc...
•单个Docker容器中的Beanstalk不使用ECS
弹性豆茎——多码头集装箱 Multi Docker Container
•Multi Docker帮助在EB中的每个EC2实例运行多个容器
•这将为您创造:
•ECS集群
•EC2实例,配置为使用ECS集群
•负载平衡器(在高可用性模式下)
•任务定义和执行
•需要配置Dockerrun.aws.json (v2)源代码根目录下的json
•Dockerrun.aws.json用于生成ECS任务定义 ECS task definition
•您的Docker图像必须预先构建并存储在ECR中
------------------------------------------------------------------------
弹性豆茎和HTTPS
•带HTTPS的Beanstalk
•想法:将SSL证书加载到负载平衡器上
•可以从控制台(EB控制台、负载平衡器配置)完成
•可通过以下代码完成:.eExtensions/securelistener-alb.config
•可以使用ACM(AWS证书管理器)或CLI设置SSL证书
•必须配置安全组规则以允许传入端口443(HTTPS端口)
•Beanstalk将HTTP重定向到HTTPS
•将实例配置为将HTTP重定向到HTTPS:
•或使用规则配置应用程序负载平衡器(仅限ALB)
•确保健康检查不会被重定向(因此他们会继续给出200 OK)
Web服务器与工作环境
•如果您的应用程序执行的任务很长,需要完成,请将这些任务转移到专门的工人环境
•将应用程序分离为两层是很常见的
•示例:处理视频、生成zip文件等
•您可以在文件cron中定义定期任务cron.yaml
Elastic Beanstalk–定制平台(高级)
•定制平台非常先进,允许从头定义:
•操作系统(OS)
•附加软件
•Beanstalk在这些平台上运行的脚本
•用例:应用程序语言与Beanstalk不兼容,不使用Docker
•创建自己的平台:
•使用平台定义Platform.yaml文件
•使用Packer软件(创建AMI的开源工具)构建平台
•定制平台vs定制镜像(AMI):
•定制图像是调整现有Beanstalk平台(Python、Node.js、Java…)
•定制平台旨在创建一个全新的Beanstalk平台
------------------------------------------------------------------------
标签:Elastic,部署,AWS,应用程序,Beanstalk,弹性,豆茎 来源: https://www.cnblogs.com/ives-xu/p/16133459.html