使用 刪除產品 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 別名需要與堡壘相容的終端機和 JQ 命令列 JSON 處理器。如需安裝 Command-line JSON 處理器的詳細資訊,請參閱下載 jq

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

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

注意

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

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

使用 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。

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

    $ mkdir -p ~/.aws/cli

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

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

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

  5. 儲存檔案。

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

手動將 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別名命令及其產生的回應

    $ 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 產品的詳細資訊,請檢閱下列資源: