使用 AWS Copilot 将集群应用程序部署至 Amazon ECS - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS Copilot 将集群应用程序部署至 Amazon ECS

由 Jean-Baptiste Guillois (AWS)、Mathew George (AWS) 和 Thomas Scott (AWS) 编写

代码存储库:集群示例应用程序演示

环境:生产

技术:容器和微服务;业务生产力; CloudNative DevelopmentAndTesting

Amazon Web Services:Amazon ECS、AWS Fargate、Amazon ECR

Summary

此模式介绍了如何通过两种方式在 Amazon Elastic Container Service (Amazon ECS) 集群中部署容器,即使用 Amazon Web Services (AWS) Management Console 和使用 AWS Copilot,以演示 AWS Copilot 如何简化部署任务。

Amazon ECS 是一项高度可扩展的快速容器管理服务,它可轻松运行、停止和管理集群上的容器。您的容器是在用于运行单个任务或服务内任务的任务定义中定义的。您可以在由 AWS Fargate 管理的无服务器基础设施上运行任务和服务。或者,为了更好地控制您的基础设施,您可在管理的 Amazon Elastic Compute Cloud (Amazon EC2) 实例集群上运行任务和服务。

AWS Copilot 命令行界面(CLI)命令简化了从本地开发环境在 Amazon ECS 上构建、发布和操作生产就绪的容器化应用程序。AWS Copilot CLI 与支持现代应用程序最佳实践的开发人员工作流保持一致:从将基础设施用作代码到创建代表用户配置的持续集成和持续交付(CI/CD)管道。您可以将 AWS Copilot CLI 用作日常开发和测试周期的一部分,替代 AWS 管理控制台。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • AWS 命令行界面(AWS CLI)在本地安装并配置为使用您的 Amazon Web Services account(请参阅 AWS CLI 文档中的安装说明配置说明

  • AWS Copilot 已本地安装(参见 Amazon ECS 文档中的安装说明

  • 本地计算机上安装了 Docker(参见 Docker 文档

限制

  • 在免费计划中,Docker 强制每个 IP 地址每 6 小时拉取 100 容器映像。

架构

目标技术堆栈

  • 设置了虚拟私有云(VPC)、公有子网和私有子网以及安全组的 AWS 环境

  • Amazon ECS 集群

  • Amazon ECS 服务和任务定义

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon DynamoDB

  • 应用程序负载均衡器

  • AWS Fargate

  • Amazon Identity and Access Management (IAM)

  • Amazon CloudWatch

  • AWS CloudTrail

目标架构

当您部署此模式的示例应用程序时,将在不同的可用区中创建和部署多个任务。每个任务将数据存储在 Amazon DynamoDB。当您访问某个任务的网页时,您可以查看所有其他任务的数据。

使用 AWS Copilot 部署容器架构

工具

Amazon Web Services

  • Amazon ECR  Amazon Elastic Container Registry (Amazon ECR) 是一项 AWS 托管容器映像注册表服务,它安全、可扩展且可靠。Amazon ECR 支持私有存储库,其具有使用 IAM 的基于资源的权限。

  • Amazon ECS – Amazon Elastic Container Service (Amazon ECS) 是一项高度可扩展的快速容器管理服务,可用于运行、停止和管理集群上的容器。您可以在由 AWS Fargate 管理的无服务器基础设施上运行任务和服务。或者,为了更好地控制您的基础设施,您可在管理的 Amazon Elastic Compute Cloud (Amazon EC2) 实例集群上运行任务和服务。

  • AWS Copilot – AWS Copilot 提供了命令行界面,可帮助您在 AWS 上启动和管理容器化应用程序,包括推送到注册表、创建任务定义和创建集群。

  • AWS Fargate — AWS Fargate 是一款无服务器 pay-as-you-go 计算引擎,让您无需管理服务器即可专注于构建应用程序。AWS Fargate 与 Amazon ECS 和 Amazon Elastic Kubernetes Service(Amazon EKS) 兼容。运行具有 Fargate 启动类型或 Fargate 容量提供程序的 Amazon ECS 任务和服务时,将应用程序打包到容器中,指定 CPU 和内存要求,定义联网和 IAM policy,然后启动应用程序。每个 Fargate 任务都具有自己的隔离边界,不与其他任务共享底层内核、CPU 资源、内存资源或弹性网络接口。

  • Amazon DynamoDB – Amazon DynamoDB 是一种全托管 NoSQL 数据库服务,提供快速而可预测的性能,能够实现无缝扩展。

  • 弹性负载均衡(ELB) – 弹性负载均衡在一个或多个可用区中的多个目标(如 EC2 实例、容器和 IP 地址)之间自动分配传入的流量。它会监控已注册目标的运行状况,并仅将流量传输到运行状况良好的目标。弹性负载均衡 根据传入流量随时间的变化对负载均衡器进行扩展。它可以自动扩缩来处理绝大部分工作负载。

工具

代码

此模式中使用的示例应用程序的代码可在集群示例应用程序存储库中找到。 GitHub按照下一节中的说明使用示例文件。

操作说明

任务描述所需技能
克隆 GitHub 存储库。

使用以下命令克隆代码存储库示例:

git clone https://github.com/aws-samples/cluster-sample-app cluster-sample-app && cd cluster-sample-app
AWS 应用程序开发人员 DevOps
创建 Amazon ECR 存储库。
  1. 登录 AWS 管理控制台,并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/ecr/repositories

  2. 选择 Create repository(创建存储库)

  3. 对于存储库名称,请输入cluster-sample-app

  4. 将所有其他设置保留为默认值。

  5. 选择 Create repository(创建存储库)

有关更多信息,请参阅 Amazon ECR 文档中的创建私有存储库

AWS 应用程序开发人员 DevOps
构建、标记和推送 Docker 映像到您的 Amazon ECR 存储库。
  1. 选择您刚刚创建的存储库,然后选择查看推送命令

  2. 复制显示的命令并在本地运行它们以构建、标记和推送 Docker 映像。这些命令将与以下内容类似。

将您的 Docker 客户端验证到注册表:

aws ecr get-login-password --region <YOUR_AWS_REGION> | docker login --username AWS --password-stdin <YOUR_AWS_ACCOUNT>.dkr.ecr.<YOUR_AWS_REGION>.amazonaws.com

构建 Docker 映像:

docker build -t cluster-sample-app .

要为 Docker 映像添加标记:

docker tag cluster-sample-app:latest <YOUR_AWS_ACCOUNT>.dkr.ecr.<YOUR_AWS_REGION>.amazonaws.com/cluster-sample-app:latest

推送 Docker 映像到存储库:

docker push <YOUR_AWS_ACCOUNT>.dkr.ecr.<YOUR_AWS_REGION>.amazonaws.com/cluster-sample-app:latest
AWS 应用程序开发人员 DevOps
部署应用程序堆栈。
  1. 打开 AWS CloudFormation 控制台,网址为 https://console.aws.amazon.com/cloudformation/

  2. 选择创建堆栈

  3. 对于 Prepare template(准备模板),选择 Template is ready(模板就绪)。

  4. 指定模板部分,选择上传模板文件

  5. 选择您从 GitHub 存储库cluster-sample-app-stack.yml中克隆的本地文件作为 CloudFormation 模板,然后选择 “下一步”。

  6. 输入您堆栈的名称,然后选择下一步

  7. 保留所有默认选项,然后选择下一步

  8. 查看所有选项,确认 IAM 资源创建,然后选择创建堆栈

  9. 部署应用程序堆栈后,选择输出选项卡,复制 URL,然后在浏览器中将其打开以访问该应用程序。

有关部署 CloudFormation 模板的更多信息,请参阅 AWS CloudFormation 文档中的创建堆栈

AWS DevOps,应用程序开发者
任务描述所需技能
克隆 GitHub 存储库。

使用以下命令克隆代码存储库示例:

git clone https://github.com/aws-samples/cluster-sample-app cluster-sample-app && cd cluster-sample-app
AWS 应用程序开发人员 DevOps
使用 AWS Copilot CLI 将您的容器映像部署到 AWS。

在项目根目录中使用以下命令一步部署应用程序:

copilot init --app cluster-sample-app --name demo --type "Load Balanced Web Service" --dockerfile ./Dockerfile --port 8080 --deploy

然后,您应该能够使用作为输出提供的 DNS 名称来访问该应用程序。

AWS 应用程序开发人员 DevOps
任务描述所需技能
删除 AWS 管理控制台 创建的资源。

如果您使用选项 1(AWS 管理控制台)部署应用程序堆栈,请在准备好删除您创建的资源时按照以下步骤操作:

  1. 打开 CloudFormation 控制台,网址为 https://console.aws.amazon.com/cloudformation/

  2. 选择您创建的堆栈,然后选择删除

  3. https://console.aws.amazon.com/ecr/repositories 打开 Amazon ECR 控制台。

  4. 选择您创建的存储库,然后选择删除

AWS 应用程序开发人员 DevOps
删除 AWS Copilot 创建的资源。

如果您使用选项 2 (AWS Copilot CLI) 部署应用程序堆栈,请在准备删除创建的资源时从项目的根目录运行以下命令:

copilot app delete
AWS 应用程序开发人员 DevOps

相关资源