通过使用 AWS CDK 设置 Amazon ECS Anywhere 来管理本地容器应用程序 - AWS Prescriptive Guidance

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

通过使用 AWS CDK 设置 Amazon ECS Anywhere 来管理本地容器应用程序

由 Rahul Sharad Gaikwad 博士 (AWS) 编写

代码存储库:amazon-ecs-anywhere-cdk-sam ples

环境:PoC 或试点

技术:现代化;容器和微服务;混合云 DevOps;基础架构

工作负载:所有其他工作负载

Amazon Web Services:AWS CDK;Amazon ECS;AWS 身份验证和访问管理

Summary

Amazon ECS Anywhere 是 Amazon Elastic Container Service (Amazon ECS)的扩展。您可以使用 ECS Anywhere 在本地或客户托管环境中部署本机 Amazon ECS 任务。此功能有助于降低成本,并减少复杂的本地容器编排和操作。您可以使用 ECS Anywhere 在本地和云环境中部署和运行容器应用程序。它使您的团队无需学习多个域和技能组合,也无需自行管理复杂的软件。

此模式演示了使用 AWS Cloud Development Kit (AWS CDK)堆栈设置 ECS Anywhere 的步骤。

先决条件和限制

先决条件

限制

产品版本

  • AWS CDK 工具包第 2 版

  • npm 版本 7.20.3 或更高版本

  • Node.js 版本 16.6.1 或更高版本

架构

目标技术堆栈

  • AWS CloudFormation

  • AWS CDK

  • Amazon ECS Anywhere

  • AWS Identity and Access Management(AWS IAM)

目标架构

下图说明了使用 AWS CDK 和 ECS Anywhere 设置的高级系统架构 TypeScript,如该模式所实现的那样。

  1. 当您部署 AWS CDK 堆栈时,它会在 AWS 上创建一个 CloudFormation 堆栈。

  2. 该 CloudFormation 堆栈预配置 Amazon ECS 集群和相关的 AWS 资源。

  3. 要将外部实例注册到 Amazon ECS 集群,您必须在虚拟机 (VM) 上安装 AWS Systems Manager Agent (SSM Agent)代理,并将该 VM 注册为 AWS Systems Manager 托管实例。 

  4. 对于您向 Amazon ECS 集群注册的每个外部实例,必须安装 SSM Agent、Amazon ECS 容器代理和 Docker。

  5. 当外部实例注册并配置到 Amazon ECS 集群时,它可以在注册为外部实例的虚拟机上运行多个容器。

使用 AWS CDK 将 ECS Anywhere 设置为。 TypeScript

自动化和扩缩

此模式提供的GitHub 存储库使用 AWS CDK 作为基础设施即代码 (IaC) 工具来创建该架构的配置。AWS CDK 可帮助您编排资源,并设置 ECS Anywhere。

工具

代码

此模式的源代码可在 GitHub Amazon ECS Anywhere CDK 示例存储库中找到。若要克隆和使用存储库,请按照下一节中的说明进行操作。

操作说明

任务描述所需技能

验证 AWS CDK 版本。

运行以下命令验证 AWS CDK Toolkit 的版本:

cdk --version

此模式需要 AWS CDK 版本 2。如果您使用 AWS CDK 早期版本,请按照 AWS CDK 文档中的说明对其进行更新。

DevOps 工程师

设置 AWS 凭证。

要设置凭证,请运行 aws configure 命令并按照提示进行操作:

$aws configure AWS Access Key ID [None]: <your-access-key-ID> AWS Secret Access Key [None]: <your-secret-access-key> Default region name [None]: <your-Region-name> Default output format [None]:
DevOps 工程师
任务描述所需技能

克隆 AWS CDK 代码存储库。

使用以下命令克隆此模式的 GitHub 代码存储库:

git clone https://github.com/aws-samples/amazon-ecs-anywhere-cdk-samples.git
DevOps 工程师

引导环境。

要将 AWS CloudFormation 模板部署到您要使用的账户和 AWS 区域,请运行以下命令:

cdk bootstrap <account-number>/<Region>

有关更多信息,请参阅 AWS CDK 文档中的引导

DevOps 工程师
任务描述所需技能

安装软件包依赖关系并编译 TypeScript 文件。

通过运行以下命令安装软件包依赖关系并编译 TypeScript 文件:

$cd amazon-ecs-anywhere-cdk-samples $npm install $npm fund

这些命令安装示例存储库内的所有软件包。 

重要:如果您收到有关缺少软件包的任何错误,请使用以下命令之一:

$npm ci

—或者—

$npm install -g @aws-cdk/<package_name>

有关更多信息,请参阅 npm 文档中的 npm cinpm install

DevOps 工程师

构建 项目。

若要生成项目代码,请运行以下命令:

npm run build

有关构建和部署项目的更多信息,请参阅 AWS CDK 文档中的您的第一个 AWS CDK 应用程序

DevOps 工程师

部署项目。

若要部署项目代码,请运行以下命令:

cdk deploy
DevOps 工程师

验证堆栈创建和输出。

打开 AWS CloudFormation 控制台 https://console.aws.amazon.com/cloudformation然后选择EcsAnywhereStack堆栈。 “输出” 选项卡显示要在外部 VM 上运行的命令。

DevOps 工程师
任务描述所需技能

使用 Vagrant 设置您的 VM。

出于演示目的,你可以使用 V HashiCorp agrant 来创建虚拟机。Vagrant 是一个开源实用程序,用于构建和维护便携式虚拟软件开发环境。通过从放置 Vagrantfile 的根目录下运行 vagrant up 命令来创建 Vagrant VM。有关更多信息,请参阅 Packer 文档

DevOps 工程师

将您的虚拟机注册为外部实例。

1. 使用 vagrant ssh 命令登录 Vagrant 虚拟机。有关更多信息,请参阅 Packer 文档

2. 创建激活码和 ID,您可以使用该激活码和 ID 在 AWS Systems Manager 注册虚拟机并激活外部实例。此命令的输出包括 ActivationIdActivationCode 值: 

aws ssm create-activation --iam-role EcsAnywhereInstanceRole | tee ssm-activation.json

3. 导出激活 ID 和代码值:

export ACTIVATION_ID=<activation-ID> export ACTIVATION_CODE=<activation-code>

4. 在本地服务器或虚拟机 (VM) 上下载安装脚本:

curl -o "ecs-anywhere-install.sh" "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh" && sudo chmod +x ecs-anywhere-install.sh

5. 在本地服务器或虚拟机 (VM) 上下载运行脚本:

sudo ./ecs-anywhere-install.sh \ --cluster test-ecs-anywhere \ --activation-id $ACTIVATION_ID \ --activation-code $ACTIVATION_CODE \ --region <Region>

有关设置和注册 VM 的更多信息,请参阅 Amazon ECS 文档中的将外部实例注册到集群

DevOps 工程师

验证 ECS Anywhere 和外部虚拟机的状态。

要验证您的虚拟盒子是否已连接到 Amazon ECS 控制面板并正在运行,请使用以下命令:

aws ssm describe-instance-information aws ecs list-container-instances --cluster $CLUSTER_NAME
DevOps 工程师
任务描述所需技能

清理和删除资源。

完成此模式后,应删除您创建的资源,以避免产生任何进一步的费用。若要进行清理,请运行以下命令:

cdk destroy
DevOps 工程师

相关资源