问:什么是 Amazon Elastic Container Service?
Amazon Elastic Container Service (ECS) 是一项高度可扩展的高性能容器管理服务,支持 Docker 容器,并让您能够在托管的 Amazon EC2 实例集群上轻松运行应用程序。使用 Amazon ECS,您将不再需要安装、运维、扩展自己的集群管理基础设施。只需进行简单的 API 调用,您便可以启动和停止支持容器的应用程序,查询集群的完整状态,使用各种熟悉的功能,包括安全组、Elastic Load Balancing、EBS 卷和 IAM 角色。您可以使用 Amazon ECS 根据您的资源需求和可用性要求在您的集群中安排容器的置放。您还可以集成自己的计划程序或第三方计划程序,以满足业务或应用程序的特定要求。
问:为什么应该使用 Amazon ECS?
使用 Amazon ECS,您将不再需要安装、运维、扩展自己的集群管理基础设施,Amazon ECS 让容器的使用更简单,您可以将其作为构建块用于您的应用程序。Amazon ECS 让您可以使用 Docker 容器来安排长期运行的应用程序、服务和批量进程。Amazon ECS 可以维持应用程序的可用性,让您根据应用程序的容量需求来对容器进行扩缩。Amazon ECS 集成有您熟悉的功能,包括 Elastic Load Balancing、EBS 卷、VPC 和 IAM。简单的 API 让您可以集成并使用自己的计划程序,或将 Amazon ECS 连接到现有的软件交付流程中。
问:Amazon ECS 与 Amazon Elastic Beanstalk 有什么区别?
Amazon Elastic Beanstalk 是一个应用程序管理平台,可以帮助客户轻松部署和扩展 Web 应用程序和服务。它将构建块(例如 EC2、RDS、Elastic Load Balancing、Auto Scaling、CloudWatch)的调配、应用程序的部署、运行状况监控从用户身上分离出来,让用户可以集中精力编写代码。您只需指定要部署的容器映像、CPU 和内存要求、端口映射和容器链接即可。Elastic Beanstalk 将自动处理所有的具体事务,包括调配 Amazon ECS 集群、平衡负载、自动扩展、监控以及在集群中放置容器。
如果您希望利用容器的各种优势,但只想通过上传容器映像,在开发到生产等环节部署应用程序时享受到简易性,则 Elastic Beanstalk 非常适合。如果您需要对自定义应用程序架构进行更多精细化的控制,则可以直接使用 Amazon ECS。
问:Amazon ECS 是否支持任何其他容器类型?
不支持。目前,Docker 是 Elastic Container Service 支持的唯一容器运行时。
问:我想启动容器。为什么必须启动任务?
Docker 鼓励您将应用程序分成单个组件,而 Elastic Container Service 针对这一模式进行了优化。任务让您可以定义想要放置在一起的一组容器(或一部分容器)、容器的属性及其链接方式。任务包括 Elastic Container Service 作出置放决策所需的一切信息。要启动单个容器,您的任务定义中应该只包含一个容器定义。
问:Amazon ECS 是否支持应用程序和服务?
支持。Amazon ECS 服务计划程序可以管理长期运行的应用程序和服务。使用服务计划程序,您可以维持应用程序的可用性,并且根据应用程序的要求来扩展或缩小容器。服务计划程序让您可以使用 Elastic Load Balancing 在各个容器间分配流量。Amazon ECS 将自动从关联的负载均衡器注册和注销容器。
服务计划程序还将自动恢复运行状况不佳(ELB 运行状况检查失败)或停止运行的容器,保证正常运行的容器达到所需数量,以便支持您的应用程序。通过改变您希望服务运行的容器的数量,可以扩展或缩小应用程序的规模。
改变应用程序的定义或使用新的映像可以更新应用程序。计划程序将自动启动使用新定义的新容器并停止运行之前版本的容器(如果使用 ELB,则会等待 ELB 连接耗尽)。
问:Amazon ECS 是否支持动态端口映射?
支持。Amazon Elastic Container Service (ECS) 上的服务可以与 Elastic Load Balancing (ELB) 服务的 Application Load Balancer 相关联。Application Load Balancer 支持包含一组实例端口的目标组。您可以在 ECS 任务定义中指定动态端口,这可为安排在 EC2 实例上的容器提供未使用的端口。ECS 计划程序将自动向应用程序负载均衡器中使用此端口的目标组添加任务。
问:Amazon ECS 是否支持批量作业?
支持。您可以使用 Amazon ECS Run 任务一次运行一个或多个任务。Run 任务在符合任务要求(包括 CPU、内存和端口要求)的实例上开始任务。
问:能否将自己的计划程序与 Amazon ECS 配合使用?
ECS 提供了 Blox,这是一个用于容器管理和编排的开源对象集合。借助 Blox,您可以轻松地从 Amazon ECS 使用事件、本地存储集群状态以及通过 API 查询本地数据存储。此外,Blox 还包含一个守护程序计划程序,可用作关于如何使用集群状态服务器的引用。请参阅 Blox GitHub 页面了解更多信息。
问:能否使用自己的 AMI?
可以。您可以使用满足 Amazon ECS AMI 规范的任何 AMI。我们建议先从支持 Amazon ECS 的 Amazon Linux AMI 开始用起。兼容 Amazon ECS 的合作伙伴 AMI 也可以使用。您可以查阅相关文档了解 Amazon ECS AMI 规范。
问:应该如何配置我的容器实例,以便从 Amazon Elastic Container 注册表中提取?
Amazon ECR 与 Amazon ECS 集成,让您能够轻松地存储、运行和管理在 Amazon ECS 上运行的应用程序的容器映像。为此,您只需在您的任务定义中指定 Amazon ECR 存储库,然后将 AmazonEC2ContainerServiceforEC2Role 附加至您的实例即可。Amazon ECS 将为您的应用程序检索相应的镜像。
问:Amazon ECS 如何隔离属于不同客户的容器?
Amazon ECS 安排容器在客户控制的 Amazon EC2 实例上执行,同时以面向 EC2 客户提供的相同隔离控制与合规性为基础来进行构建。
问:能否对容器实例应用额外的安全配置和隔离框架?
可以。作为 Amazon EC2 客户,您拥有对容器实例操作系统的根访问权限,这让您在掌控操作系统安全设置的同时还控制着其他软件组件的加载和配置,以获得更多安全功能,例如监控、补丁管理、日志管理和主机入侵检测。
问:能否以不同的安全设置来运行容器实例,或者将不同的任务隔离在不同的环境中?
可以。您可以使用您选择的工具配置不同的容器实例。通过构筑集群和针对目标的启动,Amazon ECS 允许您控制任务在不同容器实例中的置放情况。
问:Amazon ECS 是否支持从私有或内部来源中检索 Docker 镜像?
支持。客户可以对其容器实例进行配置,以访问 VPC 内的私有 Docker 镜像注册表或可从 VPC 外部访问的注册表,如 Amazon Elastic Container Registry。
问:如何为 ECS 任务配置 IAM 角色?
首先,您需要为您的任务创建 IAM 角色,使用“Amazon Elastic Container Service Task Role”服务角色并附加含必要权限的策略即可成功创建。当您新建一项任务定义或修订任务定义时,您可以从“Task Role(任务角色)”下拉列表中选择一个角色,或使用 JSON 格式的“taskRoleArn”字段来指定角色。