本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 刪除產品 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
檔案
-
在 AWS CLI 主控台中,導覽至 configuraiton 資料夾。根據預設,組態資料夾路徑
~/.aws/
位於 Linux 和 macOS%USERPROFILE%\.aws\
或 Windows。 -
cli
使用檔案導覽或在您偏好的終端機中輸入下列命令來建立名為 的子資料夾:$ mkdir -p ~/.aws/cli
產生的
cli
資料夾預設路徑位於~/.aws/cli/
Linux 和 MacOS%USERPROFILE%\.aws\cli
或 Windows。 -
在新
cli
資料夾中,建立名為 的文字檔案alias
,沒有副檔名。您可以使用alias
檔案導覽或在偏好的終端機中輸入下列命令來建立檔案:$ touch ~/.aws/cli/alias
-
在第一行
[toplevel]
輸入 。 -
儲存檔案。
接下來,您可以透過手動將別名指令碼貼入 alias
檔案,或使用終端機視窗中的命令,將 force-delete-product 別名新增至您的檔案。
手動將 force-delete-product 別名新增至您的alias
檔案
-
在 AWS CLI 主控台中,導覽至您的 AWS CLI 組態資料夾並開啟
alias
檔案。 -
將下列程式碼別名輸入檔案,
[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
-
儲存檔案。
使用終端機視窗將 force-delete-product 別名新增至您的alias
檔案
-
開啟終端機視窗並執行下列命令
$ cat >> ~/.aws/cli/alias
-
將別名指令碼貼到終端機視窗,然後按 CTRL+D 結束
cat
命令。
呼叫 force-delete-product 別名
-
在終端機視窗中,執行下列命令來呼叫刪除產品別名
$ 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
-
輸入
y
以確認您想要刪除產品。
成功刪除產品後,終端機視窗會顯示下列結果
Disassociating port-123 Disassociating budgetName Disassociating tag-123 Disassociating act-123 from pa-123 Deleting product prod-123
其他資源
如需使用 AWS CLI別名和刪除 AWS Service Catalog 產品的詳細資訊,請檢閱下列資源:
-
在 AWS Command Line Interface (CLI) AWS CLI 使用者指南中建立和使用別名。
-
AWS CLI 別名儲存庫
git 儲存庫。