月度归档: 2019年12月

AWS EC2 可突增性能实例

 

可突增性能实例是唯一将积分用于 CPU 使用的实例类型。可突增性能实例(包括 T3、T3a 和 T2 实例)旨在提供基准水平的 CPU 性能,并且能够在您的工作负载需要时突增到更高的水平。可突增性能实例非常适合用于各种通用应用程序。包括微服务、低延迟交互式应用程序、中小型数据库、虚拟桌面、开发、构建和暂存环境、代码存储库以及产品原型。

CPU 积分和基准性能

传统 Amazon EC2 实例类型提供固定的性能,而可突增性能实例提供基准水平的 CPU 性能并能够突增到基准水平之上。如果你的实例CPU负载超过了基准性能,此时就会使用CPU积分,每个积分允许你一个vCPU利用率达到100%,运行一分钟;如果你的实例CPU少于基准性能(例如,处于空闲状态时),每小时也会获得一定积分,当然每个可突增实例的CPU积分累计也是有上限的,详见下面的表格。

何时使用无限模式与固定 CPU

下图显示了可突增性能实例t3.large 花费与固定性能实例m5.large 花费相同的收支平衡 CPU 使用率点。t3.large 的收支平衡 CPU 使用率点为 42.5%。

如果平均 CPU 使用率为 42.5%,则运行 t3.large 的费用与 m5.large 的运行费用相同,如果平均 CPU 使用率高于 42.5%,则t3.large费用更高。

如果工作负载需要低于 42.5% 的平均 CPU 使用率,您可以受益于 t3.large 的较低价格,同时获得与 m5.large 相同的性能。

 

在AWS中构建微服务体系

本文摘自AWS白皮书,《Implementing Microservices on AWS》 

摘要

微服务是软件开发的一种架构和组织方法,它可以加速部署周期、增强创新和自主性,提高软件应用程序的可维护性和可扩展性,通过使用敏捷方法帮助团队独立工作,扩展组织交付的软件和服务。微服务方案中,软件由小服务组成,小服务通过定义良好的、可以独立部署的API进行通信。这些服务由小型自主团队拥有。这种组织方法是成功扩展组织的关键。

在客户构建微服务时,我们观察到三种常见的模式:API驱动、事件驱动和数据流。在这篇文章中,我们将介绍三种方法,并总结微服务的共同特征,讨论构建微服务的主要挑战,并描述产品团队如何利用Amazon Web Services(AWS)来克服这些挑战。

介绍

微服务架构对于软件工程来说并不是一种全新的方法,而是各种成功和成熟概念的组合,比如:

  • Agile software development 敏捷软件开发
  • Service-oriented architectures 面向服务的体系结构
  • API-first design API的设计
  • Continuous Integration/Continuous Delivery (CI/CD) 持续集成/持续交付

在大多数情况下,12因素应用程序的设计模式被用于微服务。我们首先介绍了高度伸缩性、容错的微服务体系结构(用户界面、微服务实现和数据存储)的不同方面,以及如何在利用容器技术的AWS上构建它。然后,我们建议使用AWS服务实现典型的无服务器微服务体系结构,以减少操作复杂性。

Serverless被定义为一个操作模型,遵循以下原则:

没有提供或管理的基础设施

自动按消费单位缩放

“按价值付款”的计费模式

内置的可用性和容错能力

最后,我们查看整个系统并讨论微服务体系结构的跨服务方面,如分布式监视和审计、数据一致性和异步通信。

AWS上的简单微服务

典型的应用程序使用不同的层构建-用户接口层、业务层和持久层。微服务体系结构的核心思想是将功能拆分为内聚的“垂直领域”-不是通过技术层,而是通过实现特定领域。下图描述了AWS上典型微服务应用程序的参考体系结构。

clipboard.png

用户接口

web应用程序通常使用JavaScript框架来实现与REST或RESTful API通信的单页面应用程序。静态web内容可以使用Amazon Simple Storage Service (Amazon S3)和Amazon CloudFront提供。

由于微服务的客户端从最近的边缘位置提供服务,并从缓存或代理服务器获得响应,从而优化到源服务器的连接,因此延迟可以显著降低。然而,微服务彼此之间的运行并不会从CDN中受益。在某些情况下,这种方法可能会增加额外的延迟。最佳实践是实现其他缓存机制,以减少聊天和最小化延迟。

微服务

我们常说api是微服务的大门,API充当一组编程接口(通常是RESTful web服务API)背后的应用程序逻辑的入口点。此API接受并处理来自客户端的调用,并可能实现诸如流量管理、请求过滤、路由、缓存、身份验证和授权等功能。

微服务实现

AWS集成了支持微服务开发的构件。两种流行的方法是使用AWS Lambda和带有AWS Fargate的Docker容器。

使用AWS Lambda,您只需上传您的代码,并让Lambda负责运行和扩展执行所需的所有工作,以满足高可用性的实际需求曲线。这意味着不需要对基础设施进行管理。Lambda支持多种编程语言,可以从其他AWS服务触发,也可以直接从任何web或移动应用程序调用。AWS Lambda的最大优势之一是您可以快速移动:您可以专注于您的业务逻辑,因为安全性和可伸缩性是由AWS管理的。Lambda驱动了可伸缩平台。

减少部署操作工作的一种常见方法是基于容器的部署。由于可移植性、生产力和效率等优点,Docker等容器技术在过去几年里越来越受欢迎。容器的学习曲线可能非常陡峭,您必须考虑Docker映像的安全保障与监控。

Amazon Elastic Container Service (Amazon ECS)和Amazon Elastic Kubernetes Service (Amazon EKS)消除了安装、操作和扩展自己的集群管理基础设施的需要。通过简单的API调用,您可以启动和停止启用docker的应用程序,查询集群的完整状态,并访问许多熟悉的特性,如安全组、负载平衡、Amazon Elastic Block Store (Amazon EBS)卷和AWS身份和访问管理(AWS Identity and access Management, IAM)角色。

AWS Fargate是一种容器管理服务,它允许您运行没有服务器的容器,因此您不必担心配置、配置和扩展虚拟机集群来运行容器。使用Fargate,您不再需要为容器应用程序提供足够的计算资源。Fargate可以启动成千上万个容器,并且可以轻松地扩展到运行最关键的任务应用程序。

Amazon ECS支持容器放置策略和约束,以自定义Amazon ECS如何放置和终止任务。任务放置约束是在任务放置期间考虑的规则。您可以将属性(本质上是键-值对)与容器实例关联起来,然后使用约束来根据这些属性放置任务。例如,您可以使用约束来放置基于实例类型或实例功能的特定微服务,例如由gpu支持的实例。

