

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

# 刪除產品
<a name="productmgmt-delete"></a>

當您刪除產品時， 會從包含產品的每個產品組合 AWS Service Catalog 中移除所有產品版本。

AWS Service Catalog 可讓您使用 AWS Service Catalog 主控台或 刪除產品 AWS CLI。若要成功刪除產品，您必須先取消與產品相關聯的所有資源的關聯。產品資源關聯的範例包括產品組合關聯、預算、TagOptions 和服務動作。

**重要**  
 產品刪除後就無法復原。

**使用 AWS Service Catalog 主控台刪除產品**

1.  導覽至**產品組合**頁面，然後選取包含您要刪除之產品的產品組合。

1.  選取您要刪除的產品，然後選擇產品窗格右上角的**刪除**。

1. 對於*沒有相關聯資源*的產品，請在文字方塊中輸入 **Delete** 以確認您要刪除的產品，然後選擇 **Delete**。

   對於*具有相關聯資源*的產品，請繼續步驟 4。

1. 在**刪除產品**視窗中，檢閱**關聯**表格，其中會顯示所有產品關聯的資源。當您刪除產品時， AWS Service Catalog 嘗試取消這些資源的關聯。

1. 確認您想要刪除產品，並在文字方塊中輸入 **Delete** 來移除所有相關聯的資源。

1. 選擇**取消關聯並刪除**。

如果 AWS Service Catalog 無法取消所有產品資源的關聯，則不會刪除該產品。**刪除產品**視窗會顯示失敗的取消關聯數目，以及每個失敗的描述。如需在刪除產品時解決失敗資源取消關聯的詳細資訊，請參閱*在以下刪除產品時解決失敗的資源取消關聯*。

**Topics**
+ [使用 刪除產品 AWS CLI](product-delete-cli.md)
+ [解決刪除產品時失敗的資源取消關聯](product-delete-exception.md)

# 使用 刪除產品 AWS CLI
<a name="product-delete-cli"></a>

AWS Service Catalog 可讓您使用 [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)(AWS CLI) 從您的產品組合中刪除產品。是一種 AWS CLI 開放原始碼工具，可讓您使用命令列 Shell 中的 命令與 AWS 服務互動。 AWS Service Catalog 強制刪除函數需要[AWS CLI 別名](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-alias.html)，這是您可以在 中建立的捷徑 AWS CLI ，以縮短您經常使用的命令或指令碼。

