使用 AWS Fargate WaitCondition 挂钩结构协调资源依赖关系和任务执行 - AWS Prescriptive Guidance

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

使用 AWS Fargate WaitCondition 挂钩结构协调资源依赖关系和任务执行

由 Stan Fan 创作 (AWS)

摘要

此模式描述了 WaitCondition hook (waitcondition-hook-for-aws-fargate-task) npm 包,这是一种云原生解决方案,专为在亚马逊弹性容器服务 (Amazon) 集群AWS Fargate中编排任务而设计。ECS

WaitCondition 钩子是专门为与集成而量身定制的 AWS Cloud Development Kit (AWS CDK) 结构 AWS CloudFormation。该 WaitCondition 挂钩提供以下关键功能:

  • 充当等待条件机制,暂停 CloudFormation 堆栈执行直到指定的 Fargate 任务完成,这有助于有序部署和资源配置。

  • 支持 TypeScript 和 Python,使其成为 AWS CDK 项目的理想之选。

  • 允许开发人员和架构师通过协调容器化应用程序的任务完成和资源管理来协调部署。 AWS

  • 允许在 CloudFormation 生命周期中嵌入一个或多个容器的情况下运行 Fargate 任务。并且可以处理任务失败并在任务失败后回滚 CloudFormation 堆栈。

  • 允许灵活地在资源和 Fargate 任务执行结果之间添加依赖关系,从而启用自定义任务或调用其他端点。例如,您可以暂停 CloudFormation 堆栈并等待数据库迁移(由 Fargate 任务完成),然后配置其他可能取决于数据库迁移成功与否的资源。

先决条件和限制

先决条件

  • 活跃 AWS 账户的.

  • AWS Cloud Development Kit (AWS CDK) 命令行界面 (CLI) 安装在本地工作站上。有关更多信息,请参阅 AWS CDK 文档中的AWS CDK CLI参考资料。

  • 节点包管理器 (npm),安装在本地工作站上并配置为AWS CDK 中。 TypeScript有关更多信息,请参阅 npm 文档中的下载和安装 Node.js 和 npm

  • Yarn 安装在本地工作站上。有关更多信息,请参阅 Yarn 文档中的安装

限制

  • 此解决方案已部署到单个 AWS 账户。

  • 容器的预期返回码是成功0的。任何其他返回代码都表示失败, CloudFormation 堆栈将回滚。

  • 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅AWS 服务 按地区划分。有关特定终端节点,请参阅服务终端节点和配额,然后选择服务的链接。

架构

下图显示了构造架构。

AWS-f waitcondition-hook-for-aws argate-task 构造的 Step Functions 工作流程。

该图显示了以下工作流程waitcondition-hook-for-aws-fargate-task

  1. WaitConditionWaitConditionHandler被设置为监听 AWS Lambda 函数的响应。

  2. 根据任务的结果,要么由 Fargate 任务的完成触发。CallbackFunction ErrorHandlerFunction

  3. Lambda 函数向发送SUCCEED或FAILURE信号。WaitConditionHandler

  4. WaitConditionHandler如果 Fargate 任务的执行结果成功,则继续配置资源;如果任务失败,则回滚堆栈。

下图显示了执行数据库迁移的工作流程示例。

使用 WaitCondition 钩子构造迁移 Amazon RDS 数据库的工作流程。

示例工作流使用该waitcondition-hook-for-aws-fargate-task结构执行数据库迁移,如下所示:

  1. 已配置亚马逊关系数据库服务 (AmazonRDS) 实例。

  2. waitcondition-hook-for-aws-fargate-task构造运行数据库迁移任务,并将堆栈作为亚马逊弹性计算云 (AmazonEC2) 实例暂停。

  3. 如果迁移任务成功完成,则会向发送成功信号 CloudFormation。否则,它会向堆栈发送 Fail 信号,然后回滚堆栈。 CloudFormation

工具

AWS 服务

  • AWS Cloud Development Kit (AWS CDK)是一个软件开发框架,可帮助您在代码中定义云基础架构并通过它进行配置 AWS CloudFormation。

  • AWS CloudFormation帮助您设置 AWS 资源,快速一致地配置资源,并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。

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

  • Amazon 弹性容器服务 (AmazonECS) 是一项快速且可扩展的容器管理服务,可帮助您在集群上运行、停止和管理容器。

  • AWS Fargate无需管理服务器或 Amazon EC2 实例,即可帮助您运行容器。它与 Amazon 配合使用ECS。

  • AWS Identity and Access Management (IAM) 通过控制谁经过身份验证并有权使用 AWS 资源,从而帮助您安全地管理对资源的访问权限。

  • AWS Lambda 是一项计算服务,可帮助您运行代码,无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。

  • AWS Step Functions是一项无服务器编排服务,可帮助您组合 AWS Lambda 功能和其他功能 AWS 服务 来构建关键业务应用程序。

  • Amazon Virtual Private Cloud(亚马逊VPC)可帮助您将 AWS 资源启动到您定义的虚拟网络中。此虚拟网络类似于您在自己的数据中心中运行的传统网络,其优点是使用的可扩展基础架构。 AWS