Amazon EKS运行最新版本的开源Kubernetes软件,因此您可以使用来自Kubernetes社区的所有现有插件和工具。运行在Amazon EKS上的应用程序与运行在任何标准Kubernetes环境中的应用程序完全兼容,无论是运行在本地数据中心还是公有云上。Amazon EKS集成了IAM和Kubernetes,使您能够向Kubernetes中的本地身份验证系统注册IAM实体。不需要手动设置与Kubernetes主机进行身份验证的凭据。IAM集成允许您使用IAM直接通过主机本身进行身份验证,从而提供对Kubernetes主机公共端点的细粒度访问。

Amazon ECS和Amazon EKS中使用的Docker图像可以存储在Amazon Elastic Container Registry (Amazon ECR)中。Amazon ECR消除了操作和扩展容器注册中心所需的基础设施的需要。

持续集成和持续交付(CI/CD)是最佳实践,也是DevOps计划的重要组成部分,它支持快速的软件更改,同时保持系统的稳定性和安全性。然而,这超出了本白皮书的范围,更多信息可以在“在AWS上实践持续集成和持续交付”白皮书中找到。

Private Links

AWS PrivateLink是一种高可用性、可扩展的技术,允许您私下将VPC连接到受支持的AWS服务、由其他AWS帐户托管的服务(VPC端点服务)和受支持的AWS市场合作伙伴服务。您不需要使用internet网关、NAT设备、公共IP地址、AWS直连连接或VPN连接来与服务通信。您的VPC和服务之间的通信不会离开Amazon网络。

PrivateLink是增强微服务体系结构隔离性的好方法,例如,可以创建数百个vpc,每个vpc托管并提供单个微服务。公司现在可以创建服务并将其出售给AWS的其他客户,通过私有连接进行访问。它们创建一个接受TCP流量的服务,将其托管在网络负载均衡器之后,然后直接或在AWS市场中提供服务。他们将收到新订阅请求的通知,并可以选择接受或拒绝每一个请求。虽然AWS PrivateLink的能力在许多场景中都有优点,但SaaS组织对此特别感兴趣。通过AWS PrivateLink, SaaS提供商看到了使用这种网络结构来增强和扩展其解决方案的架构和业务模型的新的和创造性的机会。

数据存储

数据存储用于存储微服务所需的数据。流行的会话数据存储是内存缓存,如Memcached或Redis。AWS提供这两种技术,作为管理的Amazon ElastiCache服务的一部分。

在应用程序服务器和数据库之间放置缓存是减少数据库上读负载的常见机制,从而允许使用资源来支持更多的写操作。缓存也可以改善延迟。

关系数据库仍然非常流行用于存储结构化数据和业务对象。AWS通过Amazon关系数据库服务(Amazon RDS)提供6个数据库引擎(Microsoft SQL Server、Oracle、MySQL、MariaDB、PostgreSQL和Amazon Aurora)作为管理服务。

然而,关系数据库并不是为无限扩展而设计的,这使得应用技术来支持大量查询变得困难和耗时。

NoSQL数据库的设计目的是为了支持可伸缩性、性能和可用性,而不是关系数据库的一致性。NoSQL数据库的一个重要元素是它们通常不执行严格的模式。数据分布在可以水平伸缩的分区上,并使用分区键进行检索。由于各个微服务被设计为很好地完成一件事情,所以它们通常有一个简化的数据模型,这个模型可能非常适合NoSQL持久性。必须理解,与关系数据库相比,sql数据库具有不同的访问模式。例如,连接表是不可能的。如果有必要,则必须在应用程序中实现逻辑。您可以使用Amazon DynamoDB创建一个数据库表,该表可以存储和检索任意数量的数据,并为任何级别的请求流量提供服务。DynamoDB提供了个位数毫秒的性能,但是,某些用例需要以微秒为单位的响应时间。DynamoDB Accelerator (DAX)为访问数据提供缓存功能。

DynamoDB还提供了一个自动伸缩功能,可以根据实际流量动态调整吞吐量容量。然而,在某些情况下,由于应用程序中持续时间很短的大型活动峰值,容量规划是困难的或不可能的。对于这种情况,DynamoDB提供了一个按需选项,它提供了简单的按请求付费定价。随需应变的DynamoDB能够在不进行容量规划的情况下每秒立即处理数千个请求。

降低操作复杂度

我们所描述的体系结构已经在使用托管服务,但是我们仍然需要管理亚马逊弹性计算云(Amazon EC2)实例。我们可以进一步减少运行所需的操作工作,通过使用完全无服务器的体系结构来维护和监视微服务。

API的实现

架构、部署、监视、持续改进和维护API可能是一项耗时的任务。有时需要运行不同版本的api来确保所有客户机的向后兼容性。开发周期的不同阶段(即开发、测试和生产)进一步增加了操作工作。

授权是所有api的关键特性,但它的构建通常很复杂,而且涉及重复的工作。当一个API发布并获得成功时,下一个挑战是管理、监控和利用API的第三方开发者的生态系统。

其他重要的特性和挑战包括限制请求以保护后端服务、缓存API响应、处理请求和响应转换,以及使用Swagger等工具生成API定义和文档。

Amazon API Gateway解决了这些挑战,降低了创建和维护RESTful API的操作复杂性。

API网关允许您使用AWS API或AWS管理控制台通过导入Swagger定义以编程方式创建API。API网关作为任何运行在Amazon EC2、Amazon ECS、AWS Lambda或任何内部环境中的web应用程序的前门。基本上,API网关允许您在无需管理服务器的情况下运行API。

图2演示了API网关如何处理API调用并与其他组件进行交互。来自移动设备、网站或其他后端服务的请求被路由到最近的CloudFront存在点(PoP),以最小化延迟并提供最佳用户体验。

clipboard.png

无服务器微服务

“没有服务器比没有服务器更容易管理”。清除服务器是消除操作复杂性的一种好方法。

clipboard.png

图3:使用AWS Lambda的无服务器微服务

Lambda与API网关紧密集成。从API网关到Lambda进行同步调用的能力支持创建完全无服务器的应用程序,我们的文档对此进行了详细描述。

图3展示了使用AWS Lambda的无服务器微服务的体系结构,其中完整的服务是由托管服务构建的,这消除了为规模和高可用性而设计的体系结构负担,并消除了运行和监视微服务底层基础设施的操作工作。

图4显示了同样基于无服务器服务的类似实现。在这种体系结构中,Docker容器与AWS Fargate一起使用,因此没有必要关心底层基础设施。除了Amazon DynamoDB之外,还使用了Amazon Aurora Serverless,这是Amazon Aurora (MySQL兼容版)的随需应变、自动伸缩配置,其中数据库将根据应用程序的需要自动启动、关闭和伸缩容量。

clipboard.png

部署Lambda-Based应用程序

您可以使用AWS CloudFormation来定义、部署和配置无服务器应用程序。

