ADDF 架构和术语 - AWS 规范性指导

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

ADDF 架构和术语

在理解本指南中的安全和操作主题之前,务必先对自动驾驶数据框架(ADDF)的术语、组件和架构有一个深入的了解。本节包含以下主题:

ADDF 术语

ADDF 的主要术语如下所示:

  • ADDF 模块 - 模块是指在高级驾驶辅助系统(ADAS)中实现常见任务的基础设施即代码(IaC)。常见任务包括配置集中式数据存储、数据处理管道、可视化机制、搜索界面、模拟工作负载、分析界面和预构建的控制面板。您可以根据自己的需求创建模块,也可以重复使用或自定义现有模块。

    您可以使用 AWS Cloud Development Kit (AWS CDK) 定义 ADDF 模块,也可以使用任何常见的 IaC 框架,比如 Hashicorp Terraform 或 AWS CloudFormation 来实现 ADDF 模块。一个模块有一组输入参数。输入参数可能取决于其他模块的输出值。ADDF 模块是 ADDF 目标 AWS 账户 最小的部署单元。

  • ADDF 部署清单文件 - 该文件定义了独立 ADDF 模块的编排。编排是指模块的部署顺序。在 ADDF 部署清单文件中,您可以使用 ADDF 群组将相关模块分组在一起。在此文件中,您还可以定义 ADDF 工具链 AWS 账户、ADDF 目标 AWS 账户 和目标 AWS 区域。

  • ADDF 部署框架 - 该框架根据 ADDF 部署清单文件中定义的编排将 ADDF 模块部署到 ADDF 目标 AWS 账户 中。ADDF 部署框架是使用以下 AWS 开源项目实现的:

    • SeedFarmer(GitHub)- SeedFarmer 是用于 ADDF 部署的 CLI 工具。它用来管理每个模块状态,准备和打包模块代码,为 ADDF 部署角色创建最低权限策略,并提供 CodeSeeder 用于部署的语义指令。您可以直接与 SeedFarmer 交互以运行 ADDF 部署,也可以将其集成到持续集成和持续部署(CI/CD)管道中。

    • CodeSeeder(GitHub)- CodeSeeder 通过 AWS CodeBuild 作业将任意基础设施部署为代码包。SeedFarmer 会自动编排和运行 CodeSeeder。只有 SeedFarmer 直接与 CodeSeeder 交互。

    ADDF 部署框架用来支持单账户和多账户架构中的部署。根据贵组织的需求,您可以决定需要单账户架构还是多账户架构。

  • ADDF 工具链 AWS 账户 - 该账户根据 ADDF 部署清单文件中的定义编排和管理模块到 ADDF 目标 AWS 账户 的部署。一个 ADDF 部署只能有一个 ADDF 工具链 AWS 账户。在单账户架构中,ADDF 工具链 AWS 账户 也是 ADDF 目标 AWS 账户。该账户包含一个 AWS Identity and Access Management(IAM)角色,称为 ADDF 工具链 IAM 角色,该角色由 SeedFarmer 在 ADDF 部署过程中承担。在本指南中,我们将 ADDF 工具链 AWS 账户 称为工具链账户

  • ADDF 目标 AWS 账户 - 这些是您在其中部署 ADDF 模块的目标账户。您可以拥有一个或多个目标账户。这些账户包含 ADDF 部署清单文件及其映射模块中描述的资源和应用程序逻辑。在单账户架构中,ADDF 目标 AWS 账户 也是 ADDF 工具链 AWS 账户。每个 ADDF 目标账户都包含一个 IAM 角色,称为 ADDF 部署 IAM 角色,该角色由 CodeSeeder 在部署过程中承担。在本指南中,我们将 ADDF 目标 AWS 账户 称为目标账户

  • ADDF 实例 - 当您在云中部署 ADDF 和模块时(如 ADDF 部署清单文件中所定义),它将成为 ADDF 实例。一个 ADDF 实例可以采用单账户或多账户架构,您可以部署多个 ADDF 实例。有关为您的用例选择实例数量和设计账户架构的更多信息,请参阅 定义您的 ADDF 架构

ADDF 架构

下图显示了 AWS Cloud 中 ADDF 实例的高级架构。它显示了一个多账户架构,包括一个专用工具链账户和两个目标账户。本指南讨论了使用 ADDF 将资源部署到目标账户的端到端流程。

