本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS Fargate WaitCondition 挂钩构造协调资源依赖关系和任务执行
Stan Fan,Amazon Web Services
Summary
此模式描述了 WaitCondition hook (waitcondition-hook-for-aws-fargate-task) npm 包,它是一种云原生解决方案,专为在亚马逊弹性容器服务 (Amazon ECS) 集群AWS Fargate中编排任务而设计。
WaitCondition 钩子是专门为与集成而量身定制的 AWS Cloud Development Kit (AWS CDK) 构造 AWS CloudFormation。该 WaitCondition 挂钩提供以下关键功能:
充当等待条件机制,在指定的 Fargate 任务完成之前暂停 CloudFormation 堆栈执行,这有助于有序部署和资源配置。
支持 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 服务
。有关特定端点,请参阅服务端点和配额,然后选择相应服务的链接。
架构
下图显示了此构造的架构。

下图显示了 waitcondition-hook-for-aws-fargate-task 的工作流:
WaitCondition并WaitConditionHandler被设置为监听来自 AWS Lambda 函数的响应。根据任务的结果,完成 Fargate 任务之后将会触发
CallbackFunction或ErrorHandlerFunction。Lambda 函数将向
WaitConditionHandler发送一个“成功”或“失败”信号。如果 Fargate 任务的执行结果成功,
WaitConditionHandler会继续预调配资源;如果任务失败,将回滚堆栈。
下图显示了一个用于执行数据库迁移的工作流的示例。

此示例工作流使用 waitcondition-hook-for-aws-fargate-task 构造来执行数据库迁移,如下所示:
预调配了一个 Amazon Relational Database Service(Amazon RDS)实例。
此
waitcondition-hook-for-aws-fargate-task构造运行数据库迁移任务,并将堆栈作为 Amazon Elastic Compute Cloud(Amazon EC2)实例暂停。如果迁移任务成功完成,则会向发送成功信号 CloudFormation。否则,它会向堆栈发送 Fail 信号,然后回滚堆栈。 CloudFormation
工具
AWS 服务
AWS Cloud Development Kit (AWS CDK)是一个软件开发框架,可帮助您在代码中定义云基础架构并通过它进行配置 CloudFormation。
CloudFormation帮助您设置 AWS 资源,快速一致地配置资源,并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。
Amazon CloudWatch 可帮助您实时监控您的 AWS 资源和运行的应用程序 AWS 的指标。
Amazon Elastic Container Service(Amazon ECS)是一项快速、可扩展的容器管理服务,可帮助您运行、停止和管理集群上的容器。
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的可扩展基础设施的优势。
其他工具
代码存储库
此模式的代码可在 GitHub waitcondition-hook-for-aws-fargate-
最佳实践
在构建 AWS CDK 应用程序时,请按照 AWS CDK v2 文档 AWS CDK中的开发和部署云基础架构的最佳实践进行操作。
对于此 AWS Fargate 任务,请按照 Amazon ECS 文档中的 Amazon ECS 容器映像最佳实践进行操作。
操作说明
| Task | 说明 | 所需技能 |
|---|---|---|
创建 CDK 项目。 | 使用您的首选语言创建一个 CDK 项目。此模式使用 TypeScript. 要使用创建 CDK 项目 TypeScript,请运行以下命令:
| 云架构师 |
安装软件包。 | 在 CDK 项目的根路径上,执行
| 云架构师 |
构建您的 CDK 应用程序和 Amazon ECS 组件。 | 构建您的 CDK 项目。需要一个 Amazon ECS 任务定义资源。有关如何创建任务定义的信息,请参阅 Amazon ECS 文档中的 Amazon ECS 任务定义。 如下示例将使用此构造:
| 云架构师 |
合成并启动 CDK 应用程序。 |
| 云架构师 |
| Task | 说明 | 所需技能 |
|---|---|---|
清理资源。 | 要清理上一步中预调配的资源,请运行如下命令:
| 云架构师 |
故障排除
| 问题 | 解决方案 |
|---|---|
一般 CloudFormation 堆栈故障 | 要帮助排除一般 CloudFormation 堆栈故障,请添加
此命令将暂停 CloudFormation 堆栈回滚,从而为您提供故障排除资源。有关更多信息,请参阅 CloudFormation 文档中的选择配置资源时如何处理故障。 |
AWS Step Functions 失败 | AWS Step Functions 状态机可能由于不同的原因而无法执行。配置
有关更多信息,请参阅 AWS Step Functions 文档中的 Step F unctions 中的问题疑难解答和在 Step Functions 控制台中查看执行详情。 |
AWS Lambda 功能失败 | 此构造将预调配两个 Lambda 函数:
有关更多信息,请参阅文档中的 Lambda 问题疑难解答。 AWS Lambda |
相关资源
AWS 文档
其他资源
AWS Fargate 任务的等待条件挂钩
(npm) waitcondition-hook-for-aws-fargate-task
1.0.6 (pypi.org)