AWS无服务器应用程序模型(AWS SAM)是定义无服务器应用程序的一种方便方法。AWS SAM由CloudFormation本地支持,并定义了用于表示无服务器资源的简化语法。为了部署应用程序,只需在CloudFormation模板中指定作为应用程序一部分所需的资源及其相关的权限策略,打包部署构件,并部署模板。基于AWS SAM, SAM Local是一个AWS CLI工具,它为您提供了一个环境,在将您的无服务器应用程序上传到Lambda运行时之前,在本地对其进行开发、测试和分析。您可以使用SAM Local来创建一个模拟AWS运行时环境的本地测试环境。

分布式系统组件

在了解了AWS如何解决与单个微服务相关的挑战之后,我们现在希望关注跨服务的挑战,比如服务发现、数据一致性、异步通信以及分布式监视和审计。

服务发现

微服务体系结构的主要挑战之一是允许服务彼此发现和交互。微服务体系结构的分布式特性不仅使服务的通信变得更加困难,而且还带来了其他挑战,比如检查这些系统的健康状况以及宣布何时有新的应用程序可用。您还必须决定如何以及在何处存储可由应用程序使用的元存储信息(如配置数据)。在本节中,我们将探讨在基于微服务的体系结构的AWS上执行服务发现的几种技术。

基于DNS的服务发现

Amazon ECS现在包含了集成服务发现,使您的容器化服务更容易发现并彼此连接。在此之前,为了确保服务能够彼此发现和连接,您必须基于Amazon Route 53、AWS Lambda和ECS事件流配置和运行自己的服务发现系统,或者将每个服务连接到负载均衡器。

Amazon ECS使用Route 53自动命名API创建和管理服务名称注册表。名称将自动映射到一组DNS记录,以便您可以在代码中通过名称引用服务,并编写DNS查询,以便在运行时将名称解析到服务的端点。您可以在服务的任务定义中指定健康检查条件,Amazon ECS确保服务查找只返回健康的服务端点。

此外,您还可以为Kubernetes管理的服务利用统一服务发现。为了实现这种集成,AWS参与了Kubernetes孵化器项目的外部DNS项目。另一个选择是利用AWS Cloud Map的功能。AWS Cloud Map扩展了自动命名api的功能,为资源(如ip、url和ARNs)提供了服务注册表,并提供了基于api的服务发现机制,该机制具有更快的更改传播速度和使用属性缩小发现资源集的能力。现有的Route 53自动命名资源自动升级到AWS Cloud Map。

第三方软件

实现服务发现的另一种方法是使用第三方软件,如HashiCorp、etcd或Netflix Eureka。这三个示例都是分布式的、可靠的键值存储。对于HashiCorp Consul,有一个AWS Quick Start,它设置一个灵活的、可伸缩的AWS云环境,并将HashiCorp Consul自动启动到您选择的配置中。

服务网格

在高级微服务体系结构中,实际应用程序可以由数百甚至数千个服务组成。通常应用程序最复杂的部分不是实际的服务本身,而是这些服务之间的通信。服务网格是处理服务间通信的附加层,负责监视和控制微服务体系结构中的流量。这允许像服务发现这样的任务完全由这一层来处理。

通常,服务网格分为数据平面和控制平面。数据平面由一组智能代理组成,这些代理与应用程序代码一起部署,作为一个特殊的sidecar代理,拦截微服务之间的所有网络通信。控制平面负责与代理通信。

服务网格是透明的,这意味着应用程序开发人员不需要知道这个额外的层,也不需要更改现有的应用程序代码。AWS App Mesh是一个服务网格,它提供了应用程序级别的网络,使您的服务可以轻松地跨多种类型的计算基础设施彼此通信。AWS App Mesh标准化了你的服务的通信方式,给了你端到端的可见性,并确保了你的应用的高可用性。

您可以将 AWS App Mesh与AWS Fargate、Amazon ECS、Amazon EKS和AWS上的自管理Kubernetes上运行的现有或新的微服务结合使用。AWS App Mesh可以监视和控制跨集群、编排系统或作为单个应用程序运行的微服务的通信,而无需进行任何代码更改。

分布式数据管理

单片应用程序通常由大型关系数据库支持,该数据库定义了所有应用程序组件通用的单个数据模型。在微服务方法中,这种中央数据库将妨碍建立分散和独立组件的目标。每个微服务组件都应该有自己的数据持久层。然而,分布式数据管理提出了新的挑战。作为CAP定理的结果,分布式微服务体系结构在性能上固有地牺牲了一致性,并且需要采用最终的一致性。

在分布式系统中,业务事务可以跨越多个微服务。因为它们不能利用单个ACID事务,所以您可能会以部分执行而告终。在这种情况下,我们需要一些控制逻辑来重做已经处理过的事务。为此,通常采用分布式的Saga模式。在失败的业务事务的情况下,Saga安排了一系列补偿事务,这些补偿事务撤消了前面事务所做的更改。 AWS Step Functions使得实现一个Saga执行协调器变得很容易,如下图所示。

clipboard.png

构建由主数据管理工具和过程管理的关键引用数据的集中存储为微服务提供了一种方法来同步它们的关键数据并可能回滚状态。使用Lambda和预定的Amazon CloudWatch事件,您可以构建一个简单的清理和重复删除机制。

状态更改通常会影响多个微服务。在这种情况下,事件源已被证明是一种有用的模式。事件源背后的核心思想是将每个应用程序更改表示为一个事件记录并将其持久化。数据以事件流的形式存储,而不是持久化应用程序状态。数据库事务日志和版本控制系统是事件源的两个众所周知的例子。事件溯源有两个好处:可以为任何时间点确定和重构状态。它自然会产生一个持久的审计跟踪,并有助于调试。

在微服务体系结构上下文中,事件源通过使用发布/订阅模式来分离应用程序的不同部分,它将相同的事件数据提供给不同的微服务数据模型。事件源经常与CQRS(命令查询责任隔离)模式结合使用,以将读写工作负载分离开来,并优化性能、可伸缩性和安全性。在传统的数据管理系统中,命令和查询在相同的数据存储库中运行。

图6显示了如何在AWS上实现事件源模式。Amazon Kinesis数据流是中央事件存储的主要组件,它以事件的形式捕获应用程序更改并将其保存在Amazon S3上。

图6描述了由Amazon API Gateway、AWS Lambda和Amazon DynamoDB组成的三个不同的微服务。蓝色箭头表示事件流:当microservice 1经历事件状态更改时,它通过将消息写入Kinesis数据流来发布事件。所有微服务都在AWS Lambda中运行它们自己的Kinesis数据流应用程序,AWS Lambda读取消息的副本,根据微服务的相关性过滤消息,并可能转发消息进行进一步处理。

clipboard.png

Amazon S3在所有微服务上持久地存储所有事件,并且是调试、恢复应用程序状态或审计应用程序更改时的唯一可靠来源。