其他工具

  • npm 是在 Node.js 环境中运行的软件注册表,用于共享或借用软件包以及管理私有软件包的部署。

  • Yarn 是一个开源包管理器,你可以用它来管理 JavaScript 项目中的依赖关系。Yarn 可以帮助您安装、更新、配置和删除软件包依赖关系。

代码存储库

此模式的代码可在 GitHub waitcondition-hook-for-aws-fargate- task 存储库中找到。

最佳实践

操作说明

任务描述所需技能

安装 AWS CDK。

要 AWS CDK 在本地计算机或其他环境中安装,请运行以下命令:

npm install -g aws-cdk@latest
云架构师、应用程序开发人员

Bootstrap 的。 AWS CDK

引导是为部署准备环境的过程。要为目标引导 AWS CDK 工具包 AWS 账户 AWS 区域,请运行以下命令:

cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1

此命令创建一个名为的 CloudFormation 堆栈CDKToolkit

云架构师
任务描述所需技能

创建CDK项目。

使用您喜欢的语言创建CDK项目。此模式使用 TypeScript. 要使用创建CDK项目 TypeScript,请运行以下命令:

cdk init app —language typescript

云架构师

安装 软件包。

npm install在CDK项目的根路径上执行。安装CDK库后,运行以下命令进行安装waitcondition-hook-for-aws-fargate-task

yarn add waitcondition-hook-for-aws-fargate-task

云架构师

构建您的CDK应用程序和 Amazon ECS 组件。

构建您的CDK项目。Amazon ECS 任务定义资源是必需的。有关创建任务定义的信息,请参阅亚马逊ECS文档中的亚马逊ECS任务定义

以下示例使用此构造:

import * as cdk from 'aws-cdk-lib'; import { Vpc } from 'aws-cdk-lib/aws-ec2'; import * as ecr from 'aws-cdk-lib/aws-ecr'; import * as ecs from 'aws-cdk-lib/aws-ecs'; import { Construct } from 'constructs'; import { FargateRunner } from 'waitcondition-hook-for-aws-fargate-task'; import { Queue } from 'aws-cdk-lib/aws-sqs'; export class FargateRunnerStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Define the VPC const vpc = new Vpc(this, 'MyVpc') // Define the Fargate Task const taskDefinition = new ecs.FargateTaskDefinition(this, 'MyTask', {}); // Import exiting ecr repo const repo = ecr.Repository.fromRepositoryName(this, 'MyRepo', 'RepoName'); // Add a container to the task taskDefinition.addContainer('MyContainer', { image: ecs.ContainerImage.fromEcrRepository(repo), }); // Create the Fargate runner const myFargateRunner = new FargateRunner(this, 'MyRunner', { fargateTaskDef: taskDefinition, timeout: `${60 * 5}`, vpc: vpc, }); // Create the SQS queue const myQueue = new Queue(this, 'MyQueue', {}); // Add dependency myQueue.node.addDependency(myFargateRunner); } }
云架构师

合成并启动CDK应用程序。

  1. 要生成资源和 CloudFormation 模板,请在CDK根路径中运行以下命令:

    cdk synth

  2. synth命令成功后,运行以下命令部署资源:

    cdk deploy

waitcondition-hook-for-aws-fargate-task构造运行 Fargate 任务。

云架构师
任务描述所需技能

清理资源。

要清理上一步中配置的资源,请运行以下命令:

cdk destroy
云架构师

故障排除

事务解决方案

一般 CloudFormation 堆栈故障

要帮助排除一般 CloudFormation 堆栈故障,请添加--no-rollback标志,如以下示例所示:

cdk deploy --no-rollback

此命令将暂停 CloudFormation 堆栈回滚,从而为您提供故障排除资源。有关更多信息,请参阅 AWS CloudFormation 文档中的选择配置资源时如何处理故障

AWS Step Functions 失败

AWS Step Functions 状态机可能由于不同的原因而无法执行。—disable-rollback配置完成后,使用以下步骤进行故障排除:

  1. 登录 AWS Management Console,在 “搜索” 字段中输入 Step Fun ctions,然后选择 Step Functions 服务。

  2. 在左侧导航窗格中,选择状态机,然后选择由堆 CloudFormation 栈置备的状态机。

  3. 执行中,选择意外失败的执行的名称。

  4. 事件视图中,选择失败的步骤。

有关更多信息,请参阅 AWS Step Functions 文档中的 Step F unctions 中的问题疑难解答在 Step Functions 控制台中查看执行详情

AWS Lambda 功能失败

此构造预置了两个 Lambda 函数:CallbackFunction和。ErrorhandlerFunction它们可能由于各种原因而失败,例如未处理的异常。使用以下步骤进行故障排除:

  1. 登录 AWS Management Console,在 “搜索” 字段CloudWatch中输入,然后选择 CloudWatch 服务。

  2. 在左侧导航窗格中,选择日志组

  3. 搜索字段中,输入 Lambda 函数的名称。

  4. 选择与 Lambda 函数关联的日志组名称。

  5. 要查看 Lambda 函数的执行结果,请选择最新的日志流。

有关更多信息,请参阅文档中的 Lambda 问题疑难解答。 AWS Lambda

相关资源

AWS 文档

其他资源