

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Eliminar productos mediante el AWS CLI
<a name="product-delete-cli"></a>

AWS Service Catalog le permite usar [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)(AWS CLI) para eliminar productos de su cartera. AWS CLI Se trata de una herramienta de código abierto que permite interactuar con los AWS servicios mediante comandos de la consola de la línea de comandos. La función AWS Service Catalog force-delete requiere un [AWS CLI alias](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-alias.html), que es un atajo que se puede crear AWS CLI para abreviar los comandos o scripts que se utilizan con frecuencia. 

## Requisitos previos
<a name="product-delete-cli-requirements"></a>
+ Instalar y configurar la AWS CLI. Para obtener más información, consulte [Instalación o actualización de la versión más reciente de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) y [Configuración básica](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html). Utilice una AWS CLI versión mínima de 1.11.24 o 2.0.0. 
+ El alias CLI para eliminar el producto requiere un terminal compatible con bash y el procesador JSON de línea de comandos JQ. Para obtener más información sobre la instalación del procesador JSON de línea de comandos, consulte [Descargar jq](https://stedolan.github.io/jq/download/). 
+ Cree un AWS CLI alias para agrupar las llamadas a la `Disassociation` API, lo que le permitirá eliminar un producto con un solo comando. 

Para eliminar correctamente un producto, primero debe disociar todos los recursos asociados al producto. Algunos ejemplos de asociaciones de recursos de productos incluyen las asociaciones de carteras, presupuestos, opciones de etiquetas y acciones de servicio. Cuando se utiliza la CLI para eliminar un producto, el alias `force-delete-product` de la CLI le permite llamar a la API `Disassociate` para disociar cualquier recurso que pudiera impedir la API `DeleteProduct`. Esto evita tener que llamar por separado a las disociaciones individuales. 

**nota**  
Las rutas de los archivos que se muestran en los procedimientos siguientes pueden variar en función del sistema operativo que utilice para realizar estas acciones. 

## Crear un AWS CLI alias para eliminar AWS Service Catalog productos
<a name="product-delete-cli-alias"></a>

Cuando se utiliza AWS CLI para eliminar un AWS Service Catalog producto, el `force-delete-product` alias de la CLI le permite llamar a la `Disassociate` API para desasociar cualquier recurso que impida la `DeleteProduct` llamada. 

**Cree un `alias` archivo en la carpeta AWS CLI de configuración**

1. En la AWS CLI consola, navegue hasta la carpeta de configuración. De forma predeterminada, la carpeta de configuración es `~/.aws/` en Linux o macOS o `%USERPROFILE%\.aws\` en Windows. 

1. Cree una subcarpeta denominada `cli` mediante la navegación de archivos o introduciendo el siguiente comando en su terminal preferido: 

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

   La ruta predeterminada resultante de la carpeta `cli` es `~/.aws/cli/` en Linux o macOS o `%USERPROFILE%\.aws\cli` en Windows. 

1. En la nueva carpeta `cli`, cree un archivo de texto sin extensión con el nombre `alias`. Puede crear el archivo `alias` mediante la navegación de archivos o introduciendo el siguiente comando en la terminal que prefiera: 

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

1. Introduzca `[toplevel]` en la primera línea.

1. Guarde el archivo. 

A continuación, puede añadir el force-delete-product alias al `alias` archivo pegando manualmente el script del alias en el archivo o utilizando un comando en la ventana del terminal. 

**Añada manualmente el force-delete-product alias al archivo `alias`**

1. En la AWS CLI consola, vaya a la carpeta AWS CLI de configuración y abra el `alias` archivo. 

1. Introduzca el siguiente alias de código en el archivo, debajo de la línea `[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. Guarde el archivo. 

**Utilice la ventana del terminal para añadir el force-delete-product alias al `alias` archivo**

1. Abra una ventana del terminal y ejecute el siguiente comando

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

1. Pegue el script del alias en la ventana del terminal y, a continuación, pulse *CTRL\$1D* para salir del comando `cat`. 

**Llama al force-delete-product alias**

1. Ejecute los siguientes comandos en una ventana de su terminal para borrar el alias del producto.

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

   El siguiente ejemplo muestra el comando alias `force-delete-product` y su respuesta resultante. 

   ```
                 $ 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. Introduzca `y` para confirmar que desea eliminar el producto. 

Tras eliminar correctamente el producto, la ventana de terminal mostrará los siguientes resultados

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

## Recursos adicionales
<a name="product-delete-cli-resources"></a>

Para obtener más información sobre AWS CLI el uso de alias y la eliminación de AWS Service Catalog productos, consulta los siguientes recursos:
+ [Creación y uso de AWS CLI alias](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-alias.html) en la guía del usuario *AWS Command Line Interface (CLI)*. 
+ AWS CLI repositorio de [alias (repositorio](https://github.com/awslabs/awscli-aliases) git). 
+ [Eliminación de productos AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/productmgmt-delete.html). 
+ [AWS re:Invent 2016: The Effective AWS CLI User on](https://youtu.be/Xc1dHtWa9-Q?t=1593). *YouTube* 