## 先決條件
<a name="product-delete-cli-requirements"></a>
+ 安裝及設定 AWS CLI。如需詳細資訊，請參閱[安裝或更新最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)和[組態基本概念](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)。使用最低 AWS CLI 版本 1.11.24 或 2.0.0。
+ 刪除產品 CLI 別名需要與 bash 相容的終端機和 JQ 命令列 JSON 處理器。如需安裝命令列 JSON 處理器的詳細資訊，請參閱[下載 jq](https://stedolan.github.io/jq/download/)。
+ 建立 AWS CLI 別名以批次處理 `Disassociation` API 呼叫，讓您能夠在單一命令中刪除產品。

若要成功刪除產品，您必須先取消與產品相關聯的所有資源的關聯。產品資源關聯的範例包括產品組合關聯、預算、標籤選項和服務動作。使用 CLI 刪除產品時，CLI `force-delete-product` 別名可讓您呼叫 `Disassociate` API 來取消關聯任何會阻止 `DeleteProduct` API 的資源。這可避免個別取消關聯的個別呼叫。

**注意**  
以下程序中顯示的檔案路徑可能會根據您用來執行這些動作的作業系統而有所不同。

## 建立 AWS CLI 別名以刪除 AWS Service Catalog 產品
<a name="product-delete-cli-alias"></a>

使用 AWS CLI 刪除 AWS Service Catalog 產品時，CLI `force-delete-product` 別名可讓您呼叫 `Disassociate` API，以取消任何會阻止`DeleteProduct`呼叫的資源的關聯。

**在 AWS CLI 組態資料夾中建立 `alias` 檔案**

1. 在 AWS CLI 主控台中，導覽至 configuraiton 資料夾。根據預設，組態資料夾路徑`~/.aws/`位於 Linux 和 macOS `%USERPROFILE%\.aws\`或 Windows。

1. `cli` 使用檔案導覽或在您偏好的終端機中輸入下列命令來建立名為 的子資料夾：

   ```
                $ mkdir -p ~/.aws/cli
   ```

   產生的`cli`資料夾預設路徑位於 `~/.aws/cli/` Linux 和 MacOS `%USERPROFILE%\.aws\cli`或 Windows。

1. 在新`cli`資料夾中，建立名為 `alias` 且沒有副檔名的文字檔案。您可以使用`alias`檔案導覽或在偏好的終端機中輸入下列命令來建立檔案：

   ```
                 $ touch ~/.aws/cli/alias
   ```

1. 在第一行`[toplevel]`輸入 。

1. 儲存檔案。

接下來，您可以透過手動將別名指令碼貼入 `alias` 檔案，或使用終端機視窗中的命令，將 force-delete-product 別名新增至 檔案。

**手動將 force-delete-product 別名新增至您的`alias`檔案**

1. 在 AWS CLI 主控台中，導覽至您的 AWS CLI 組態資料夾並開啟 `alias` 檔案。

1. 將下列程式碼別名輸入 檔案，位於 `[toplevel]`行下方：

   ```
                [command servicecatalog]
             	 force-delete-product =
             	   !f() {
             	     if [ "$#" -ne 1 ]; then
             	         echo "Illegal number of parameters"
             	         exit 1
             	     fi
             	 
             	     if [[ "$1" != prod-* ]]; then
             	        echo "Please provide a valid product id."
             	        exit 1
             	     fi
             	 
             	     productId=$1
             	     describeProductAsAdminResponse=$(aws servicecatalog describe-product-as-admin --id $productId)
             	     listPortfoliosForProductResponse=$(aws servicecatalog list-portfolios-for-product --product-id $productId)
             	 
             	     tagOptions=$(echo "$describeProductAsAdminResponse" | jq -r '.TagOptions[].Id')
             	     budgetName=$(echo "$describeProductAsAdminResponse" | jq -r '.Budgets[].BudgetName')
             	     portfolios=$(echo "$listPortfoliosForProductResponse" | jq -r '.PortfolioDetails[].Id')
             	     provisioningArtifacts=$(echo "$describeProductAsAdminResponse" | jq -r '.ProvisioningArtifactSummaries[].Id')
             	     provisioningArtifactServiceActionAssociations=()
             	 
             	     for provisioningArtifactId in $provisioningArtifacts; do
             	       listServiceActionsForProvisioningArtifactResponse=$(aws servicecatalog list-service-actions-for-provisioning-artifact --product-id $productId --provisioning-artifact-id $provisioningArtifactId)
             	       serviceActions=$(echo "$listServiceActionsForProvisioningArtifactResponse" | jq -r '[.ServiceActionSummaries[].Id] | join(",")')
             	       if [[ -n "$serviceActions" ]]; then
             	         provisioningArtifactServiceActionAssociations+=("${provisioningArtifactId}:${serviceActions}")
             	       fi
             	     done
             	 
             	     echo "Before deleting a product, the following associated resources must be disassociated. These resources will not be deleted. This action may take some time, depending on the number of resources being disassociated."
             	 
             	     echo "Portfolios:"
             	     for portfolioId in $portfolios; do
             	       echo "\t${portfolioId}"
             	     done
             	 
             	     echo "Budgets:"
             	     if [[ -n "$budgetName" ]]; then
             	       echo "\t${budgetName}"
             	     fi
             	 
             	     echo "Tag Options:"
             	     for tagOptionId in $tagOptions; do
             	       echo "\t${tagOptionId}"
             	     done
             	 
             	     echo "Service Actions on Provisioning Artifact:"
             	     for association in "${provisioningArtifactServiceActionAssociations[@]}"; do
             	       echo "\t${association}"
             	     done
             	 
             	     read -p "Are you sure you want to delete ${productId}? y,n "
             	     if [[ ! $REPLY =~ ^[Yy]$ ]]; then
             	        exit
             	     fi
             	 
             	     for portfolioId in $portfolios; do
             	       echo "Disassociating ${portfolioId}"
             	       aws servicecatalog disassociate-product-from-portfolio --product-id $productId --portfolio-id $portfolioId
             	     done
             	 
             	     if [[ -n "$budgetName" ]]; then
             	       echo "Disassociating ${budgetName}"
             	       aws servicecatalog disassociate-budget-from-resource --budget-name "$budgetName" --resource-id $productId
             	     fi
             	 
             	     for tagOptionId in $tagOptions; do
             	       echo "Disassociating ${tagOptionId}"
             	       aws servicecatalog disassociate-tag-option-from-resource --tag-option-id $tagOptionId --resource-id $productId
             	     done
             	 
             	     for association in "${provisioningArtifactServiceActionAssociations[@]}"; do
             	       associationPair=(${association//:/ })
             	       provisioningArtifactId=${associationPair[0]}
             	       serviceActionsList=${associationPair[1]}
             	       serviceActionIds=${serviceActionsList//,/ }
             	       for serviceActionId in $serviceActionIds; do
             	         echo "Disassociating ${serviceActionId} from ${provisioningArtifactId}"
             	         aws servicecatalog disassociate-service-action-from-provisioning-artifact --product-id $productId --provisioning-artifact-id $provisioningArtifactId --service-action-id $serviceActionId
             	       done
             	     done
             	 
             	     echo "Deleting product ${productId}"
             	     aws servicecatalog delete-product --id $productId
             	 
             	   }; f
   ```

1. 儲存檔案。

**使用終端機視窗將 force-delete-product 別名新增至您的`alias`檔案**

1. 開啟終端機視窗並執行下列命令

   `$ cat >> ~/.aws/cli/alias`

1. 將別名指令碼貼到終端機視窗，然後按 *CTRL\$1D* 結束`cat`命令。

**呼叫 force-delete-product 別名**

1. 在終端機視窗中，執行下列命令來呼叫刪除產品別名

   `$ aws servicecatalog force-delete-product {product-id} `

   以下範例顯示`force-delete-product`別名命令及其產生的回應 

   ```
                 $ aws servicecatalog force-delete-product prod-123
   ```

   ```
                 Before deleting a product, the following associated resources must be disassociated. These resources will not be deleted. This action may take some time, depending on the number of resources being disassociated.
                 Portfolios:
                   port-123
                 Budgets:
                     budgetName
                 Tag Options:
                     tag-123
                 Service Actions on Provisioning Artifact:
                     pa-123:act-123
                 Are you sure you want to delete prod-123? y,n
   ```

1. 輸入 `y` 以確認您想要刪除產品。

成功刪除產品後，終端機視窗會顯示下列結果

```
          Disassociating port-123
          Disassociating budgetName
          Disassociating tag-123
          Disassociating act-123 from pa-123
          Deleting product prod-123
```

## 其他資源
<a name="product-delete-cli-resources"></a>

如需使用 AWS CLI別名和刪除 AWS Service Catalog 產品的詳細資訊，請檢閱下列資源：
+ 《 *AWS Command Line Interface (CLI)* [AWS CLI 使用者指南》中的建立和使用別名](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-alias.html)。
+ [AWS CLI 別名儲存庫](https://github.com/awslabs/awscli-aliases) git 儲存庫。
+ [刪除 AWS Service Catalog 產品](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/productmgmt-delete.html)。
+ [AWS re：Invent 2016：YouTube 上的有效 AWS CLI 使用者](https://youtu.be/Xc1dHtWa9-Q?t=1593)。 *YouTube* 

# 解決刪除產品時失敗的資源取消關聯
<a name="product-delete-exception"></a>

如果您之前因資源取消關聯例外狀況而嘗試[刪除產品](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/productmgmt-delete.html)失敗，請檢閱下列例外狀況清單及其解決方法。

**注意**  
如果您在收到失敗的資源取消關聯訊息之前關閉**刪除產品**視窗，您可以遵循繼續*執行刪除產品*區段中的步驟一到三，以再次開啟視窗。

**解決失敗的資源取消關聯**

在**刪除產品**視窗中，檢閱關聯資料表**狀態**欄。識別失敗的資源取消關聯例外狀況和建議的解決方案：


****  

| 狀態例外類型 | 原因 | Resolution | 
| --- | --- | --- | 
| 產品產品-\$1\$1\$1\$1 | AWS Service Catalog 無法刪除產品，因為產品仍有關聯的 TagOptions、預算、至少一個ProvisioningArtifact有關聯的動作、產品仍指派給產品組合、產品有使用者，或產品有限制條件。 | 嘗試再次刪除產品。 | 
| 使用者： username 未獲授權執行： | 嘗試刪除產品的使用者沒有取消產品資源關聯的必要許可。 | AWS Service Catalog 建議聯絡您的 帳戶管理員，以取得有關取消關聯您目前沒有取消關聯的許可產品資源的詳細資訊。 | 