使用刪除產品 AWS CLI - AWS Service Catalog

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

使用刪除產品 AWS CLI

AWS Service Catalog可讓您使用 AWS Command Line Interface(AWS CLI) 從您的產品組合中刪除產品。AWS CLI 是開放原始碼工具,可讓您在命令列 shell 中使用命令來與 AWS 服務互動。AWS Service Catalog強制刪除函數需要AWS CLI別名,這是您可以在中建立的捷徑,以縮短您經常AWS CLI使用的指令或指令碼。

必要條件

  • 安裝及設定 AWS CLI。如需詳細資訊,請參閱安裝或更新最新版本的AWS CLI組態基本知識。使用 AWS CLI 最低版本 1.11.24 或 2.0.0。

  • 刪除產品 CLI 別名需要與 Bash 相容的終端機和 JQ 命令列 JSON 處理器。如需有關安裝命令列 JSON 處理器的詳細資訊,請參閱下載 jq

  • 建立AWS CLI別名以批次處理 Disassociation API 呼叫,讓您在單一命令中刪除產品。

若要成功刪除產品,您必須先取消與該產品相關聯的所有資源的關聯。產品資源關聯的範例包括產品組合關聯、預算、標籤選項及服務動作。使用 CLI 刪除產品時,CLI force-delete-product 別名可讓您呼叫 Disassociate API 以取消任何可能阻止 DeleteProduct API 的資源的關聯。這樣可以避免單獨呼籲個人分離。

注意

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

建立AWS CLI別名以刪除AWS Service Catalog產品

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

在您的AWS CLI組態資料夾中建立alias檔案
  1. 在AWS CLI主控台中,瀏覽至設定資料夾。根據預設,設定資料夾路徑是~/.aws/在 Linux 和 macOS 上,或%USERPROFILE%\.aws\在視窗上。

  2. cli使用檔案導覽或在偏好的終端機中輸入以下指令,建立名為的子資料夾:

    $ mkdir -p ~/.aws/cli

    產生的cli資料夾預設路徑是~/.aws/cli/在 Linux 和 MacOS 上,或%USERPROFILE%\.aws\cli在視窗上。

  3. 在新資cli料夾中,建立名為不alias含副檔名的文字檔案。您可以使用alias檔案導覽或在偏好的終端機中輸入以下指令來建立檔案:

    $ touch ~/.aws/cli/alias
  4. [toplevel]在第一行輸入。

  5. 儲存檔案。

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

手動將 force-delete-product 別名新增至檔alias
  1. 在AWS CLI主控台中,瀏覽至您的AWS CLI設定資料夾並開啟alias檔案。

  2. 在該[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
  3. 儲存檔案。

使用終端機視窗將 force-delete-product 別名新增至alias檔案
  1. 打開終端窗口並運行以下命令

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

  2. 將別名指令碼貼到終端機視窗中,然後按 CTRL+D 結束指cat令。

呼叫別 force-delete-product 名
  1. 在終端機視窗中,執行下列命令以呼叫刪除產品別名

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

    下面的例子顯示了 force-delete-product alias 命令及其產生的響應

    $ 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 
                
  2. 輸入y以確認您要刪除產品。

成功刪除產品後,終端機窗口顯示以下結果

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

其他資源

如需有關AWS CLI使用別名和刪除AWS Service Catalog產品的詳細資訊,請檢閱下列資源: