基于 AWS 平台的 DevOps 实践 张孝峰 AWS 中国解决方案架构师
议题 关于 DevOps 用 AWS 实现 DevOps 的框架和工具 CodeCommit CodePipeline Codebuild CodeDeploy CloudFormation Beanstalk OpsWorks Cloudwatch CloudTrail API Gateway Lambda ECS
关于 Devops.. 因为我们不希望事情是这样的 瀑布式开发, 版本发布少 我们希望 快速迭代, 敏捷开发 Change Change Time Time
DevOps 重要内容 基础设施即代码 IT 自动化和配置管理版本控制的集成持续集成和持续交付持续部署应用和基础设施的版本管理监控和日志管理
亚马逊的 Devops 故事
你眼中的亚马逊集团 2003: 50 亿美元 2004: 70 亿美元 2016:1360 亿美元
亚马逊开发流程的演进
传统应用发布的四个阶段 : 冗长的周期和复杂的协作 源码编译测试生产 写入源代码, 编译代码例如.java 文件 单元测试 新代码的结对 风格检查检查 代码检测 创建容器镜像 和其他的系统做兼容性测试 压力测试 用户界面测试 攻击测试 把应用发布到生产环境
亚马逊开发形式的转变 : 2001-2009 Merchants.com 2001 2009 一个巨大的应用程序 + 团队 众多的微服务 + 小团队 (2 pizza teams)
微服务 MicroServices 面向服务的架构 单一目的 通过 APIs 连接 高度解耦
软件生命期新的管道 持续集成 持续交付 持续发布
Amazon 开发团队最佳实践 在 2014 年 : 数千个团队 微服务架构 持续交付 多环境部署 = 5 千万次部署 / 年
变革移动终端带来的变革 : 软件的交付方式被彻底改变 旧的软件交付方式 新的软件交付方式
面对变化 : 是粗暴拓展基础设施? 还是改变企业组织协作模式?
基于 AWS 服务实现 DevOps 的框架和工具
AWS 对 DevOps 的全面支持 Code Programs, CLI, Scripts, DML, Frameworks/Tools SDK API Platform Python, Java, PHP, Node.js, PHP, Ruby, GO, REST API 基础服务
建立自动交付渠道
持续集成模型
AWS CodeCommit
AWS DevOps 服务 开发 构建 测试 部署 搭建 监控 运维 CodePipeline Opsworks Elastic Beanstalk CodeCommit Elastic Container Service Lambda CodeBuild CodeDeploy CloudFormation CloudTrail CloudWatch 配置管理 版本管理 持续集成 持续交付 持续部署 基础设施即代码 自动化监控 自动化运维 日志管理
AWS CodeCommit 可扩展的托管型源代码控制服务, 托管私有的 Git 存储库 Git objects in Amazon S3 git pull/push SSH or HTTPS CodeCommit Git index in Amazon DynamoDB Encryption key in AWS KMS 用于托管私有 Git 存储库的安全 高度可扩展的托管源代码控制服务 版本控制项目, 能够处理具有大量文件或分支 大尺寸文件及冗长版本历史记录的存储库. 可以存储从代码到二进制文件的一切内容 支持 Git 的标准功能, 可与现有的基于 Git 的工具无缝协作 具有 Amazon S3 可扩展, 高可用, 高持久 数据静止时可用客户专用秘钥加密
AWS CodeCommit 使用方式
迁移到 codecommit 将本地或非版本控制内容迁移到 AWS CodeCommit 将 Git 存储库迁移到 AWS CodeCommit
AWS CodePipeline
AWS CodePipeline 管道流程
持续交付 - CodePipeline 可自定义的自动化版本发布, 并且集成了编译和测试 对自定义的版本发布工作流建模 可视化 ( 源代码 编译 beta gamma 线上生产 ) 自动化编译 测试和部署 执行自定义规则 与第三方工具集成
AWS CodeBuild
AWS CodeBuild
AWS CodeBuilde 工作流程
持续集成
持续交付与持续部署的区别
AWS DevOps 服务 开发 构建 测试 部署 搭建 监控 运维
AWS CodeDeploy
AWS CodeDeploy 提供功能包括滚动更新 部署健康监测 回滚 集中化的管理 历史检索 支持的语言包括 JS Python Java C++ Shell 脚本, 可集成原有的工具链 application revisions deployment groups v1, v2, v3 CodeDeploy Dev Test Production 将代码快速部署到任何 EC2 上的环境 自动, 可复用且提供完全管理的服务 减少部署或应用错误带来的停机时间 从单个实例扩展到上千个实例部署到任何服务器上 : AWS or on-premises 中央集中控制和监控代码滚动升级
WS CodeDeploy 部署流程与组件关联 部署流程 组件关联
1) 打包 app 2) 指定部署目标 3) 部署! version: 0.0 os: linux files: - source: chef/ destination: /etc/chef/codedeploy - source: target/hello.war destination: /var/lib/tomcat6/webapps hooks: ApplicationStop: - location: deploy_hooks/stop-tomcat.sh BeforeInstall: - location: deploy_hooks/install-chef.sh - location: deploy_hooks/chef-solo.sh ApplicationStart: - location: deploy_hooks/start-tomcat.sh ValidateService: - location: deploy_hooks/verify_service.sh
1) 打包 app 2) 指定部署目标 3) 部署! Deployment group Deployment group Agent Agent Agent Agent Agent Agent Test 将实例按下述编组 : Agent Agent Agent 弹性扩展组 (Auto-scaling group) Production Amazon EC2 标签 On-premises 标签
1) 打包 app 2) 指定部署目标 3) 部署! AWS CLI & SDKs AWS Console CI / CD Partners GitHub aws deploy create-deployment \ --application-name MyApp \ --deployment-group-name TargetGroup \ --s3-location bucket=mybucket,key=myapp.zip
部署方式 一次一台最少健康主机数目 = 99% v2 v1 v1 v1 v1 v1 v1 v1 一次一半最少健康主机数目 = 50% v2 v2 v2 v2 v1 v1 v1 v1 一次全部最少健康主机数目 = 0 v2 v2 v2 v2 v2 v2 v2 v2 [ 其他定制方式 ] 最少健康主机数目 = 75% v2 v2 v1 v1 v1 v1 v1 v1
Codedeploy 如何工作
CodeDeploy 就地部署
蓝绿部署
持续部署
基础架构代码化
AWS DevOps 服务 开发 构建 测试 部署 搭建 监控 运维 CodePipeline Opsworks Elastic Beanstalk CodeCommit Elastic Container Service Lambda CodeBuild CodeDeploy CloudFormation CloudTrail CloudWatch 配置管理 版本管理 持续集成 持续交付 持续部署 基础设施即代码 自动化监控 自动化运维 日志管理
操作 AWS 服务的三种方式 Web 控制台 APIs and SDKs 命令行 DevOps 基础 AWS Tools (SDK, CLI, IDE, etc.): http://aws.amazon.com/tools/
一切皆是 API AWS Tools (SDK, CLI, IDE, etc.): http://aws.amazon.com/tools/
Elastic Beanstalk
基于 AWS 的基础设施层面 DevOps 实践要素 高级服务 自己动手 Elastic Beanstalk OpsWorks CloudFormation 代码 / 命令行 便利 IAM CloudWatch 控制
Elastic Beanstalk vs. DIY 聚焦于构建自己的应用 你的代码 Elastic Beanstalk 负责配置 EC2 实例, 包括应用运行的目标平台所需要的其他组件, 用户不需要登录到实例里面安装和配置应用堆栈 HTTP server Application server Language interpreter Operating system Host 用户提供 Elastic Beanstalk 提供
如何部署应用 1. 通过 AWS Management Console 2. 通过 AWS Toolkit for Eclipse and Visual Studio IDE 3. 使用 EB 命令行接口 (EB CLI) $ eb deploy
部署应用需要提供的信息 你的代码 支持的平台 01 Region 02 堆栈 ( 容器 ) 类型 03 单实例 e 或 负载均衡 + 弹性扩展组 04 数据库 (RDS) 可选
Elastic Beanstalk 构建不同版本环境
Cloudformation
CloudFormation 组件和技术实现 模板 CloudFormation 堆栈 JSON 格式的文件 参数定义需要的资源具体配置 框架 创建堆栈更新堆栈错误检查和回滚 配置好的 AWS 资源 完整的 SAWS 服务支持 可定制化
基础平台模板化 简化 AWS 服务的部署, 快速部署一个 Stack 形成基础设施的模板 CloudFormation 自动解决资源部署的先后依赖关系 版本控制 拷贝 更新模板 第三方管理工具可以通过 API 集成 CloudFormation
基于模板的快速部署
Cloudformation 一键部署全站
Opsworks
OpsWorks 灵活的应用管理解决方案, 提供自动化工具来建模和管理应用, 以及支撑应用运行所需要的可扩展的复杂的基础设施
基于 Chef 的配置管理 每个 EC2 上运行 agent OpsWorks Agent 与 OpsWorks 服务通信, 理解其触发的命令, 然后运行在 Chef solo 模式.
创建应用堆栈 支撑应用运行所需要的底层资源的容器
根据业务逻辑定义不同的层
为每一层添加实例
OpsWorks 工作原理
AWS OpsWorks Agent 支持的生命周期事件 setup configure deploy undeploy shutdown
使用内置 Chef Recipe 或定制 Chef Recipes 配置应用
第三方工具集成
贯穿始终的安全与监控 AWS IAM (Identity & Access Mgmt) Amazon CloudWatch Manage users, groups & permissions Monitor resources
DevOps, 不是一个目的地, 而是一条路
无服务器优化
AWS DevOps 服务 开发 构建 测试 部署 搭建 监控 运维 CodePipeline Opsworks Elastic Beanstalk CodeCommit Elastic Container Service Lambda CodeBuild CodeDeploy CloudFormation CloudTrail CloudWatch 配置管理 版本管理 持续集成 持续交付 持续部署 基础设施即代码 自动化监控 自动化运维 日志管理
在微服务架构中使用 API Gateway 和 Lambda Amazon API Gateway 托管 API 及路由 API 调用 AWS Lambda 执行应用的业务逻辑 Lambda + API Gateway 意味着客户不需要管理基础设施
无服务器后台的架构模式 AWS Mobile apps Internet API Gateway AWS Lambda functions Other AWS services
无服务器后台的架构模式 AWS Mobile apps Internet API Gateway AWS Lambda functions Other AWS services Managed API Gateway cache AWS Lambda functions Amazon CloudFront API Gateway Amazon CloudWatch Endpoints on Amazon EC2 Any other publicly accessible endpoint
ECS 上的微服务架构 Content Delivery API Layer Application Layer Persistency Layer Application Load Balancer Amazon ECS Amazon CloudFront Amazon API Gateway* EC2 Autoscaling Amazon DynamoDB Amazon S3 Application Load Balancer Amazon ECS Amazon ECR EC2 Autoscaling
AWS DevOps 服务 开发 构建 测试 部署 搭建 监控 运维 CodePipeline Opsworks Elastic Beanstalk CodeCommit Elastic Container Service Lambda CodeBuild CodeDeploy CloudFormation CloudTrail CloudWatch 配置管理 版本管理 持续集成 持续交付 基础设施即代码 自动化监控 自动化运维 持续部署 日志管理
小结 开发运维 DevOps 概念 公司文化 Organization 流程的改变 系统架构向微服务 Microservices 模式改变 基于 AWS 的 DevOps 实践指南 实现基于 AWS 的基础设施层面自动化运维 基于 AWS 的 Code services 创建应用的自动交付渠道 使用 API Gateway, Lambda 优化微服务架构 一切皆软件, 一切皆 API
Thank you!