异步通信和轻量级的消息

在传统的单片应用程序中,通信是直接的—应用程序的一部分使用方法调用或内部事件分发机制与其他部分通信。如果使用解耦的微服务实现相同的应用程序,则必须使用网络通信实现应用程序不同部分之间的通信。

REST通信

HTTP/S协议是实现微服务之间同步通信的最流行的方法。在大多数情况下,RESTful api使用HTTP作为传输层。REST架构风格依赖于无状态通信、统一接口和标准方法。

使用API Gateway,您可以创建一个API,作为应用程序访问来自后端服务的数据、业务逻辑或功能的“前门”,例如在Amazon EC2和Amazon ECS上运行的工作负载、在Lambda上运行的代码或任何web应用程序。使用API网关服务定义的API对象是一组资源和方法。资源是API域中的类型化对象,它可以将数据模型或关系关联到其他资源。可以将每个资源配置为响应一个或多个方法,即标准HTTP动词,如GET、POST或PUT。REST api可以部署到不同的阶段、版本化以及克隆到新版本。

API Gateway处理所有涉及到接受和处理数十万并发API调用的任务,包括流量管理、授权和访问控制、监控以及API版本管理。

异步消息传递和事件传递

实现微服务之间通信的另一个模式是消息传递。服务通过队列交换消息进行通信。这种通信风格的一个主要好处是,不需要服务发现,而服务是松散耦合的。同步系统是紧密耦合的,这意味着同步下游依赖中的问题会直接影响上游调用方。来自上游调用方的重试可以快速扩展和放大问题。

根据特定的需求(如协议),AWS提供不同的服务来帮助实现此模式。一个可能的实现是使用Amazon Simple Queue Service (Amazon SQS)和Amazon Simple Notification Service (Amazon SNS)的组合。这两种服务紧密合作:Amazon SNS允许应用程序通过推送机制向多个订阅者发送消息。通过同时使用Amazon SNS和Amazon SQS,可以将一条消息传递给多个消费者。图7演示了Amazon SNS和Amazon SQS的集成。

clipboard.png

当您订阅一个SQS队列到一个SNS主题时,您可以向主题发布一条消息,而Amazon SNS向订阅的SQS队列发送一条消息。消息包含发布到主题的主题和消息,以及JSON格式的元数据信息。

另一种实现策略基于Amazon MQ,如果现有软件使用开放标准api和协议(包括JMS、NMS、AMQP、STOMP、MQTT和WebSocket)进行消息传递,则可以使用Amazon MQ。Amazon SQS公开了一个自定义API,这意味着,如果您有一个现有的应用程序需要从本地环境迁移到AWS,那么代码更改是必要的。对于Amazon MQ,在许多情况下不需要这样做。

Amazon MQ管理流行的开源消息代理ActiveMQ的管理和维护。底层基础设施自动提供高可用性和消息持久性,以支持应用程序的可靠性。

业务流程和状态管理

当涉及多个微服务时,微服务的分布式特性使得编排工作流具有挑战性。开发人员可能会试图直接将编制代码添加到他们的服务中。应该避免这种情况,因为它引入了更紧密的耦合,使快速替换单个服务变得更加困难。

您可以使用Step Functions从各个执行离散功能的组件构建应用程序。Step Functions提供了一个状态机,它隐藏了服务编排的复杂性,比如错误处理和序列化/并行化。这使您可以快速地扩展和更改应用程序,同时避免服务内部的额外协调代码。

单步函数是协调组件和单步执行应用程序功能的可靠方法。Step Functions提供一个图形化控制台,将应用程序的组件作为一系列步骤进行排列和可视化。这使得构建和运行分布式服务变得非常简单。Step Functions自动触发和跟踪每个步骤,并在出现错误时重试,因此您的应用程序按预期的顺序执行。Step Functions记录每个步骤的状态,这样当出现问题时,您可以快速诊断和调试问题。您甚至可以在不编写代码的情况下更改和添加步骤,以使您的应用程序更快地发展和创新。

Step Functions是AWS无服务器平台的一部分,支持编排Lambda函数以及基于计算资源(如Amazon EC2和Amazon ECS)的应用程序,还支持Amazon SageMaker和AWS Glue等其他服务。图8说明了Lambda函数的调用是如何直接从Step Functions推到Lambda的,而Amazon EC2或Amazon ECS上的工作人员则持续轮询调用。

Step Functions为您管理操作和底层基础结构,以帮助确保您的应用程序在任何规模上都可用。

clipboard.png

要构建工作流,Step Functions使用Amazon States语言。工作流可以包含顺序或并行步骤以及分支步骤。

图9显示了结合顺序和并行步骤的微服务体系结构的示例工作流。可以通过Step Functions API或API Gateway调用这样的工作流。

clipboard.png

分布式监控

微服务体系结构由许多需要监视的不同分布式组件。您可以使用Amazon CloudWatch来收集和跟踪指标、集中和监视日志文件、设置警报并自动响应AWS环境中的更改。CloudWatch可以监视AWS资源,如EC2实例、DynamoDB表和RDS DB实例,以及应用程序和服务生成的自定义指标,以及应用程序生成的任何日志文件。

监控

您可以使用CloudWatch获得系统范围内对资源利用、应用程序性能和操作健康状况的可见性。CloudWatch提供了一个可靠的、可伸缩的、灵活的监控解决方案,您可以在几分钟内开始使用它。您不再需要设置、管理和扩展自己的监视系统和基础设施。在微服务体系结构中,使用CloudWatch监视定制指标的功能是一个额外的好处,因为开发人员可以决定为每个服务收集哪些指标。此外,还可以基于自定义指标实现动态扩展。

另一个流行的选择是使用Prometheus,尤其是亚马逊的eks。Prometheus是一个开源的监测和报警工具包,经常与Grafana结合使用,以可视化收集到的指标。许多Kubernetes组件在/metrics存储指标,普罗米修斯可以定期收集这些指标。

集中的日志

一致的日志记录对于故障诊断和确定问题非常重要。微服务允许团队发布比以前更多的版本,并鼓励工程团队对生产中的新特性进行试验。理解客户的影响对于逐步改进应用程序是至关重要的。

默认情况下,大多数AWS服务集中它们的日志文件。AWS上日志文件的主要目的地是Amazon S3和Amazon CloudWatch日志。对于运行在EC2实例上的应用程序,可以使用守护进程将日志文件发送到CloudWatch日志。Lambda函数将其日志输出发送到CloudWatch日志,Amazon ECS包括对awslogs日志驱动程序的支持,该驱动程序允许将容器日志集中到CloudWatch日志。对于Amazon EKS来说,有必要运行FluentD,它将集群中各个实例的日志转发到一个集中的日志CloudWatch日志中,在那里,这些日志将通过Elasticsearch和Kibana进行更高级的报告。

