本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
外部引擎用于 AWS Service Catalog
在中 AWS Service Catalog,外部引擎通过EXTERNAL产品类型表示。该EXTERNAL产品类型允许集成第三方配置引擎,例如 Terraform。您可以使用外部引擎将 Service Catalog 的功能扩展到原生 AWS CloudFormation 模板之外,从而允许使用其他基础设施即代码 (IaC) 工具。
该EXTERNAL产品类型允许您使用熟悉的 Service Catalog 界面管理和部署资源,同时利用所选 IaC 工具的特定功能和语法。
要在 Service Catalog 中启用EXTERNAL产品类型,您必须在账户中定义一组标准资源。这些资源被称为引擎。Service Catalog 在工件解析和置备操作的特定时刻将任务委派给引擎。
配置工件代表 Service Catalog 中产品的特定版本,允许您管理和部署一致的资源。
当您为EXTERNAL产品类型的配置对象调用 AWS Service CatalogDescribeProvisioningArtifact或DescribeProvisioningParameters操作时,Service Catalog 会调用引擎中的一个 AWS Lambda 函数。这是从提供的置备工件中提取参数列表并将其返回到所必需的 AWS Service Catalog。这些参数稍后将作为配置过程的一部分使用。
当您通过调用EXTERNAL配置对象时 ProvisionProduct,Service Catalog 会首先在内部执行一些操作,然后向引擎中的 Amazon SQS 队列发送消息。接下来,引擎扮演提供的启动角色(您作为启动约束分配给产品的 IAM 角色),根据提供的配置项目配置资源,并调用 NotifyProvisionProductEngineWorkflowResultAPI 来报告成功或失败。
对UpdateProvisionedProduct和的呼叫处理方式类似,每个呼叫TerminateProvisionedProduct都有不同的队列和 Notify APIs:
注意事项
每个中心账户只能使用一个外部引擎
每个 Service Catalog 中心账户只能使用一个EXTERNAL配置引擎。Service Catalog hub-and-spoke模型允许中心账户创建基准产品并共享产品组合,而分支账户则可以导入产品组合并利用产品。
此限制是因为EXTERNAL只能路由到一个账户中的一个引擎。如果管理员想要拥有多个外部引擎,则管理员必须在不同的中心帐户中设置外部引擎(以及产品组合和产品)。
外部引擎仅支持有启动限制的启动角色
EXTERNAL配置对象仅支持使用启动限制指定的启动角色进行置备。启动约束指定 Service Catalog 在最终用户启动、更新或终止产品时所扮演的 IAM 角色。有关启动限制的更多信息,请参阅AWS Service Catalog 启动限制。
参数解析
EXTERNAL配置对象可以是任何格式。这意味着,在创建EXTERNAL产品类型时,引擎需要从提供的置备工件中提取参数列表并将其返回到 Service Catalog。这是通过在您的账户中创建一个 Lambda 函数来完成的,该函数可以接受以下请求格式、处理配置项目并返回以下响应格式。
重要
必须为 Lambda 函数命名。ServiceCatalogExternalParameterParser
请求语法:
{ "artifact": { "path": "string", "type": "string" }, "launchRoleArn": "string" }
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
| 项目 | 对象 | 是 | 要解析的工件的详细信息。 |
| 工件/路径 | 字符串 | 是 | 解析器下载工件的位置。例如,对于AWS_S3,这是亚马逊 S3 的 URI。 |
| 工件/类型 | 字符串 | 是 | 神器类型。允许的值:AWS_S3。 |
| LaunchRole | 字符串 | 否 | 下载项目时要扮演的启动角色的 Amazon 资源名称 (ARN)。如果未提供启动角色,则使用 Lambda 的执行角色。 |
响应语法:
{ "parameters": [ { "key": "string" "defaultValue": "string", "type": "string", "description": "string", "isNoEcho": boolean }, ] }
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
| 参数 | 列表 | 是 | Service Catalog 要求最终用户在置备产品或更新预配置产品时提供的参数列表。如果在构件中未定义任何参数,则返回一个空列表。 |
| 键 | 字符串 | 是 | 参数键。 |
| defaultValue | 字符串 | 否 | 如果最终用户未提供值,则为参数的默认值。 |
| type | 字符串 | 是 | 引擎参数值的预期类型。例如,字符串、布尔值或映射。允许的值因每个引擎而异。Service Catalog 将每个参数值作为字符串传递给引擎。 |
| description | 字符串 | 否 | 参数的描述。建议将其设置为用户友好型。 |
| isNoEcho | 布尔值 | 否 | 确定参数值是否未在日志中回显。默认值为 false(参数值会被回显)。 |
预置
对于该ProvisionProduct操作,Service Catalog 将资源的实际配置委托给引擎。该引擎负责与您选择的 IaC 解决方案(例如 Terraform)接口,以配置工件中定义的资源。引擎还负责将结果通知 Service Catalog。
Service Catalog 会将所有配置请求发送到您的账户中名为的 Amazon SQS 队列。ServiceCatalogExternalProvisionOperationQueue
请求语法:
{ "token": "string", "operation": "string", "provisionedProductId": "string", "provisionedProductName": "string", "productId": "string", "provisioningArtifactId": "string", "recordId": "string", "launchRoleArn": "string", "artifact": { "path": "string", "type": "string" }, "identity": { "principal": "string", "awsAccountId": "string", "organizationId": "string" }, "parameters": [ { "key": "string", "value": "string" } ], "tags": [ { "key": "string", "value": "string" } ] }
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
| token | 字符串 | 是 | 标识此操作的标记。必须将令牌返回到 Service Catalog 才能通知执行结果。 |
| operation | 字符串 | 是 | 此字段必须PROVISION_PRODUCT用于此操作。 |
| provisionedProductId | 字符串 | 是 | 预配置产品的 ID。 |
| provisionedProductName | 字符串 | 是 | 预配置产品的名称。 |
| 产品编号 | 字符串 | 是 | 产品的 ID。 |
| provisioningArtifactId | 字符串 | 是 | 置备工件的 ID。 |
| recordId | 字符串 | 是 | 此操作的 Service Catalog 记录的 ID。 |
| launchRoleArn | 字符串 | 是 | 用于配置资源的 IAM 角色的亚马逊资源名称 (ARN)。 |
| 项目 | 对象 | 是 | 定义资源配置方式的工件的详细信息。 |
| 工件/路径 | 字符串 | 是 | 引擎下载工件的位置。例如,对于AWS_S3,这是亚马逊 S3 的 URI。 |
| 工件/类型 | 字符串 | 是 | 神器类型。允许的值:AWS_S3。 |
| identity | 字符串 | 否 | 该字段目前未被使用。 |
| 参数 | 列表 | 是 | 用户输入到 Service Catalog 作为此操作输入的参数键值对列表。 |
| tags | 列表 | 是 | 作为标签输入到 key-value-pairs Service Catalog 的用户列表,以应用于已配置的资源。 |
工作流程结果通知:
使用 NotifyProvisionProductEngineWorkflowResult API 详细信息页面上指定的响应对象调用 API。
Updating
对于该UpdateProvisionedProduct操作,Service Catalog 将资源的实际更新委托给引擎。引擎负责与您选择的 IaC 解决方案(例如 Terraform)接口,以更新工件中定义的资源。引擎还负责将结果通知 Service Catalog。
Service Catalog 将所有更新请求发送到您名为的账户中的亚马逊 SQS 队列。ServiceCatalogExternalUpdateOperationQueue
请求语法:
{ "token": "string", "operation": "string", "provisionedProductId": "string", "provisionedProductName": "string", "productId": "string", "provisioningArtifactId": "string", "recordId": "string", "launchRoleArn": "string", "artifact": { "path": "string", "type": "string" }, "identity": { "principal": "string", "awsAccountId": "string", "organizationId": "string" }, "parameters": [ { "key": "string", "value": "string" } ], "tags": [ { "key": "string", "value": "string" } ] }
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
| token | 字符串 | 是 | 标识此操作的标记。必须将令牌返回到 Service Catalog 才能通知执行结果。 |
| operation | 字符串 | 是 | 此字段必须UPDATE_PROVISION_PRODUCT用于此操作。 |
| provisionedProductId | 字符串 | 是 | 预配置产品的 ID。 |
| provisionedProductName | 字符串 | 是 | 预配置产品的名称。 |
| 产品编号 | 字符串 | 是 | 产品的 ID。 |
| provisioningArtifactId | 字符串 | 是 | 置备工件的 ID。 |
| recordId | 字符串 | 是 | 此操作的 Service Catalog 记录的 ID。 |
| launchRoleArn | 字符串 | 是 | 用于配置资源的 IAM 角色的亚马逊资源名称 (ARN)。 |
| 项目 | 对象 | 是 | 定义资源配置方式的工件的详细信息。 |
| 工件/路径 | 字符串 | 是 | 引擎下载工件的位置。例如,对于AWS_S3,这是亚马逊 S3 的 URI。 |
| 工件/类型 | 字符串 | 是 | 神器类型。允许的值:AWS_S3。 |
| identity | 字符串 | 否 | 该字段目前未被使用。 |
| 参数 | 列表 | 是 | 用户输入到 Service Catalog 作为此操作输入的参数键值对列表。 |
| tags | 列表 | 是 | 作为标签输入到 key-value-pairs Service Catalog 的用户列表,以应用于已配置的资源。 |
工作流程结果通知:
使用 NotifyUpdateProvisionedProductEngineWorkflowResultAPI 详细信息页面上指定的响应对象调用 API。
正在终止
对于该TerminateProvisionedProduct操作,Service Catalog 将资源的实际终止委托给引擎。引擎负责与您选择的 IaC 解决方案(例如 Terraform)接口,以终止工件中定义的资源。引擎还负责将结果通知 Service Catalog。
Service Catalog 将所有终止请求发送到您的账户中名为的亚马逊 SQS 队列。ServiceCatalogExternalTerminateOperationQueue
请求语法:
{ "token": "string", "operation": "string", "provisionedProductId": "string", "provisionedProductName": "string", "recordId": "string", "launchRoleArn": "string", "identity": { "principal": "string", "awsAccountId": "string", "organizationId": "string" } }
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
| token | 字符串 | 是 | 标识此操作的标记。必须将令牌返回到 Service Catalog 才能通知执行结果。 |
| operation | 字符串 | 是 | 此字段必须TERMINATE_PROVISION_PRODUCT用于此操作。 |
| provisionedProductId | 字符串 | 是 | 预配置产品的 ID。 |
| provisionedProductName | 字符串 | 是 | 预配置产品的名称。 |
| recordId | 字符串 | 是 | 此操作的 Service Catalog 记录的 ID。 |
| launchRoleArn | 字符串 | 是 | 用于配置资源的 IAM 角色的亚马逊资源名称 (ARN)。 |
| identity | 字符串 | 否 | 该字段目前未被使用。 |
工作流程结果通知:
使用 NotifyTerminateProvisionedProductEngineWorkflowResultAPI 详细信息页面上指定的响应对象调用 API。
标记
要通过 Resource Groups 管理标签,您的启动角色需要以下其他权限声明:
{ "Effect": "Allow", "Action": [ "resource-groups:CreateGroup", "resource-groups:ListGroupResources" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "tag:GetResources", "tag:GetTagKeys", "tag:GetTagValues", "tag:TagResources", "tag:UntagResources" ], "Resource": "*" }
注意
启动角色还需要对构件中特定资源的标记权限,例如ec2:CreateTags。