使用 AWS Fargate 大规模运行消息驱动型工作负载 - AWS Prescriptive Guidance

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

使用 AWS Fargate 大规模运行消息驱动型工作负载

创建者:Stan Zubarev(AWS)

环境:PoC 或试点

技术:容器和微服务;消息和通信;数据库

Amazon Web Services:AWS Fargate;Amazon SQS;Amazon DynamoDB

Summary

此模式展示了如何使用容器和 AWS Fargate 在 Amazon Web Services Cloud 中大规模运行消息驱动型工作负载。

当应用程序处理的数据量超过基于函数的无服务器计算服务的限制时,使用容器来处理数据可能会有所帮助。例如,如果应用程序需要的计算容量或处理时间超过 AWS Lambda 提供的容量或处理时间,则使用 Fargate 可以提高性能。

以下示例设置使用中的 AWS 云开发套件 (AWS CDK) 在 TypeScript AWS 云中配置和部署以下资源:

  • Fargate 服务

  • Amazon Simple Queue Service(Amazon SQS)队列

  • Amazon DynamoDB 表。

  • 亚马逊 CloudWatch 控制面板

Fargate 服务接收和处理来自 Amazon SQS 队列的消息,然后将其存储在 Amazon DynamoDB 表中。您可以使用控制面板监控 Fargate 处理了多少 Amazon SQS 消息以及 Fargate 创建了多少 DynamoDB 项目。 CloudWatch

注意:您还可以使用此模式的示例代码在事件驱动型无服务器架构中构建更复杂的数据处理工作负载。有关更多信息,请参阅使用 AWS Fargate 大规模运行事件驱动型和计划性工作负载

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • AWS 命令行界面(AWS CLI)的最新版本,已在本地计算机上安装并配置

  • Git,已在本地计算机上安装并配置

  • AWS CDK,已在本地计算机上安装并配置

  • Go,已在本地计算机上安装并配置

  • Docker,已在本地计算机上安装并配置

架构

目标技术堆栈

  • Amazon SQS

  • AWS Fargate

  • Amazon DynamoDB

目标架构

下图显示了使用 Fargate 在 Amazon Web Services Cloud 中大规模运行消息驱动型工作负载的示例工作流程:

消息驱动型工作负载的工作流程示例

图表显示了以下工作流:

  1. Fargate 服务使用 Amazon SQS 长轮询来接收来自某个 Amazon SQS 队列的消息。

  2. 然后,Fargate 服务会处理 Amazon SQS 消息并将其存储在 DynamoDB 表中。

自动化和扩缩

要自动扩缩 Fargate 任务数量,您可以配置 Amazon Elastic Container Service(Amazon ECS)服务自动扩缩。最佳做法是根据应用程序的 Amazon SQS 队列中可见消息的数量来配置扩展策略。

有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的基于 Amazon SQS 的扩展

工具

Amazon Web Services

  • AWS Fargate 可帮助您运行容器,无需管理服务器或 Amazon Elastic Compute Cloud(Amazon EC2)实例。它与 Amazon Elastic Container Service(Amazon ECS)配合使用。

  • Amazon Simple Queue Service (Amazon SQS) 提供了一个安全、持久且可用的托管队列,它可帮助您集成和分离分布式软件系统与组件。

  • Amazon DynamoDB 是一项完全托管的 NoSQL 数据库服务,可提供快速、可预测和可扩展的性能。

  • Amazon CloudWatch 可帮助您实时监控您的 AWS 资源和在 AWS 上运行的应用程序的指标。

代码

此模式的代码可在 GitHub sqs-fargate-ddb-cdk-go 存储库中找到

操作说明

任务描述所需技能

克隆 GitHub 存储库。

通过运行以下命令将 GitHub sqs-fargate-ddb-cdk-go 存储库克隆到本地计算机:

git clone https://github.com/aws-samples/sqs-fargate-ddb-cdk-go.git

应用程序开发人员

验证 AWS CLI 是否配置为正确的 Amazon Web Services account,以及 AWS CDK 是否具有所需权限。

要检查您的 AWS CLI 配置设置是否正确,您可以运行以下 Amazon Simple Storage Service(Amazon S3)的 ls 命令:

aws s3 ls

此过程还要求 AWS CDK 拥有在 Amazon Web Services account 中预调配基础设施的权限。要授予所需权限,您必须在 AWS CLI 中创建命名的 AWS 配置文件并将其导出为 AWS_PROFILE 环境变量。

注意:如果您之前未在 Amazon Web Services account 中使用过 AWS CDK,则必须先预调配所需 AWS CDK 资源。有关更多信息,请参阅 AWS CDK v2 开发人员指南中的引导

应用程序开发人员

将 AWS CDK 堆栈部署到您的 Amazon Web Services account。

  1. 通过运行以下 AWS CLI 命令来构建容器镜像:

    docker build -t go-fargate .

  2. 通过运行以下命令打开 AWS CDK 目录:

    cd cdk

  3. 通过运行以下命令,安装所需 npm 模块:

    npm i

  4. 通过运行以下命令将 AWS CDK 模式部署到 Amazon Web Services account :

    cdk deploy --profile ${AWS_PROFILE}

应用程序开发人员
任务描述所需技能

向 Amazon SQS 队列发送测试消息。

有关说明,请参阅 Amazon SQS 开发人员指南中的将消息发送到队列(控制台)

测试 Amazon SQS 消息示例

{ "message": "hello, Fargate" }
应用程序开发人员

验证测试消息是否显示在 Fargate 服务的日志中。 CloudWatch

按照《Amazon ECS 开发人员指南》中查看 CloudWatch 日志中的说明进行操作。请务必查看 go-service-clusterECS 集群中go-fargate-service日志组的日志。

应用程序开发人员

验证测试消息是否显示在 DynamoDB 表中。

  1. 打开 DynamoDB 控制台

  2. 在左侧导航窗格中,选择 表。然后,从列表中选择下表:sqs-fargate-ddb-table

  3. 选择 Explore table items(浏览表项目)。

  4. 确认测试消息显示在已返回的项目列表中。

应用程序开发人员

验证 Fargate 服务是否正在向日志发送消息。 CloudWatch

  1. 打开CloudWatch 控制台

  2. 在左侧导航窗格中,选择控制面板

  3. 在 “自定义仪表板” 列表中,选择名为的仪表板go-service-dashboard

  4. 验证测试消息是否显示在日志中。

注意:AWS CDK 会在您的 AWS 账户中自动创建 CloudWatch 控制面板。

应用程序开发人员
任务描述所需技能

删除 AWS CDK 堆栈。

  1. 通过运行以下命令打开 AWS CLI 中的 AWS CDK 目录:

    cd cdk

  2. 通过运行以下命令删除 AWS CDK 堆栈:

    cdk destroy --profile ${AWS_PROFILE}

应用程序开发人员

验证 AWS CDK 堆栈是否已删除。

要确保堆栈已删除,请运行以下命令:

aws cloudformation list-stacks --query \ "StackSummaries[?contains(StackName,'SqsFargate')].StackStatus" \ --profile ${AWS_PROFILE}

如果堆栈已删除,则命令输出中返回的 StackStatus 值为 DELETE_COMPLETE

有关更多信息,请参阅 AWS CloudFormation 用户指南中的描述和列出您的堆栈

应用程序开发人员

相关资源