

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

# ADDF 架构和术语
<a name="addf-architecture-terminology"></a>

在理解本指南中的安全和操作主题之前，务必先对自动驾驶数据框架（ADDF）的术语、组件和架构有一个深入的了解。本节包含以下主题：
+ [ADDF 术语](#addf-terminology)
+ [ADDF 架构](#addf-architecture)

## ADDF 术语
<a name="addf-terminology"></a>

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](https://github.com/awslabs/seed-farmer)(GitHub) — SeedFarmer 是用于 ADDF 部署的 CLI 工具。它管理每个模块的状态，准备和打包模块代码，为 ADDF 部署角色创建最低权限策略，并提供用于部署的语义指 CodeSeeder 令。您可以直接与交互 SeedFarmer 以运行 ADDF 部署，也可以将其集成到持续集成和持续部署 (CI/CD) 管道中。
  + [CodeSeeder](https://github.com/awslabs/aws-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 架构](secure-setup-and-operation.md#defining-your-addf-architecture)。

## ADDF 架构
<a name="addf-architecture"></a>

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



![添加本地代码、部署清单文件以及带有工具链和目标账户的 AWS 架构。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/addf-security-and-operations/images/addf-architecture-diagram.png)


1. **创建并引导 ADDF AWS 账户。**

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

   1. 工具链账户和每个目标账户 AWS CDK 中的Bootstrap。有关说明，请参阅 [Bootstrapping](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)（AWS CDK 文档）。ADDF 使用 AWS CDK 来部署其基础架构。

   1. 在工具链账户和每个目标账户中引导 ADDF。有关说明，请参阅《[ADDF 部署](https://github.com/awslabs/autonomous-driving-data-framework/blob/main/docs/deployment_guide.md)指南*》中的 Bootstrap AWS 账户*。这将设置 SeedFarmer 和所需的所有 ADDF-specific IAM 角色 CodeSeeder。
**注意**  
只有在最初部署 ADDF 或添加新的目标账户时，才需要执行此步骤。该步骤不属于向已建立的 ADDF 实例重复部署 ADDF 的过程。

1. **创建或自定义 ADDF 模块。**

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

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

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

1. **评估 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 比较。如果检测到可部署的更改，该过程将继续。如果未检测到可部署的更改，该过程将结束。

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

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

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

1. **使用 ADDF-deployed基础架构。**

   ADAS 开发人员可以使用由您的用例定义的已部署 ADAS-based 工作流程。

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