图10说明了一些服务的日志功能。然后,团队可以使用Amazon Elasticsearch Service (Amazon ES)和Kibana等工具搜索和分析这些日志。Amazon Athena可用于对Amazon S3中的集中日志文件运行特殊查询。

clipboard.png

分布式跟踪

在许多情况下,一组微服务一起工作来处理请求。设想一个由数十个微服务组成的复杂系统,其中调用链中的一个服务发生了错误。即使每个微服务都正确地进行了日志记录,并且将日志合并到一个中央系统中,也很难找到所有相关的日志消息。

AWS X-Ray背后的核心思想是使用相关id,它是附加到与特定事件链相关的所有请求和消息上的惟一标识符。当请求到达第一个x – ray集成服务(例如,应用程序负载均衡器或API网关)并包含在响应中时,跟踪ID将添加到HTTP请求的特定跟踪标头X-Amzn-Trace-Id中。通过X-Ray SDK,任何微服务都可以读取,但也可以添加或更新这个头。

AWS X-Ray与Amazon EC2、Amazon ECS、Lambda和AWS Elastic Beanstalk合作。您可以将X-Ray用于用Java、Node、.net编写的应用程序。

clipboard.png

AWS上的日志分析选项

搜索、分析和可视化日志数据是理解分布式系统的一个重要方面。Amazon CloudWatch Logs Insights是一个可以即时探索、分析和可视化日志的伟大服务。这允许您排除操作问题。分析日志文件的另一个选项是使用Amazon ES和Kibana。

Amazon ES可以用于全文搜索、结构化搜索、分析,以及三者的组合。Kibana是Amazon ES的一个开源数据可视化插件,可以与之无缝集成。

图12展示了使用Amazon ES和Kibana进行的日志分析。CloudWatch日志可以配置为通过CloudWatch日志订阅向Amazon ES实时传输日志条目。Kibana将数据可视化,并向Amazon ES中的数据存储公开一个方便的搜索接口。该解决方案可以与ElastAlert等软件结合使用,实现报警系统,以便在数据中检测到异常、峰值或其他感兴趣的模式时,发送SNS通知、电子邮件、创建JIRA票据等。

clipboard.png

分析日志文件的另一个选择是使用Amazon Redshift和Amazon QuickSight。

Amazon QuickSight可以轻松连接到AWS数据服务,包括Amazon Redshift、Amazon RDS、Amazon Aurora、Amazon EMR、Amazon DynamoDB、Amazon S3和Amazon Kinesis。

Amazon CloudWatch日志可以作为日志数据的集中存储,除了只存储数据外,还可以将日志条目流到Amazon Kinesis data Firehose。

图13描述了一个场景,其中使用CloudWatch日志和Kinesis Data Firehose将日志条目从不同的源流到Amazon Redshift。Amazon QuickSight使用存储在Amazon Redshift中的数据进行分析、报告和可视化。

clipboard.png

图14描述了Amazon S3上的日志分析场景。当日志存储在S3 bucket中时,日志数据可以加载到不同的AWS数据服务中,如Amazon Redshift或Amazon EMR,以分析存储在日志流中的数据并发现异常。

clipboard.png

补充

通过将单片应用程序拆分成小的微服务,通信开销增加了,因为微服务必须互相通信。在许多实现中,使用了HTTP上的REST,因为它是一种轻量级通信协议,但是高消息量可能会导致问题。在某些情况下,可以考虑合并来回发送许多消息的服务。如果您发现自己处于这样一种情况,即您整合了越来越多的服务,只是为了减少聊天,那么您应该检查您的问题域和域模型。

协议

在本白皮书的前面,在异步通信和轻量级消息传递一节中,讨论了不同的可能协议。对于微服务,通常使用简单的协议,如HTTP。服务交换的消息可以采用不同的编码方式,比如JSON或YAML等可读的格式,或者Avro或协议缓冲区等高效的二进制格式。

缓存

缓存是减少微服务架构延迟和聊天的好方法。根据实际的用例和瓶颈,可以使用几个缓存层。许多运行在AWS上的微服务应用程序使用Amazon ElastiCache在本地缓存结果,从而减少对其他微服务的调用量。API Gateway提供了一个内置的缓存层,以减少后端服务器上的负载。此外,缓存还有助于减少数据持久层的负载。任何缓存机制的挑战都是在良好的缓存命中率和数据的及时性/一致性之间找到适当的平衡。

审计

在微服务体系结构(可能有数百个分布式服务)中要解决的另一个挑战是确保用户对每个服务的操作的可见性,并能够在组织级别上获得所有服务的良好全局视图。为了帮助实施安全策略,审计资源访问和导致系统更改的活动是很重要的。

必须在单个服务级别以及在更广泛的系统上运行的服务之间跟踪更改。通常,微服务体系结构中经常发生更改,这使得审计更改更加重要。在本节中,我们将介绍AWS中的关键服务和特性,这些服务和特性可以帮助您审计微服务体系结构。

审计跟踪

AWS CloudTrail是一个跟踪微服务变化的有用工具,因为它可以记录所有在AWS云中进行的API调用,并在几分钟内将其实时发送到CloudWatch日志或Amazon S3。

所有用户和自动系统操作都可以进行搜索,并且可以对意外行为、公司策略违规或调试进行分析。记录的信息包括时间戳、用户/帐户信息、调用的服务、请求的服务操作、调用者的IP地址以及请求参数和响应元素。

CloudTrail允许为同一个帐户定义多个路径,从而允许不同的涉众(如安全管理员、软件开发人员或IT审计人员)创建和管理自己的路径。如果微服务团队有不同的AWS帐户,可以将轨迹聚合到一个单独的S3 bucket中。

在CloudWatch中存储审计跟踪的优点是实时捕获审计跟踪数据,并且很容易将信息重新路由到Amazon ES进行搜索和可视化。您可以配置CloudTrail来登录Amazon S3和CloudWatch日志。

事件和实时动作

必须对系统体系结构中的某些更改做出快速响应,并且必须采取行动来纠正这种情况,或者启动特定的治理过程来授权进行更改。

CloudWatch事件与CloudTrail的集成允许它为所有AWS服务中的所有API调用生成事件。还可以定义自定义事件或基于固定的调度生成事件。

当触发事件并匹配定义的规则时,可以立即通知组织中的适当人员,使他们能够采取适当的操作。如果所需的操作可以自动化,则规则可以自动触发内置工作流或调用Lambda函数来解决问题。

图15显示了一个环境,其中CloudTrail和CloudWatch事件一起处理微服务体系结构中的审计和修复需求。CloudTrail跟踪所有微服务,审计跟踪存储在S3存储桶中。CloudWatch事件位于CloudTrail之上,当您的架构发生特定更改时,它会触发警报。

clipboard.png

资源盘点和变更管理