ADDF 本地代码、部署清单文件以及具有工具链和目标账户的 AWS 架构。
  1. 创建并引导 ADDF AWS 账户。

    若要正常运行,必须将每个账户引导至 ADDF 和 AWS CDK。如果这是新的 ADDF 部署,或者您要添加新的目标账户,请执行以下操作:

    1. 在工具链账户和每个目标账户中引导 AWS CDK。有关说明,请参阅引导程序(AWS CDK 文档)。ADDF 使用 AWS CDK 来部署基础设施。

    2. 在工具链账户和每个目标账户中引导 ADDF。有关说明,请参阅 ADDF 部署指南中的引导 AWS 账户。这将设置 SeedFarmer 和 CodeSeeder 所需的所有特定于 ADDF 的 IAM 角色。

    注意

    只有在最初部署 ADDF 或添加新的目标账户时,才需要执行此步骤。该步骤不属于向已建立的 ADDF 实例重复部署 ADDF 的过程。

  2. 创建或自定义 ADDF 模块。

    根据您要解决的特定问题创建或自定义 ADDF 模块。您的模块应代表一个独立的任务或一组任务。根据需要定义模块的输入参数,并将模块输出值用作其他模块的输入参数。

  3. 在 ADDF 部署清单文件中定义模块编排。

    在 ADDF 清单文件中,将模块整理成组,并定义部署顺序和模块之间的依赖关系。在此文件中,您还可以为每个 ADDF 组及其模块指定单个工具链账户和目标账户(包括 AWS 区域)。

  4. 评估 ADDF 部署清单文件并确定部署范围。

    ADDF 开发人员或 CI/CD 管道(如 AWS CodePipeline)通过调用 CLI 工具 SeedFarmer 开始对 ADDF 部署清单文件进行评估。若要开始评估:

    • SeedFarmer 使用 ADDF 部署清单文件作为评估的输入参数。

    • 若要承担 ADDF 工具链 IAM 角色,SeedFarmer 需使用步骤 1 中在 ADDF 引导过程中定义的相同且有效的 IAM 角色或用户凭证。

    如果 SeedFarmer 没有正确的凭证来承担 ADDF 工具链 IAM 角色,或者无法访问 ADDF 部署清单文件,则评估不会开始。

    如果 SeedFarmer 可以开始评估,它将在工具链账户中承担 ADDF 工具链 IAM 角色。SeedFarmer 可以从那里访问任何目标账户,只需在该账户中承担 ADDF 部署 IAM 角色。然后,SeedFarmer 会尝试读取工具链账户和目标账户中的任何 ADDF 元数据。将出现以下情况之一:

    • 如果没有 ADDF 元数据可以读取,则表明这是一个新的 ADDF 实例。SeedFarmer 确定部署范围是整个 ADDF 部署清单文件及其内容。

    • 如果存在 ADDF 元数据,SeedFarmer 会将 ADDF 部署清单文件及其内容与目标账户中现有已部署构件的 MD5 哈希值进行比较。如果检测到可部署的更改,该过程将继续。如果未检测到可部署的更改,该过程将结束。

  5. 将范围内 ADDF 模块部署到目标账户。

    根据 ADDF 部署清单文件和上一步的评估结果,CodeSeeder 现在有一个有序的部署列表要运行。根据该有序列表,CodeSeeder 会在每个相关目标账户中承担 ADDF 部署 IAM 角色。然后,它在 AWS CodeBuild 作业中运行 CodeSeeder,为 ADDF 模块创建或更新单个 IaC 部署(如 AWS CDK 应用程序)。默认情况下,ADDF 将 AWS CDK 用作其 IaC 框架,但也支持其他常见的 IaC 框架。为每个目标账户完成此过程后,您将拥有一个完全部署的、跨账户的、基于 ADAS 的端到端工作流,正如您在 ADDF 部署清单文件中定义的那样。

    如果您使用单账户架构,则工具链账户和目标账户是同一个账户,并且一个账户具有上述所有功能。

  6. 使用 ADDF 部署的基础设施。

    ADAS 开发人员可以根据您的用例定义使用已部署的基于 ADAS 的工作流。

    该工作流描述了 ADDF 多账户环境的单个实例的架构。根据您的开发、部署和操作模型,我们建议您在多阶段环境中运行多个 ADDF 实例。典型设置可能包括专用的 ADDF 实例,其中包含专用于每个部署阶段的 AWS 账户,比如开发、测试和生产分支。您也可以在同一 AWS 区域 的相同单账户或多账户环境中运行多个 ADDF 实例,假设您为每个 ADDF 实例创建了唯一的资源命名空间。有关更多信息,请参阅 定义您的 ADDF 架构