

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 를 사용하여 제품 삭제 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 는 명령줄 셸의 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다. AWS Service Catalog force-delete 함수에는 자주 사용하는 명령이나 스크립트를 단축 AWS CLI 하기 위해에서 생성할 수 있는 바로 가기인 [AWS CLI 별칭](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-alias.html)이 필요합니다.

## 사전 조건
<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/) 섹션을 참조하십시오.
+ `Disassociation` API 호출을 일괄 처리할 AWS CLI 별칭을 생성하여 단일 명령으로 제품을 삭제할 수 있습니다.

제품을 성공적으로 삭제하려면 먼저 제품과 관련된 모든 리소스의 연결을 끊어야 합니다. 제품 리소스 연결의 예로는 포트폴리오 연결, 예산, TagOption, 서비스 작업 등이 있습니다. CLI를 사용하여 제품을 삭제할 때 CLI `force-delete-product` 별칭을 사용하면 `Disassociate` API를 호출하여 `DeleteProduct` API를 차단하는 모든 리소스의 연결을 끊을 수 있습니다. 이렇게 하면 개별 연결 해제를 위해 별도의 호출을 하지 않아도 됩니다.

**참고**  
아래 절차에 표시된 파일 경로는 이러한 작업을 수행하는 데 사용하는 운영 체제에 따라 다를 수 있습니다.

## AWS Service Catalog 제품을 삭제하기 위한 AWS CLI 별칭 생성
<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 콘솔에서 구성 폴더로 이동합니다. 기본적으로 구성 폴더 경로는 Linux 및 macOS의 `~/.aws/` 또는 Windows `%USERPROFILE%\.aws\`에 있습니다.

1. 파일 탐색을 사용하거나 선호하는 터미널에 다음 명령을 입력하여 이름을 `cli`로 지정한 하위 폴더를 생성합니다.

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

   결과로 생성되는 `cli` 폴더의 기본 경로는 Linux 및 macOS의 `~/.aws/cli/` 또는 Windows의 `%USERPROFILE%\.aws\cli`입니다.

1. 새로운 `cli` 폴더에서 파일 확장명 없이 이름이 `alias`인 텍스트 파일을 생성합니다. 파일 탐색을 사용하거나 선호하는 터미널에 다음 명령을 입력하여 `alias` 파일을 생성할 수 있습니다.

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

1. 첫 번째 줄에 `[toplevel]`을 입력합니다.

1. 파일을 저장합니다.

그다음 별칭 스크립트를 파일에 수동으로 붙여넣거나 터미널 창에서 명령을 사용하여 force-delete-product 별칭을 `alias` 파일에 추가할 수 있습니다.

**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* 