

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS Service Catalog 服務動作
<a name="using-service-actions"></a>

**注意**  
AWS Service Catalog 不支援 Terraform Open Source 或 Terraform Cloud 產品的服務動作。

AWS Service Catalog 可讓您減少管理維護和最終使用者訓練，同時遵守合規和安全措施。身為管理員的您可借助服務動作讓最終使用者執行操作式任務、排除問題、執行核准的命令，或在 AWS Service Catalog中請求許可。您可以使用 [AWS Systems Manager 文件](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-ssm-docs.html) 定義服務動作。這些[AWS Systems Manager 文件](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-ssm-docs.html)可讓您存取實作 AWS 最佳實務的預先定義動作，例如 Amazon EC2 停止和重新啟動，您也可以定義自訂動作。

在本教學課程中，您會為最終使用者提供重新啟動 Amazon EC2 執行個體的能力。您新增必要的許可、定義服務動作、為服務動作與產品建立關聯，以及透過佈建的產品，利用動作來測試最終使用者體驗。

## 先決條件
<a name="service-actions-prerequisites"></a>

本教學假設您擁有完整的 AWS 管理員許可、已經熟悉 AWS Service Catalog，而且已經擁有一組基本產品、產品組合和使用者。如果您不熟悉 AWS 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：使用 管理服務動作 AWS CloudFormation](#service-actions-cloudformation)
+ [步驟 6：故障診斷](#service-actions-troubleshooting)

## 步驟 1：設定最終使用者許可
<a name="service-actions-configure-end-user-permissions"></a>

最終使用者必須擁有必要的許可，才能檢視和執行特定的服務動作。在此範例中，最終使用者需要存取 AWS Service Catalog 服務動作功能和執行 Amazon EC2 重新啟動的許可。

**更新權限**

1. 開啟位於 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 AWS Identity and Access Management (IAM) 主控台。

1. 從功能表中，尋找使用者群組。

1. 選擇最終使用者將用於存取 AWS Service Catalog 資源的群組。在這個範例中，我們選擇最終使用者群組。在您自己的實作中，選擇相關的最終使用者所使用的群組。

1. 在群組的詳細資訊頁面的 **Permissions (許可)** 標籤上，可以建立新政策，或編輯現有的政策。在此範例中，我們透過選取為群組佈建 AWS Service Catalog 和終止許可建立的自訂政策，將許可新增至現有政策。

1. 在 **Policy (政策)** 頁面上，選擇 **Edit Policy (編輯政策)** 以新增必要的許可。您可以使用視覺化編輯器或 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 EC2 重新啟動動作的必要許可 AWS Service Catalog。

## 步驟 2：建立服務動作
<a name="service-actions-create-new-service-action"></a>

接著，建立服務動作以重新啟動 Amazon EC2 執行個體。

1. 在 https：//[https://console.aws.amazon.com/sc/](https://console.aws.amazon.com/servicecatalog/) 開啟 AWS Service Catalog 主控台。

1. 從功能表中選擇 **Service actions (服務動作)**。

1. 在**服務動作**頁面上，選擇**建立動作**。

1. 在**建立動作**頁面上，選擇 AWS Systems Manager 文件以定義服務動作。Amazon EC2 執行個體重新啟動動作是由 AWS Systems Manager 文件定義，因此我們會在下拉式功能表 **Amazon 文件**上保留預設選項。

1. 搜尋並選擇 **AWS-RestartEC2Instance** 動作。

1. 提供符合您環境和團隊動作的名稱和描述。最終使用者將會看到此描述，因此選擇可協助他們了解動作的選項。

1. 在**參數和目標組態**下，選擇將成為動作目標的 SSM 文件參數 （例如**執行個體 ID**)，然後選擇參數的目標。選擇 **Add parameter (新增參數)** 以新增其他參數。

1. 在 **Permissions (許可)** 下，選擇角色。我們為此範例使用預設的許可。此頁面可設定及定義其他許可組態。

1. 檢閱組態之後，可選擇 **Create action (建立動作)**。

1. 到了下一頁，當建立好動作並準備好開始使用時，出現確認訊息。

## 步驟 3：將服務動作與產品版本建立關聯
<a name="service-actions-associate-with-product-version"></a>

在您定義動作後，您必須為產品與該動作建立關聯。

1. 在**服務動作**頁面上，選擇 **AWS-RestartEC2instance**，然後選擇**關聯動作**。

1. 在 **Associate action (關聯動作)** 頁面，選擇您希望您的最終使用者採取服務動作的產品。在這個範例中，我們選擇 **Linux Desktop (Linux 桌面)**。

1. 選擇產品版本。請注意，您可以使用最上面的核取方塊來選取所有的版本。

1. 選擇 **Associate action (建立關聯)**。

1. 在下一頁出現確認訊息。

現在您已經在 AWS Service Catalog建立服務動作。此教學課程的下一步是以最終使用者身分使用服務動作。

## 步驟 4：測試最終使用者體驗
<a name="service-actions-test-end-user-experience"></a>

最終使用者可以在佈建的產品上執行服務動作。基於此教學課程的目的，最終使用者必須至少有一項佈建的產品。已佈建產品應該從您在之前步驟與服務動作關聯之產品版本啟動。

**以最終使用者身分存取服務動作**

1. 以最終使用者身分登入 AWS Service Catalog 主控台。

1. 在 AWS Service Catalog 儀表板的導覽窗格中，選擇**佈建產品清單**。此清單會顯示為最終使用者帳戶佈建的產品。

1. 在 **Provisioned products list (佈建產品清單)** 頁面上，選擇已佈建的執行個體。

1. 在**佈建產品詳細資訊**頁面上，選擇右上角**的動作**，然後選擇 **AWS-RestartEC2instance** 動作。

1. 確認您要執行自訂動作。您收到確認表示動作已傳送。

## 步驟 5：使用 管理服務動作 AWS CloudFormation
<a name="service-actions-cloudformation"></a>

 您可以建立服務動作及其與 AWS CloudFormation 資源的關聯。如需詳細資訊，請參閱《AWS CloudFormation 使用者指南》** 中的下列主題：
+  [AWS::ServiceCatalog::CloudFormationProduct ProvisioningArtifactProperties](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-servicecatalog-cloudformationproduct-provisioningartifactproperties.html) 
+  [AWS::ServiceCatalog::ServiceActionAssociation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-serviceactionassociation.html) 

**注意**  
 如果您管理服務動作與 CloudFormation 資源的關聯，請勿透過 AWS Command Line Interface 或 新增或移除服務動作 AWS 管理主控台。當您執行堆疊更新時，在 外部 CloudFormation 對 服務動作所做的任何變更都會遭到取代。

## 步驟 6：故障診斷
<a name="service-actions-troubleshooting"></a>

如果您的服務動作執行失敗，您可以在**佈建產品**頁面上服務動作執行事件的**輸出**區段中找到錯誤訊息。您可以在下方看到常見錯誤訊息的說明。

**注意**  
錯誤消息的確切文本可能會改變，因此您應該避免在任何類型的自動化過程中使用這些文本。

 **內部錯誤**

AWS Service Catalog 發生內部錯誤。請稍後再試。如果問題持續發生，請聯絡客戶支援。

 **呼叫 StartAutomationExecution 作業時發生錯誤 (ThrottlingException)**

服務動作執行是由後端服務調節，例如 SSM。

 **假設角色時拒絕存取**

 AWS Service Catalog 無法擔任服務動作定義中指定的角色。請確定 *servicecatalog.amazonaws.com* 委託人或 *servicecatalog.us-east-1.amazonaws.com* 等區域委託人被允許列在角色的信任政策中。

 **呼叫 StartAutomationExecution 作業時發生錯誤 (AccessDeniedException)：使用者未授權在資源上執行 ssm:StartAutomationExecution。**

服務動作定義中指定的角色沒有叫用 ssm:StartAutomationExecution。確定角色具有適當的 SSM 許可。

 **在佈建的產品中找不到具有 *TargetType* 類型的任何資源**

佈建的產品不包含任何符合 SSM 文件中所指定目標類型的資源，例如 AWS：：EC2：：Instance。請檢查佈建的產品是否有這些資源，或確認文件是否正確。

 **具有該名稱的文件不存在**

服務動作定義中指定的文件不存在。

 **無法描述 SSM 自動化文件**

AWS Service Catalog 嘗試描述指定的文件時，SSM 遇到不明的例外狀況。

 **無法擷取角色的認證**

AWS Service Catalog 擔任指定角色時遇到未知錯誤。

 **參數在 \$1*InvalidValue*1\$1、\$1ValidValue2\$1 中找不到值 "InvalidValue" *ValidValue1ValidValue2***

 傳遞給 SSM 的參數值不在文件允許的值清單中。確認提供的參數有效，然後再試一次。

 **參數類型錯誤。*ParameterName*提供的值不是有效的字串。**

傳遞給 SSM 的 參數值對文件上的 類型無效。

 **未在服務動作定義中定義參數**

參數已傳遞至 AWS Service Catalog 未在服務動作定義中定義的 。您只能使用在服務動作定義中定義的參數。

 **步驟在執行/取消動作時失敗。*錯誤訊息。*如需診斷詳細資訊，請參閱 Automation Service 故障診斷指南。**

 SSM 自動化文件中的步驟失敗。請參閱訊息中的錯誤，以進一步疑難排解。

 **不允許參數的下列值，因為它們不在佈建的產品中：*InvalidResourceId***

使用者要求對不在佈建產品中的資源執行動作。

 **SSM 自動化文件未定義的 TargetType**

服務動作需要 SSM 自動化文件定義 TargetType。檢查您的 SSM 自動化文件。