要在敏捷开发环境中维护对快速变化的基础设施配置的控制,必须使用更自动化、更受管理的方法来审计和控制体系结构。

虽然CloudTrail和CloudWatch事件是跨微服务跟踪和响应基础设施更改的重要构建块,但是AWS Config 允许公司使用特定的规则定义安全策略,从而自动检测、跟踪和警告您违反策略。

下一个示例演示如何在微服务体系结构中检测、通知和自动响应不兼容的配置更改。开发团队的一名成员对微服务的API网关进行了更改,允许端点接受入站HTTP通信流,而不是只允许HTTPS请求。因为这种情况之前已经被组织确定为安全遵从性问题,所以 AWS Config 已经在监视这种情况。

该规则将更改标识为安全违规,并执行两个操作:在S3 bucket中创建已检测到的更改日志以进行审计,并创建一个SNS通知。在我们的场景中,使用Amazon SNS有两个目的:向指定的组发送电子邮件以通知安全违规,以及向SQS队列添加消息。接下来,获取消息,并通过更改API网关配置恢复兼容状态。

clipboard.png

结论

微服务架构是一种分布式设计方法,旨在克服传统单片架构的局限性。微服务帮助扩展应用程序和组织,同时改进周期时间。然而,它们也带来了一些挑战,可能增加额外的体系结构复杂性和操作负担。

AWS提供了大量的托管服务,可以帮助产品团队构建微服务体系结构,并最小化体系结构和操作复杂性。本篇文章将指导您了解相关AWS服务,以及如何使用AWS服务实现典型模式,如服务发现或事件源等。

敏捷(Agile)与DevOps有什么区别

关于敏捷Agile和DevOps都已经有无数的文章谈及,但是还是有很多人经常将二者混为一谈。特别是很多DevOps的文章中又往往提到了敏捷开发,因此,两种技术很容易被大家互认定为彼此,于是就有更多的人被搞糊涂了。为了将二者区分开,笔者查询了一系列的文档,特此将二者的区别在此列一下,希望能够帮助大家搞清楚二者。

一、概念不同

敏捷软件开发(Agile software development),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的新型软件开发方法,是一种能应对快速变化需求的软件开发能力。如上所示,敏捷是一种提倡迭代、协作和持续评估的方法,所有这些都是为了持续改进。当开发团队采用敏捷方法时,它依赖于客户的反馈,将开发项目划分为更小的任务,并发布更小的迭代,以完成对交付的改进。敏捷运动的起源是2001年的敏捷宣言。当时没有人意识到敏捷的经济意义。敏捷从来没有以这种方式计划过。

根据维基百科对DevOps的定义:DevOps是将软件开发(Dev)和运维(Ops)结合在一起的一组实践,旨在缩短系统开发生命周期并提供具有高质量软件的连续交付。

简而言之, DevOps是为了简化开发和交付工作流程而将开发和操作团队合并的一种实践。通过将开发团队和运维团队聚集在一起,打破之前的壁垒,是的开发周期可以变得更加高效。DevOps允许以较小的增量部署软件迭代。在DevOps中,更多考虑的是投资回报。

二、目标不同

敏捷目标是持续的变化和持续的改进,而DevOps的重点则是将开发和运维过程的不同阶段统一为一个无缝的循环。

三、关注点不同

敏捷开发关注于软件开发的迭代。其帮助开发团队以更高效的方式组织任务,一次只关注一个迭代,以保证在更短的时间内进行更有效的冲刺。而DevOps则致力于自动化软件开发帮助团队处理许多任务。DevOps更加关注的是持续集成和持续交付的整体过程。

四、变革内容不同

敏捷开发更多的是技术方面的变革,其更多的依赖于工具的支持;而DevOps更加强调的是开发团队和运维团队的无缝结合,对组织而言更像是一种在组织和文化方面的变革。

在二者结合时,DevOps团队可以像敏捷团队一样依赖于自动化测试和自动化交付。

陈汉卿

云业务事业部 | 高级系统架构师

神州泰岳软件股份有限公司·AWS战略合作伙伴

AWS Solution Provider | Migration | DevOps | Cloud Management Tools(CMT) ISV Partner

AWS上的持续集成持续交付

持续集成持续交付是一种 DevOps 软件开发实践。采用持续集成时,开发人员会定期将代码变更合并到一个中央存储库中,之后系统会自动运行构建和测试操作。持续集成通常是指软件发布流程的构建或集成阶段,需要用到自动化组件(例如 CI 或构建服务)和文化组件(例如学习频繁地集成)。持续集成的主要目标是更快发现并解决缺陷,提高软件质量,并减少验证和发布新软件更新所需的时间。

通过持续交付,系统可以自动为将代码更改发布到生产环境做好准备。​现代应用程序开发的支柱,持续交付通过在构建阶段后将所有代码变更部署到测试环境和/或生产环境中,实现对持续集成的扩展。在正确实施时,开发人员将始终拥有已通过标准化测试流程的部署就绪构建构件​。

采用持续交付时,开发人员可以自动执行单元测试以外的测试,这样他们就可以在部署到客户环境前跨多个维度对应用程序更新进行验证。这些测试可能包括 UI 测试、负载测试、集成测试、API 可靠性测试等。这有助于开发人员更全面地验证更新并抢先发现其中的问题。借助云,开发人员可轻松高效地自动创建和复制多个用于测试的环境,而这一点以前在本地很难实现。

为什么需要CICD?

过去,一个团队的开发人员可能会孤立地工作很长一段时间,只有在他们的工作完成后,才会将他们的更改合并到主分支中。这使得合并代码更改变得困难而耗时,而且还会导致错误积累很长时间而得不到纠正。这些因素导致更加难以迅速向客户交付更新。

持续交付与持续部署

采用持续交付时,系统会构建并测试每一个代码变更,然后将其推送到非生产测试环境或临时环境中。生产部署前可能存在多个并行测试阶段。持续交付与持续部署之间的区别在于,需要手动批准才能更新到生产环境。对于持续部署,生产会在没有明确批准的情况下自动发生。

持续交付可实现整个软件发布流程的自动化。提交的每一个修订都会触发一个自动化流程,即构建、测试并提供更新。部署到实际生产环境的最终决定由开发人员触发。

持续交付不是持续部署

关于持续交付的一个误解是,提交的每一个更改都在通过自动化测试后立即应用到生产中。然而,持续交付的关键不是立即将每一个变更应用到生产中,而是确保每一个变更都准备好投入生产。在将更改部署到生产环境之前,可以实现决策过程,以确保生产部署经过授权和审核。这个决定可以由一个人做出,然后由工具执行。

使用持续交付,上线的决定将成为一个业务决策,而不是技术决策。每次提交时都会进行技术验证。将变更发布到生产环境并不是一个破坏性事件。部署不需要技术团队停止处理下一组更改,也不需要项目计划、移交文档或维护窗口。部署成为一个可重复的过程,已在测试环境中多次执行和验证。

