

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

# Amazon Service Catalog 服务操作
<a name="using-service-actions"></a>

**注意**  
Amazon Service Catalog 不支持 Terraform 开源或 Terraform Cloud 产品的服务操作。

Amazon Service Catalog 使您能够减少管理维护和最终用户培训，同时遵守合规性和安全措施。利用服务操作，作为管理员，您可以允许最终用户在 Amazon Service Catalog中执行操作任务、排查问题、运行批准的命令或请求权限。使用 [Amazon Systems Manager 文档](https://docs.amazonaws.cn/systems-manager/latest/userguide/sysman-ssm-docs.html)定义服务操作。这些[Amazon Systems Manager 文档](https://docs.amazonaws.cn/systems-manager/latest/userguide/sysman-ssm-docs.html)允许访问实施 Amazon 最佳实践的预定义操作，例如 Amazon EC2 停止和重启，您也可以定义自定义操作。

在本教程中，您为最终用户提供重启 Amazon EC2 实例的功能。添加必要的权限，定义服务操作，将服务操作与产品关联，将操作用于预配置产品来测试最终用户体验。

## 先决条件
<a name="service-actions-prerequisites"></a>

本教程假设您拥有完全的 Amazon 管理员权限，您已经熟悉了 Amazon Service Catalog，并且您已经拥有一组基本的产品、产品组合和用户。如果您不熟悉 Amazon Service Catalog，请在使用本教程之前完成[设置](setup.md)和[入门](getstarted.md)任务。

**Topics**
+ [先决条件](#service-actions-prerequisites)
+ [步骤 1：配置最终用户权限](#service-actions-configure-end-user-permissions)
+ [步骤 2：创建服务操作](#service-actions-create-new-service-action)
+ [步骤 3：将服务操作与产品版本关联](#service-actions-associate-with-product-version)
+ [步骤 4：测试最终用户体验](#service-actions-test-end-user-experience)
+ [步骤 5：使用管理服务操作 Amazon CloudFormation](#service-actions-cloudformation)
+ [步骤 6：问题排查](#service-actions-troubleshooting)

## 步骤 1：配置最终用户权限
<a name="service-actions-configure-end-user-permissions"></a>

最终用户必须拥有必需的权限才能查看和执行特定服务操作。在此示例中，最终用户需要获得访问 Amazon Service Catalog 服务操作功能和执行 Amazon EC2 重启的权限。

**更新权限**

1. 打开 Amazon Identity and Access Management (IAM) 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/)。

1. 从菜单中找到用户群组。

1. 选择最终用户将用于访问 Amazon Service Catalog 资源的群组。在本示例中，我们选择最终用户组。在您自己的实现中，选择相关最终用户使用的组。

1. 在组的详细信息页面的**权限**选项卡上，创建新策略或编辑现有策略。在此示例中，我们通过选择为群组的 “置备” 和 “终止” 权限创建的自定义策略， Amazon Service Catalog 向现有策略添加权限。

1. 在**策略**页面上，选择**编辑策略**以添加必要的权限。您可以使用可视化编辑器或 JSON 编辑器来编辑策略。在本示例中，我们使用 JSON 编辑器添加权限。在本教程中，向策略添加以下权限：

------
#### [ JSON ]

****  

   ```
   {
   	"Version":"2012-10-17",		 	 	 
   	"Statement": [
   		{
   			"Sid": "Stmt1536341175150",
   			"Action": [
   				"servicecatalog:ListServiceActionsForProvisioningArtifact",
   				"servicecatalog:ExecuteprovisionedProductServiceAction",
   				"ssm:DescribeDocument",
   				"ssm:GetAutomationExecution",
   				"ssm:StartAutomationExecution",
   				"ssm:StopAutomationExecution",
   				"cloudformation:ListStackResources",
   				"ec2:DescribeInstanceStatus",
   				"ec2:StartInstances",
   				"ec2:StopInstances"
   			],
   			"Effect": "Allow",
   			"Resource": "*"
   		}
   	]
   }
   ```

------

1. 编辑策略之后，审查并批准对策略的更改。最终用户组中的用户现在拥有在 Amazon Service Catalog中执行 Amazon EC2 重启操作所需的权限。

## 步骤 2：创建服务操作
<a name="service-actions-create-new-service-action"></a>

接下来，您要创建一个服务操作来重启 Amazon EC2 实例。

1. 打开 Amazon Service Catalog 控制台，网址为[https://console.aws.amazon.com/sc/](https://console.amazonaws.cn/servicecatalog/)。

1. 从菜单中，选择**服务操作**。

1. 在**服务操作**页面上，选择**创建新操作**。

1. 在**创建操作**页面上，选择一个 Amazon Systems Manager 文档来定义服务操作。Amazon EC2 实例重启操作由 Amazon Systems Manager 文档定义，因此我们保留下拉菜单上的默认选项 **Amazon 文档**。

1. 搜索并选择 “**Amazon-重启EC2实例**” 操作。

1. 请为操作提供一个对您的环境和团队有意义的名称和描述。最终用户将看到此描述，从而选择帮助他们了解操作作用的内容。

1. 在**参数和目标配置**下，选择将作为操作目标的 SSM 文档参数（例如，**实例 ID**），然后选择参数的目标。选择**添加参数**以添加其他参数。

1. 在**权限**下，选择一个角色。我们在此示例中使用默认权限。还可以在此页面上执行和定义其他权限配置。

1. 审查配置之后，选择**创建操作**。

1. 在下一页上，操作创建完成后且可用时，将出现确认。

## 步骤 3：将服务操作与产品版本关联
<a name="service-actions-associate-with-product-version"></a>

定义操作后，您必须将产品与定义的操作关联。

1. 在**服务操作**页面上，选择 **Amazon-重新启动 EC2instance**，然后选择**关联操作**。

1. 在**关联操作**页面上，选择您希望您的最终用户在其上执行服务操作的产品。在本示例中，我们选择**Linux 桌面**。

1. 选择产品版本。请注意，您可以使用顶部的复选框选择所有版本。

1. 选择**关联操作**。

1. 在下一页上，将显示一条确认消息。

您现在已经在 Amazon Service Catalog中创建了服务操作。本教程的下一步是，以最终用户身份使用服务操作。

## 步骤 4：测试最终用户体验
<a name="service-actions-test-end-user-experience"></a>

最终用户可以在预配置产品上执行服务操作。在本教程中，最终用户至少必须具有一个预配置产品。预配置产品应从您在上一步中与服务操作关联的产品版本启动。

**以最终用户身份访问服务操作**

1. 以最终用户身份登录 Amazon Service Catalog 控制台。

1. 在 Amazon Service Catalog 控制面板的导航窗格中，选择**预配置产品列表**。此列表将显示为最终用户账户预配置的产品。

1. 在**预配置产品列表** 页面上，选择已预配置的实例。

1. 在**预配置产品详细信息**页面上，选择右上角的**操作**，然后选择 **Amazon-重新启动EC2instance**操作。

1. 确认您要执行自定义操作。您收到操作已发送的确认。

## 步骤 5：使用管理服务操作 Amazon CloudFormation
<a name="service-actions-cloudformation"></a>

 您可以创建服务操作及其与 Amazon CloudFormation 资源的关联。有关更多信息，请参阅《Amazon CloudFormation 用户指南》**中的以下内容：
+  [AWS::ServiceCatalog::CloudFormationProduct ProvisioningArtifactProperties](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/aws-properties-servicecatalog-cloudformationproduct-provisioningartifactproperties.html) 
+  [AWS::ServiceCatalog::ServiceAction协会](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-serviceactionassociation.html) 

**注意**  
 如果您管理服务操作与 Amazon CloudFormation 资源的关联，请不要通过或添加或删除服务操作 Amazon Web Services 管理控制台。 Amazon Command Line Interface 当您执行堆栈更新时，在 Amazon CloudFormation 之外对服务操作所做的任何更改都将被替换。

## 步骤 6：问题排查
<a name="service-actions-troubleshooting"></a>

如果您的服务操作执行失败，则可以在**预配置产品**页面上服务操作执行事件的**输出**部分中找到错误消息。您可以在下面看到常见错误消息的说明。

**注意**  
错误消息的确切文本可能会发生更改，因此您应避免在任何类型的自动执行的过程中使用这些文本。

 **内部故障**

Amazon Service Catalog 遇到了内部错误。请稍后重试。如果错误仍存在，请与客户支持联系。

 **调用 StartAutomationExecution 操作时出错 (ThrottlingException)**

服务操作执行受后端服务（例如 SSM）的限制。

 **代入角色时拒绝访问**

 Amazon Service Catalog 无法担任服务操作定义中指定的角色。请确保在角色的信任策略中将 *servicecatalog.amazonaws.com* 主体或区域主体（如 *servicecatalog.us-east-1.amazonaws.com*）列入允许列表。

 **调用 StartAutomationExecution 操作时出错 (AccessDeniedException)：用户无权在资源StartAutomationExecution 上执行:ssm:。**

服务操作定义中指定的角色无权调用 ssm: StartAutomationExecution。确保角色具有适当的 SSM 权限。

 **{{TargetType}}在预配置产品中找不到任何类型为的资源**

预配置产品不包含任何与 SSM 文档中指定的目标类型相匹配的资源，例如:: EC2 Amazon:: Instance。检查您的预配置产品是否有这些资源，或确认文档是否正确。

 **Document with that name does not exist (具有该名称的文档不存在)**

在服务操作定义中指定的文档不存在。

 **Failed to describe SSM Automation document (无法描述 SSM Automation 文档)**

Amazon Service Catalog 尝试描述指定文档时遇到来自 SSM 的未知异常。

 **Failed to retrieve credentials for role (无法检索角色的凭证)**

Amazon Service Catalog 担任指定角色时遇到未知错误。

 **在中找不到参数的值 {{InvalidValue}} “” {{{ValidValue1}, {ValidValue2}}}**

 传递给 SSM 的参数值不在文档的允许值列表中。确认提供的参数有效，然后重试。

 **参数类型错误。为提供的值{{ParameterName}}不是有效的字符串。**

传递给 SSM 的参数值对文档上的类型无效。

 **Parameter is not defined in service action definition (未在服务操作定义中定义参数)**

传递给的参数 Amazon Service Catalog 未在服务操作定义中定义。您只能使用在服务操作定义中定义的参数。

 **步骤处于 executing/canceling 操作状态时失败。 {{Error message.}}有关更多诊断详细信息，请参阅 Automation 服务问题排查指南。**

 SSM Automation 文档中的步骤失败。请参阅消息中的错误以进一步排除问题。

 **不允许使用以下参数值，因为它们不在预配置产品中：{{InvalidResourceId}}**

用户已请求对不在预配置产品中的资源执行操作。

 **TargetType 未为 SSM 自动化文档定义**

服务操作需要 SSM 自动化文档进行 TargetType 定义。检查您的 SSM Automation 文档。