

终止支持通知：2026 年 10 月 7 日， AWS 将终止对的支持。 AWS Proton 2026 年 10 月 7 日之后，您将无法再访问 AWS Proton 控制台或 AWS Proton 资源。您部署的基础架构将保持不变。有关更多信息，请参阅《[AWS Proton 服务弃用和迁移指南》](https://docs.aws.amazon.com/proton/latest/userguide/proton-end-of-support.html)。

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

# AWS Proton 组件
<a name="ag-components"></a>

组件是一种 AWS Proton 资源。它们提高了服务模板的灵活性。组件为平台团队提供了一种扩展核心基础设施模式的机制，并定义了保护措施，以使开发人员能够管理其应用程序基础设施的各个方面。

 AWS Proton 管理员定义跨开发团队和应用程序使用的标准基础架构。不过，开发团队可能需要为其特定使用案例添加额外的资源，例如 Amazon Simple Queue Service (Amazon SQS) 队列或 Amazon DynamoDB 表。这些应用程序特定的资源可能经常发生变化，特别是在早期应用程序开发阶段。由于需要在管理员编写的模板中处理这些经常发生的变化，因而可能难以管理和扩展 - 管理员需要维护更多的模板，而没有为管理员提供实际的附加价值。替代方案（让应用程序开发人员为其应用程序创作模板）也不理想，因为它剥夺了管理员标准化主要架构组件（例如任务）的能力。 AWS Fargate 这就是组件发挥作用的地方。

除了管理员在环境和服务模板中定义的资源以外，开发人员可以使用组件在其应用程序中添加补充资源。然后，开发人员将该组件附加到服务实例。 AWS Proton 配置由组件定义的基础架构资源，就像它为环境和服务实例配置资源一样。

组件可以读取服务实例输入，并向服务实例提供输出，从而提供完全集成的体验。例如，如果组件添加一个 Amazon Simple Storage Service (Amazon S3) 存储桶以供服务实例使用，则组件模板可以在命名该存储桶时考虑环境和服务实例名称。 AWS Proton 渲染服务模板以配置服务实例时，服务实例可以引用存储桶并使用它。

 AWS Proton 当前支持的组件是*直接定义的组件*。您可以将定义组件基础架构的基础设施即代码 (IaC) 文件直接传递给 AWS Proton API 或控制台。这与环境或服务不同，在环境或服务中，您在模板捆绑包中定义 IaC 并将该捆绑包注册为模板资源，然后使用模板资源创建环境或服务。

**注意**  
直接定义的组件允许开发人员定义额外的基础设施并对其进行配置。 AWS Proton 使用相同的 AWS Identity and Access Management (IAM) 角色配置在同一环境中运行的所有直接定义的组件。

管理员可以通过两种方式控制开发人员使用组件执行的操作：
+ *支持的组件来源*-管理员可以允许根据服务模板版本的属性将组件附加到 AWS Proton 服务实例。默认情况下，开发人员无法将组件附加到服务实例。

  有关此属性的更多信息，请参阅《[CreateServiceTemplateVersion](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateServiceTemplateVersion.html)API *参考》中的AWS Proton API* 操作[supportedComponentSources](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateServiceTemplateVersion.html#proton-CreateServiceTemplateVersion-request-supportedComponentSources)参数。
**注意**  
使用模板同步时，当您向存储库中的服务模板包提交更改时，会隐式 AWS Proton 创建服务模板版本。在这种情况下，您无需在服务模板版本创建期间指定支持的组件源，而是在与每个服务模板主要版本关联的文件中指定该属性。有关更多信息，请参阅 [同步服务模板](create-template-sync.md#create-template-sync-service-templates)。
+ *组件角色*-管理员可以为环境分配组件角色。 AWS Proton 当它提供由环境中直接定义的组件定义的基础架构时，它会承担此角色。因此，组件角色缩小了开发人员可以使用直接定义的组件在环境中添加的基础设施范围。在没有组件角色的情况下，开发人员无法在环境中创建直接定义的组件。

  有关分配组件角色的更多信息，请参阅《API *参考》中的 [CreateEnvironment](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateEnvironment.html)AWS Proton API* 操作[componentRoleArn](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateEnvironment.html#proton-CreateEnvironment-request-componentRoleArn)参数。
**注意**  
不会在[自托管式预置](ag-works-prov-methods.md#ag-works-prov-methods-self)环境中使用组件角色。

**Topics**
+ [组件与其他 AWS Proton 资源相比如何？](#ag-components.compare)
+ [AWS Proton 控制台中的组件](#ag-components.console)
+ [AWS Proton API 中的组件和 AWS CLI](#ag-components.api)
+ [组件常见问题](#ag-components.faq)
+ [组件状态](ag-components-states.md)
+ [组件基础设施即代码文件](ag-components-iac.md)
+ [组件 CloudFormation 示例](ag-components-example-cfn.md)

## 组件与其他 AWS Proton 资源相比如何？
<a name="ag-components.compare"></a>

在许多方面，组件与其他 AWS Proton 资源类似。他们的基础设施是在 [IaC 模板文件中定义的，该文件以](ag-components-iac.md) CloudFormation YAML 或 Terraform HCL 格式编写。 AWS Proton 可以使用[AWS托管配置或[自我管理](ag-works-prov-methods.md#ag-works-prov-methods-self)配置来配置](ag-works-prov-methods.md#ag-works-prov-methods-direct)组件基础架构。

但是，组件在几个方面与其他 AWS Proton 资源不同：
+ *已分离状态* - 组件旨在附加到服务实例并扩展其基础设施，但也可以处于*已分离* 状态，即，它们不附加到任何服务实例。有关组件状态的更多信息，请参阅[组件状态](ag-components-states.md)。
+ *没有架构* - 组件不像[模板捆绑包](ag-template-authoring.md#ag-template-bundles)那样具有关联的架构。组件输入是由服务定义的。在组件附加到服务实例时，它可以使用输入。
+ *没有由客户管理的组件* — AWS Proton 始终为您配置组件基础架构。没有*自带资源* 的组件版本。有关客户托管环境的更多信息，请参阅[创建环境](ag-create-env.md)。
+ *没有模板资源* - 直接定义的组件没有类似于环境和服务模板的关联模板资源。您直接向组件提供 IaC 模板文件。同样，您可以直接提供一个清单，以定义用于预置组件基础设施的模板语言和渲染引擎。您可以采用与编写[模板捆绑包](ag-template-authoring.md#ag-template-bundles)类似的方式编写模板文件和清单。但是，对于直接定义的组件，无需将 IaC 文件作为捆绑包存储在特定位置，也无需在 IaC 文件 AWS Proton 中创建模板资源。
+ *没有 CodeBuild基于基础的配置* — 您无法使用自己的自定义配置脚本（称为*CodeBuild基于*预配）来配置直接定义的组件。有关更多信息，请参阅 [CodeBuild 配置的工作原理](ag-works-prov-methods.md#ag-works-prov-methods-codebuild)。

## AWS Proton 控制台中的组件
<a name="ag-components.console"></a>

使用 AWS Proton 控制台创建、更新、查看和使用 AWS Proton 组件。

以下控制台页面与组件相关。我们包含指向顶级控制台页面的直接链接。
+ [组件](https://console.aws.amazon.com//proton/#/components)-查看您 AWS 账户中的组件列表。您可以创建新的组件，以及更新或删除现有的组件。可以在列表中选择一个组件名称以查看其详细信息页面。

  在**环境详细信息**和**服务实例详细信息**页面上也包含类似的列表。这些列表仅显示与查看的资源关联的组件。当您从其中一个列表中创建组件时，请在**创建组件**页面上 AWS Proton 预先选择关联的环境。
+ **组件详细信息** - 要查看组件详细信息页面，请在[组件](https://console.aws.amazon.com//proton/#/components)列表中选择一个组件名称。

  在详细信息页面上，查看组件详细信息和状态以及更新或删除组件。查看和管理输出（例如，已配置的资源 ARNs）、已置备 CloudFormation 堆栈和已分配标签的列表。
+ [创建组件](https://console.aws.amazon.com//proton/#/components/create) - 创建组件。输入组件名称和描述，选择关联的资源，指定组件源 IaC 文件并分配标签。
+ **更新组件** - 要更新组件，请在[组件](https://console.aws.amazon.com//proton/#/components)列表中选择该组件，然后在**操作**菜单上选择**更新组件**。或者，在**组件详细信息**页面上，选择**更新**。

  您可以更新大多数组件的详细信息。您无法更新组件名称。您可以选择在成功更新后是否重新部署组件。
+ **配置环境** - 在创建或更新环境时，您可以指定**组件角色**。该角色控制能否在环境中运行直接定义的组件，并提供预置这些组件的权限。
+ **创建新的服务模板版本** - 在创建服务模板版本时，您可以为该模板版本指定**支持的组件源**。这会控制是否能够将组件附加到基于该模板版本的服务的服务实例。

## AWS Proton API 中的组件和 AWS CLI
<a name="ag-components.api"></a>

使用 AWS Proton API 或创建、更新、查看和使用 AWS Proton 组件。 AWS CLI 

以下 API 操作直接管理 AWS Proton 组件资源。
+ [CreateComponent](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateComponent.html)— 创建组 AWS Proton 件。
+ [DeleteComponent](https://docs.aws.amazon.com/proton/latest/APIReference/API_DeleteComponent.html)— 删除组 AWS Proton 件。
+ [GetComponent](https://docs.aws.amazon.com/proton/latest/APIReference/API_GetComponent.html)— 获取组件的详细数据。
+ [ListComponentOutputs](https://docs.aws.amazon.com/proton/latest/APIReference/API_ListComponentOutputs.html)— 获取组件基础设施即代码 (IaC) 输出列表。
+ [ListComponentProvisionedResources](https://docs.aws.amazon.com/proton/latest/APIReference/API_ListComponentProvisionedResources.html)— 列出组件的已配置资源以及详细信息。
+ [ListComponents](https://docs.aws.amazon.com/proton/latest/APIReference/API_ListComponents.html)— 列出包含摘要数据的组件。您可以按环境、服务或单个服务实例筛选结果列表。

其他 AWS Proton 资源的以下 API 操作具有一些与组件相关的功能。
+ [CreateEnvironment](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateEnvironment.html)，[UpdateEnvironment](https://docs.aws.amazon.com/proton/latest/APIReference/API_UpdateEnvironment.html)— `componentRoleArn` 用于指定在此环境中配置直接定义的组件时 AWS Proton 使用的 IAM 服务角色的 Amazon 资源名称 (ARN)。它决定了直接定义的组件可以预置的基础设施范围。
+ [CreateServiceTemplateVersion](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateServiceTemplateVersion.html)— `supportedComponentSources` 用于指定支持的组件来源。具有支持的源的组件可以附加到基于该服务模板版本的服务实例。

## 组件常见问题
<a name="ag-components.faq"></a>

**组件的生命周期是怎样的？**

组件可以处于*已附加* 或*已分离* 状态。它们旨在附加到服务实例，并在大多数时候增强其基础设施。分离的组件处于过渡状态，您可以使用受控且安全的方式删除组件或将其附加到另一个服务实例。有关更多信息，请参阅 [组件状态](ag-components-states.md)。

**为什么我无法删除附加的组件？**

*解决方案：*要删除附加的组件，请更新该组件以将其与服务实例分离，验证服务实例稳定性，然后删除该组件。

*为什么需要这样做？* 附加的组件提供了额外的基础设施，您的应用程序在执行其运行时功能需要使用该基础设施。服务实例可以使用组件输出以检测和使用该基础设施的资源。如果删除组件并因而删除其基础设施资源，可能会影响附加的服务实例。

作为一项额外的安全措施， AWS Proton 要求您先更新组件并将其与其服务实例分离，然后才能将其删除。然后，您可以验证您的服务实例，以确保它继续部署并正常工作。如果检测到问题，您可以快速将组件重新附加到服务实例，然后着手解决该问题。如果您确信服务实例不存在对该组件的任何依赖性，则可以安全地删除该组件。

**为什么我不能直接更改组件附加的服务实例？**

*解决方案：*要更改附加的服务实例，请更新组件以将其与服务实例分离，验证组件和服务实例稳定性，然后将组件附加到新的服务实例。

*为什么需要这样做？* 组件旨在附加到服务实例。您的组件可以使用服务实例输入进行基础设施资源命名和配置。更改附加的服务实例可能会影响组件；还可能会影响服务实例，如前面的常见问题[为什么我无法删除附加的组件？](#ag-components.faq.delete)中所述）。例如，这可能会导致重命名组件的 IaC 模板中定义的资源，甚至可能替换这些资源。

作为一项额外的安全措施， AWS Proton 要求您先更新组件并将其与其服务实例分离，然后才能将其连接到其他服务实例。接下来，您可以验证组件和服务实例的稳定性，然后再将组件附加到新服务实例。