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

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

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

由 Stan Zubarev 创作 () AWS

摘要

此模式展示了如何使用容器和 Far AWS gate 在AWS云中大规模运行消息驱动型工作负载。

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

以下示例设置使用中的 AWSCloud Development Kit (AWSCDK) 在 TypeScriptAWS云中配置和部署以下资源:

  • Fargate 服务

  • 亚马逊简单队列服务 (AmazonSQS) 队列

  • Amazon DynamoDB 表。

  • 亚马逊 CloudWatch 控制面板

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

注意

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

先决条件和限制

先决条件

  • 一个活跃的AWS账户

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

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

  • AWSCDK,已在您的本地计算机上安装和配置

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

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

架构

目标技术堆栈

  • Amazon SQS

  • AWS Fargate

  • Amazon DynamoDB

目标架构

下图显示了使用 Fargate 在AWS云端大规模运行消息驱动型工作负载的工作流程示例:

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

图表显示了以下工作流:

  1. Fargate 服务使用亚马逊SQS长轮询来接收来自亚马逊SQS队列的消息。

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

自动化和扩缩

要自动扩展 Fargate 任务数量,您可以配置亚马逊弹性容器服务 (亚马逊ECS) 服务 Auto Scaling。最佳做法是根据应用程序的 Amazon SQS 队列中可见消息的数量来配置扩展策略。

有关更多信息,请参阅 Amazon A EC2 uto Scaling 用户指南SQS中的基于亚马逊进行扩展

工具

AWS 服务

  • AWSFargate 可帮助您运行容器,而无需管理服务器或亚马逊弹性计算云 (AmazonEC2) 实例。它与亚马逊弹性容器服务 (AmazonECS) 配合使用。

  • Amazon Simple Queue Service (AmazonSQS) 提供安全、耐用且可用的托管队列,可帮助您集成和分离分布式软件系统和组件。

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

  • 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

应用程序开发人员

确认已将配置AWSCLI为正确的AWS帐户,并且AWSCDK具有所需的权限。

要检查您的AWSCLI配置设置是否正确,您可以运行以下亚马逊简单存储服务 (Amazon S3) ls 命令:

aws s3 ls

此过程还要求拥有AWSCDK在您的AWS账户中配置基础设施的权限。要授予所需权限,您必须在中创建命名的AWS配置文件AWSCLI并将其导出为AWS_PROFILE环境变量。

注意

如果您之前未AWSCDK在AWS账户中使用过,则必须先配置所需的AWSCDK资源。有关更多信息,请参阅 AWSCDKv2 开发者指南中的引导

应用程序开发人员

将AWSCDK堆栈部署到您的AWS账户。

  1. 通过运行以下AWSCLI命令生成容器镜像:

    docker build -t go-fargate .

  2. 通过运行以下命令打开该AWSCDK目录:

    cd cdk

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

    npm i

  4. 通过运行以下命令将AWSCDK模式部署到您的AWS账户:

    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账户中自动AWSCDK创建 CloudWatch 控制面板。

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

删除AWSCDK堆栈。

  1. AWSCLI通过运行以下命令在中打开您的AWSCDK目录:

    cd cdk

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

    cdk destroy --profile ${AWS_PROFILE}

应用程序开发人员

确认AWSCDK堆栈已删除。

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

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

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

有关更多信息,请参阅AWS CloudFormation 用户指南》 PowerShell中的 AWS CLI 和 CloudFormation 堆栈操作命令示例

应用程序开发人员

相关资源