AWS Proton 组件 - AWS Proton

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

AWS Proton 组件

组件是一种类型的 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 服务模板版本属性将组件附加到服务实例。默认情况下,开发人员无法将组件附加到服务实例。

    有关该属性的更多信息,请参阅 AWS Proton API Reference 中的 CreateServiceTemplateVersion API 操作的 supportedComponentSources 参数。

    注意

    在您使用模板同步时,在您提交对存储库中的服务模板捆绑包的更改时,AWS Proton 隐式创建服务模板版本。在这种情况下,您无需在服务模板版本创建期间指定支持的组件源,而是在与每个服务模板主要版本关联的文件中指定该属性。有关更多信息,请参阅同步服务模板

  • 组件角色 - 管理员可以为环境分配组件角色。在环境中预置由直接定义的组件定义的基础设施时,AWS Proton 担任该角色。因此,组件角色缩小了开发人员可以使用直接定义的组件在环境中添加的基础设施范围。在没有组件角色的情况下,开发人员无法在环境中创建直接定义的组件。

    有关分配组件角色的更多信息,请参阅 AWS Proton API Reference 中的 CreateEnvironment API 操作的 componentRoleArn 参数。

    注意

    不会在自托管式预置环境中使用组件角色。

组件与其他 AWS Proton 资源相比有什么区别?

在很多方面,组件与其他 AWS Proton 资源相似。它们的基础设施是在 IaC 模板文件中定义的,并且是以 AWS CloudFormation YAML 或 Terraform HCL 格式编写的。AWS Proton 可以使用 AWS 托管式预置自托管式预置以预置组件基础设施。

不过,组件在以下几个方面与其他 AWS Proton 资源不同:

  • 已分离状态 - 组件旨在附加到服务实例并扩展其基础设施,但也可以处于已分离 状态,即,它们不附加到任何服务实例。有关组件状态的更多信息,请参阅组件状态

  • 没有架构 - 组件不像模板捆绑包那样具有关联的架构。组件输入是由服务定义的。在组件附加到服务实例时,它可以使用输入。

  • 没有客户托管组件 - AWS Proton 始终为您预置组件基础设施。没有自带资源 的组件版本。有关客户托管环境的更多信息,请参阅创建环境

  • 没有模板资源 - 直接定义的组件没有类似于环境和服务模板的关联模板资源。您直接向组件提供 IaC 模板文件。同样,您可以直接提供一个清单,以定义用于预置组件基础设施的模板语言和渲染引擎。您可以采用与编写模板捆绑包类似的方式编写模板文件和清单。不过,对于直接定义的组件,不要求将 IaC 文件作为捆绑包存储在特定位置,并且您不会在 AWS Proton 中通过 IaC 文件创建模板资源。

  • 没有基于 CodeBuild 的预置 - 您无法使用自己的自定义预置脚本(称为基于 CodeBuild 的预置)预置直接定义的组件。有关更多信息,请参阅CodeBuild 预置的工作方式

AWS Proton 控制台中的组件

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

以下控制台页面与组件相关。我们包含指向顶级控制台页面的直接链接。

  • 组件 - 查看您的 AWS 账户中的组件列表。您可以创建新的组件,以及更新或删除现有的组件。可以在列表中选择一个组件名称以查看其详细信息页面。

    环境详细信息服务实例详细信息页面上也包含类似的列表。这些列表仅显示与查看的资源关联的组件。在您从其中的一个列表中创建组件时,AWS Proton 在创建组件页面上预选择关联的环境。

  • 组件详细信息 - 要查看组件详细信息页面,请在组件列表中选择一个组件名称。

    在详细信息页面上,查看组件详细信息和状态以及更新或删除组件。查看和管理输出列表(例如,预置的资源 ARN)、预置的 AWS CloudFormation 堆栈和分配的标签。

  • 创建组件 - 创建组件。输入组件名称和描述,选择关联的资源,指定组件源 IaC 文件并分配标签。

  • 更新组件 - 要更新组件,请在组件列表中选择该组件,然后在操作菜单上选择更新组件。或者,在组件详细信息页面上,选择更新

    您可以更新大多数组件的详细信息。您无法更新组件名称。您可以选择在成功更新后是否重新部署组件。

  • 配置环境 - 在创建或更新环境时,您可以指定组件角色。该角色控制能否在环境中运行直接定义的组件,并提供预置这些组件的权限。

  • 创建新的服务模板版本 - 在创建服务模板版本时,您可以为该模板版本指定支持的组件源。这会控制是否能够将组件附加到基于该模板版本的服务的服务实例。

AWS Proton API 和 AWS CLI 中的组件

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

以下 API 操作直接管理 AWS Proton 组件资源。

其他 AWS Proton 资源的以下 API 操作具有一些与组件相关的功能。

  • CreateEnvironmentUpdateEnvironment - 使用 componentRoleArn 指定 AWS Proton 在该环境中预置直接定义的组件时使用的 IAM 服务角色的 Amazon 资源名称 (ARN)。它决定了直接定义的组件可以预置的基础设施范围。

  • CreateServiceTemplateVersion - 使用 supportedComponentSources 指定支持的组件源。具有支持的源的组件可以附加到基于该服务模板版本的服务实例。

组件常见问题

组件的生命周期是怎样的?

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

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

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

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

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

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

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

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

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