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 部署框架 — 此框架 AWS 账户 根据 ADDF 部署清单文件中定义的编排将 ADDF 模块部署到 ADDF 目标中。ADDF 部署框架是通过使用以下 AWS 开源项目实现的:

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

    • CodeSeeder(GitHub) — 通过 AWS CodeBuild 作业 CodeSeeder 部署任意基础架构作为代码包。 SeedFarmer自动编排和运行。 CodeSeeder只能与 SeedFarmer CodeSeeder直接互动。

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

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

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

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

ADDF 架构

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

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

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

    1. 工具链账户和每个目标账户 AWS CDK 中的Bootstrap。有关说明,请参阅 Bootstrapping(AWS CDK 文档)。ADDF 使用 AWS CDK 来部署其基础架构。

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

    注意

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

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

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

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

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

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

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

    • 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 元数据,则将 ADDF 部署清单文件及其内容与目标账户中现有已部署项目的 MD5 哈希值进行 SeedFarmer 比较。如果检测到可部署的更改,该过程将继续。如果未检测到可部署的更改,该过程将结束。

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

    CodeSeeder 根据 ADDF 部署清单文件和上一步的评估结果,现在有待运行的部署的有序列表。根据该排序列表,在每个关联 CodeSeeder 的目标账户中担任 ADDF 部署 IAM 角色。然后,它 CodeSeeder 在 AWS CodeBuild 作业中运行,为 ADDF 模块创建或更新各个 IaC 部署(例如 AWS CDK 应用程序)。默认情况下,ADDF 使用 AWS CDK 作为其 IaC 框架,但也支持其他常见的 IaC 框架。完成每个目标账户的流程后,您将拥有一个完全部署、 end-to-end基于 ADS 的跨账户、工作流程,如您在 ADDF 部署清单文件中所定义。

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

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

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

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