持续集成持续交付的优势

  • 自动化软件发布流程

持续交付让您的团队能够自动构建、测试并准备代码变更,以便发布到生产环境中,从而使您的软件交付更加高效、快速。提高开发人员的工作效率

  • 提高开发人员的工作效率

持续集成可将开发人员从手动任务中解放出来,并且鼓励有助于减少发布到客户环境中的错误和缺陷数量的行为,从而提高团队的工作效率。

  • 更快发现并解决缺陷

通过更频繁的测试,您的团队可以在缺陷稍后变成大问题前发现并解决这些缺陷。

  • 更快交付更新

持续集成有助于您的团队更快、更频繁地向客户交付更新。

2019年六大云计算趋势

作者:JAY CHAPEL 发表于2019年12月16日

原文链接:https://devops.com/the-top-six-cloud-computing-trends-of-2019/

在整个2019年,云计算一直是技术和商业媒体中最热门的主题之一。这并不奇怪,因为过去几年云计算行业一直在快速增长。Synergy Research Group最近报告说,公有云的整体增长率为37%。他们还指出,公开的IaaS和PaaS市场仅用了两年的时间便扩大了一倍,他们的预测显示,它们在未来三年内将再翻一番。

尽管预计今年将保持稳定增长,但一些值得注意的趋势仍然突出。当专家回顾2019年时,他们可能会强调以下影响今年的云计算趋势:

企业云管理器的兴起

我们最近对ParkMyCloud用户进行了一项研究,结果表明,越来越多的公司技术领先公司的职务中都能够看到云或其云提供商的名称(例如AWS)。这表明,管理和架构云基础架构的个人的专业化程度正在提高。无论是所谓的企业云经理,云架构师还是类似的人,2019年都出现了监督和指导云运营的专门角色。

合并的多云视图

随着大型和小型企业继续采用和使用多个公有云,我们看到了对合并的多云视图和在2019年跨多个云采取行动的能力的迅速增长的需求。提供此功能的第三方工具可为企业提供能够选择一个工具来编排,管理,治理和优化其混合和多云环境。许多客户还意识到简化操作的需求-云原生的工具并不总是易于使用。

多云到来

多云真正在2019年出现,并且只会在2020年增长。现在大多数组织都使用多云。实际上,大多数研究表明,超过80%的企业具有多云策略。列举的原因包括需要避免供应商锁定,利用每个云提供商的同类最佳云服务的能力以及应用程序效率的选择。

更自动化

DevOps方法的最大技术优势之一是自动解决了困扰运营和关键项目的手动任务。因此,自动化趋势在2019年继续扩大。

更抽象

在2019年,IT变得越来越抽象。这意味着容器使用率的增长以及允许开发人员越来越少担心基础架构(例如无服务器和PaaS)的模型。

容器成为主流

应用程序容器化不仅仅是云计算中的一个新时髦术语。它正在改变将资源部署到云中的方式。越来越多的公司在2019年利用Kubernetes等容器服务和EKS,AKS和GKS等云原生服务,

业务在2019年继续向云转移,上述六种趋势表明该行业正在增长,有时以不可预测的方式增长。毫无疑问,明年也将带来一些惊喜。但是,在可预见的未来,云和相关服务的扩展趋势是显而易见的。

Elastic Beanstalk vs CloudFormation

什么是AWS Elastic Beanstalk

AWS Elastic Beanstalk 可降低管理的复杂性,但不会影响选择或控制。您只需上传应用程序,AWS Elastic Beanstalk 将自动处理有关容量预配置、负载均衡、扩展和应用程序运行状况监控的部署细节。

什么是 AWS CloudFormation

AWS CloudFormation 是一项服务,可帮助您对 Amazon Web Services 资源进行建模和设置,以便能花较少的时间管理这些资源,而将更多的时间花在运行于 AWS 中的应用程序上。

CloudFormation可以帮助您简化基础设施管理、快速复制基础设施、以及轻松控制和跟踪对您的基础设施所做的更改。

Elastic Beanstalk vs CloudFormation

Elastic Beanstalk和CloudFormation都不收取额外费用,只需支付存储和运行应用程序所需的AWS资源。

Elastic Beanstalk旨在使开发人员的更轻松的进行代码部署,Elastic Beanstalk是将WEB应用程序部署到AWS快速简便的方法,而CloudFormation更多的被系统工程师用于基础设施的构建;Elastic Beanstalk可以自动生成CloudFormation模板来构建应用程序运行的环境,AWS CloudFormation属于技术堆栈的“基础结构构建工具”类别,而AWS Elastic Beanstalk可以分类为“平台即服务”。

总结:

如果您的应用程序是Elastic Beanstalk支持的标准Web层应用程序,并且您希望为应用程序提供易于管理,高度可扩展的运行环境,请使用Elastic Beanstalk。

如果您想要直接管理应用程序的所有AWS资源,或具有大量自定义实例设置或部署过程可以直接使用CloudFormation。

AWS Elastic Beanstalk

AWS Elastic Beanstalk 可让您迅速地在 AWS 云中部署和管理应用程序,而无需为运行这些应用程序的基础设施操心。

AWS Elastic Beanstalk 可降低管理的复杂性,但不会影响选择或控制。您只需上传应用程序,AWS Elastic Beanstalk 将自动处理有关容量预配置、负载均衡、扩展和应用程序运行状况监控的部署细节。

Elastic Beanstalk 支持在 Go、Java、.NET、Node.js、PHP、Python 和 Ruby 中开发的应用程序,借助 Elastic Beanstalk,您可以快速轻松地部署、监控和扩展应用程序。

创建环境时,Elastic Beanstalk 会预配置所需资源运行应用程序。为环境创建的 AWS 资源包括一个弹性负载均衡器(图中的 ELB)、一个 Auto Scaling 组和一或更多个 Amazon Elastic Compute Cloud (Amazon EC2) 实例。

Elastic Beanstalk 提供了应用程序运行状况和指标监控控制面板,方便您监控生产网站的运行情况。

Amazon Web Services (AWS) 包含一百多种服务,每项服务都针对一个功能领域。服务的多样性可让您灵活地管理 AWS 基础设施,然而,判断应使用哪些服务以及如何进行预配置可能会非常困难。通过使用Elastic Beanstalk可以帮助您方便的完成繁琐的部署工作,您可以专注于自己的业务创新。

DevOps的三大核心转变

什么是DevOps?

维基百科对DevOps的定义如下:DevOps是一套结合了软件开发(Dev)和信息技术操作(Ops)的实践,旨在缩短系统开发生命周期,提供高质量的持续交付。

DevOps计划试图解决的问题是,对于开发人员和质量检查工程师,一旦应用程序或新功能代码成功通过测试,该项目就完成了。传统的运维方法中,软件测试完成后,如何将其部署到生产环境,并保证其性能,是运维工程师最头疼的问题。而解决问题过程中,开发团队和运维团队的互相推诿,往往极大程度影响了客户感知。

为此,DevOps在软件交付方面做了最大程度的改变。其核心为以下三个方面:

  1. 基础架构即代码(IaC)  -服务器环境以声明清单的形式进行描述,并以代码形式存储,任何团队成员均可对其进行调整并多次重复使用,以提供测试或构建代码以及维护代码所需的基础架构生产中的应用程序。
  2. 持续集成(CI)  -根据最终用户的反馈将以规格和功能要求的形式不断集成到产品中,以进行下一次软件开发。
  3. 持续交付(CD)  -在不中断最终工作用户体验的要求下,通过自动代码交付管道自动提供所有必需的资源,并在代码通过测试后立即将代码自动推送到生产中,而无需DevOps工程师采取额外的手动操作。

使用DevOps的方法中,在构建新的软件版本之前,将每一批新的代码推送到存储库中之后,都要进行各种测试。DevOps专家考虑了应用程序在创建之前将如何运行,他们编写了脚本来创建CI / CD管道,以确保产品更快地投放市场并获得积极的最终用户体验。可以说DevOps的核心转变是,团队的所有人都需要对客户的最终体验负责。

Amazon EC2丢失密钥解决方法

AWS实例的密钥登录机制

AWS创建EC2实例时会生成一个密钥文件,有了这个密钥才能使用SSH登录实例,可以使用 AWSSupport-ResetAccess 文档在 Amazon EC2 Windows 实例上自动重新启用本地管理员密码生成,以及在 Amazon EC2 Linux 实例上生成新 SSH 密钥。

工作原理

使用自动化和 AWSSupport-ResetAccess 对实例进行故障排除的工作原理如下:

  • 您为实例指定 ID 并运行 Automation 工作流程。
  • 系统创建一个临时 VPC,然后运行一系列 Lambda 函数以配置该 VPC。
  • 系统在与您的原始实例相同的可用区内为您的临时 VPC 标识一个子网。
  • 系统启动一个临时的启用了 SSM 的 帮助程序实例。
  • 系统停止您的原始实例并创建备份。然后,它将原始根卷附加到帮助程序实例。
  • 系统使用 Run Command 在帮助程序实例上运行 EC2Rescue。在 Windows 上,EC2Rescue 通过在附加的原始根卷上使用 EC2Config 或 EC2Launch 为本地管理员启用密码生成。在 Linux 上,EC2Rescue 生成并注入新的 SSH 密钥并将私有密钥加密保存到 Parameter Store 中。完成后,EC2Rescue 重新将根卷附加回原始实例。
  • 系统根据您的实例创建新 Amazon 系统映像 (AMI),现在密码生成已启用。您可以使用此 AMI 创建新 EC2 实例,并根据需要关联新密钥对。
  • 系统重启您的原始实例,并终止临时实例。系统也将终止临时 VPC 和在自动化开始时创建的 Lambda 函数。
  • Windows:您的实例生成一个新密码,您可以使用分配给实例的当前密钥对从 EC2 控制台对该密码进行解码。

Linux:您可以使用存储在 Systems Manager Parameter Store 中的 SSH 密钥(格式为 /ec2rl/openssh/instance_id/key),通过 SSH 连接到实例。

使用AWSSupport-ResetAccess重置EC2(LINUX)密钥

  1. 使用CloudFormation创建角色

S3 URL: https://s3.amazonaws.com/awssupport-ssm.us-east-2/cfn/EC2Rescue/AWSSupport-EC2RescueRole.template

复制Output中的Value,这是后续AssumeRole 的 ARN

2、进入AWSSupport-ResetAccess

3、输入参数
InstanceID,指定无法访问实例的 ID
EC2RescueInstanceType,为 EC2Rescue 实例指定实例类型。默认实例类型为 t2.small
SubnetId,指定您指定的实例所在可用区中某个现有 VPC 的子网。
AssumeRole,从 CloudFormation 控制台复制的 AssumeRole ARN

4、执行自动化

5、检查结果


控制台显示执行成功,这时候去到Parameter Store,/ec2rl/openssh/instance_id/key就是连接到服务器的密钥,通过SSH就可以连接到服务器了。
 

陈汉卿

云业务事业部 | 高级系统架构师

神州泰岳软件股份有限公司·AWS战略合作伙伴

AWS Solution Provider | Migration | DevOps | Cloud Management Tools(CMT) ISV Partner

AWS Limit监控解决方案

AWS 会保持每个账户的服务限制,以帮助保证 AWS 资源可用,以及最大程度降低新客户的账单风险。一些服务限制将随着您对 AWS 的使用逐渐自动提高,但大多数 AWS 服务都要求您手动申请提高限制。

我如何能获得更宽松的服务限制,以及如何根据扩展需要管理我的服务限制?

解决方法

AWS Limit Monitor解决方案会自动设置必要的服务,以在您接近限制时主动跟踪资源使用情况并发送通知。该解决方案易于部署,并利用AWS Trusted Advisor服务限制检查和服务配额来帮助您显示特定AWS服务的使用情况和限制,并集中管理您的限制。

借助AWS Limit Monitor,您可以通过电子邮件或Slack接收通知,使您可以请求增加限制或在达到限制之前关闭资源。

AWS极限监控器架构

AWS Limit Monitor架构

该解决方案使用AWS Lambda自动刷新AWS Trusted Advisor服务限制检查,以通过API调用检索最新利用率和限制数据。Trusted Advisor将根据限制计算使用量,以确定状态是正常(使用率低于80%),警告(使用率在80%至99%之间)还是错误(使用率100%)。

如果您选择监视基于Amazon Elastic Compute Cloud(Amazon EC2)的虚拟中央处理器(基于vCPU)的限制,则模板将启动另一个Lambda函数,该函数每五分钟运行一次。该功能检查服务配额以检索每个AWS区域的vCPU使用率和限制数据。该函数根据限制计算vCPU使用率,以确定状态是“正常”(使用率低于80%),“警告”(使用率在80%至99%之间)还是“错误”(使用率100%)。

Amazon CloudWatch Events从Trusted Advisor和vCPU监视Lambda函数捕获状态事件,并使用一组CloudWatch Events规则将状态事件发送到您在解决方案的初始部署期间选择的所有目标:Amazon Simple Queue Service(Amazon SQS)队列,Amazon Simple Notification Service(Amazon SNS)主题(可选)或Slack通知的Lambda函数(可选)。如果在初始部署期间启用了Slack通知,则该解决方案将启动Lambda函数,该函数将通知发送到您现有的Slack。

CloudFormation template:

https://s3.amazonaws.com/solutions-reference/limit-monitor/latest/limit-monitor.template