

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.

# Automatice la implementación de productos y la cartera de AWS Service Catalog mediante AWS CDK
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk"></a>

*Sandeep Gawande, Viyoma Sachdeva y RAJNEESH TYAGI, Amazon Web Services*

## Resumen
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-summary"></a>

AWS Service Catalog le ayuda a administrar de forma centralizada los catálogos de servicios de TI o *productos* aprobados para su uso en el entorno de AWS de su organización. La *cartera* es una colección de productos que, además, contiene información de configuración. Con AWS Service Catalog, puede crear una cartera de productos personalizada para cada tipo de usuario de su organización y conceder acceso a la cartera de productos apropiada. Después, esos usuarios pueden implementar rápidamente cualquier producto que necesiten de la cartera.

Si tiene una infraestructura de red compleja, como arquitecturas en múltiples regiones y cuentas, se recomienda crear y administrar las carteras de Service Catalog en una única cuenta centralizada. Este patrón describe cómo usar AWS Cloud Development Kit (AWS CDK) para automatizar la creación de carteras de Service Catalog en una cuenta central, conceder a los usuarios finales acceso a ellas y, opcionalmente, aprovisionar productos en una o más cuentas de AWS de destino. Esta ready-to-use solución crea las carteras de Service Catalog en la cuenta de origen. También, de forma opcional, aprovisiona los productos en las cuentas de destino mediante AWS CloudFormation stacks y le ayuda a TagOptions configurarlos:
+ **AWS CloudFormation StackSets**: puede utilizarlos StackSets para lanzar productos de Service Catalog en varias regiones y cuentas de AWS. La implementación de esta solución le permite aprovisionar productos automáticamente. Para obtener más información, consulte [Uso de AWS CloudFormation StackSets](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/using-stacksets.html) (documentación de Service Catalog) y [StackSets conceptos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html) (CloudFormation documentación).
+ **TagOption biblioteca**: puede administrar las etiquetas de los productos aprovisionados mediante la TagOption biblioteca. A *TagOption*es un par clave-valor administrado en AWS Service Catalog. No es una etiqueta de AWS, pero sirve como plantilla para crear una etiqueta de AWS basada en TagOption. Para obtener más información, consulte la [TagOption biblioteca](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/tagoptions.html) (documentación de Service Catalog).

## Requisitos previos y limitaciones
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa que quiera usar como cuenta de supervisión para administrar carteras de Service Catalog.
+ Si usa esta solución para aprovisionar productos en una o más cuentas de destino, la cuenta de destino debe existir ya y estar activa.
+ Permisos de AWS Identity and Access Management (IAM) para acceder a AWS Service Catalog CloudFormation, AWS y AWS IAM.

**Versiones de producto**
+ AWS CDK versión 2.27.0

## Arquitectura
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-architecture"></a>

**Pila de tecnología de destino**
+ Carteras de Service Catalog en una cuenta de AWS centralizada
+ Productos de Service Catalog implementados en la cuenta de destino

**Arquitectura de destino**

![\[AWS CDK crea carteras de Service Catalog y aprovisiona productos en la cuenta de destino.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e8f217a7-aec4-4c85-8f6b-f91995506be0/images/1f027b82-14c3-485a-909b-1544e974b90a.png)


1. En la cuenta de cartera (u *origen*), debe actualizar el archivo **config.json** con la información de la cuenta de AWS, la región de AWS, el rol de IAM, la cartera y el producto para su caso de uso.

1. Implemente la aplicación AWS CDK.

1. La aplicación AWS CDK asume el rol de IAM de implementación y crea las carteras y los productos de Service Catalog definidos en el archivo **config.json**.

   Si ha configurado StackSets la implementación de productos en una cuenta de destino, el proceso continúa. Si no lo configuraste StackSets para aprovisionar ningún producto, el proceso está completo.

1. La aplicación AWS CDK asume la función de **StackSet administrador** e implementa el conjunto de CloudFormation pilas de AWS que definió en el archivo **config.json**.

1. En la cuenta de destino, StackSets asume la función de **StackSet ejecución y aprovisiona** los productos.

## Tools (Herramientas)
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) es un marco de desarrollo de software que le ayuda a definir y aprovisionar la infraestructura de la nube de AWS en código.
+ El [Kit de herramientas de AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) es un kit de desarrollo en la nube de línea de comandos que le ayuda a interactuar con su aplicación AWS CDK.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) le ayuda a administrar de forma centralizada los catálogos de servicios de TI aprobados para AWS. Los usuarios finales pueden implementar rápidamente solo los servicios de TI aprobados que necesitan, de acuerdo con las limitaciones establecidas por su organización.

**Repositorio de código**

El código de este patrón está disponible en GitHub, en el [aws-cdk-servicecatalog-automation](https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git)repositorio. El repositorio de código contiene los siguientes archivos y carpetas:
+ **cdk-sevicecatalog-app**— Esta carpeta contiene la aplicación AWS CDK para esta solución.
+ **config**: esta carpeta contiene el archivo **config.json** y la CloudFormation plantilla para implementar los productos de la cartera de Service Catalog.
+ **config/config.json**: este archivo contiene toda la información de configuración. Actualice este archivo para personalizar esta solución según su caso de uso.
+ **config/templates**: esta carpeta contiene las CloudFormation plantillas de los productos de Service Center.
+ **setup.sh**: este script implementa la solución.
+ **uninstall.sh**: este script elimina la pila y todos los recursos de AWS creados al implementar esta solución.

Para usar el código de muestra, siga las instrucciones en sección [Epics](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-epics).

## Prácticas recomendadas
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-best-practices"></a>
+ Los roles de IAM usados para implementar esta solución deben cumplir con el [principio de privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) (documentación de IAM).
+ Respete las [Prácticas recomendadas para desarrollar aplicaciones en la nube con AWS CDK](https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk/) (publicación del blog de AWS).
+ Siga las [prácticas CloudFormation recomendadas de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html) (CloudFormation documentación).

## Epics
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-epics"></a>

### Configure su entorno
<a name="set-up-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale el kit de herramientas de AWS CDK. | Asegúrese de tener instalado el kit de herramientas de AWS CDK. Ejecute el siguiente comando para confirmar si está instalado y verifique la versión. <pre>cdk --version</pre>Si el kit de herramientas de AWS CDK no está instalado, ejecute el siguiente comando para instalarlo.<pre>npm install -g aws-cdk@2.27.0</pre>Si la versión del kit de herramientas de AWS CDK es anterior a la 2.27.0, ejecute el siguiente comando para actualizarla a la versión 2.27.0.<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps, DevOps ingeniero | 
| Clonar el repositorio. | Escriba el siguiente comando. En *Clonar el repositorio*, en la sección [Información adicional](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional), puede copiar el comando completo que contiene la URL del repositorio. Esto clona el [aws-cdk-servicecatalog-automation](https://github.com/aws-samples/aws-cdk-servicecatalog-automation)repositorio desde GitHub.<pre>git clone <repository-URL>.git</pre>Se creará la carpeta `cd aws-cdk-servicecatalog-automation` en el directorio de destino. Ejecute el siguiente comando para navegar a esta carpeta.<pre>cd aws-cdk-servicecatalog-automation</pre> | AWS DevOps, DevOps ingeniero | 
| Configure las credenciales de AWS. | Introduzca los comandos siguientes. Se exportan las siguientes variables, que definen la cuenta y la región de AWS en las que se va a implementar la pila.<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre>Las credenciales de AWS para AWS CDK se proporcionan a través de variables de entorno. | AWS DevOps, DevOps ingeniero | 
| Configurar permisos de roles de IAM para usuarios finales. | Si va a usar roles de IAM para conceder acceso a la cartera y a los productos que contiene, estos roles deben tener permisos para que los asuma la entidad principal **servicecatalog.amazonaws.com**. Para obtener instrucciones sobre cómo conceder estos permisos, consulte [Habilitar acceso de confianza con Service Catalog](https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-servicecatalog.html#integrate-enable-ta-servicecatalog) (documentación de AWS Organizations). | AWS DevOps, DevOps ingeniero | 
| Configure las funciones de IAM requeridas por StackSets. | Si va StackSets a aprovisionar automáticamente los productos en las cuentas de destino, debe configurar las funciones de IAM que administran y ejecutan el conjunto apilado.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html) | AWS DevOps, DevOps ingeniero | 

### Personalice e implemente la solución
<a name="customize-and-deploy-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crea las CloudFormation plantillas. | En la `config/templates` carpeta, crea CloudFormation plantillas para cualquier producto que desees incluir en tus carteras. Para obtener más información, consulte [Trabajar con CloudFormation plantillas de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) (CloudFormation documentación). | Desarrollador de aplicaciones, AWS DevOps, DevOps ingeniero | 
| Personalice el archivo de configuración. | En la carpeta `config`, abra el archivo **config.json** y defina los parámetros según corresponda a su caso de uso. Los siguientes parámetros son obligatorios a menos que se indique lo contrario:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html)Para ver un ejemplo de un archivo de configuración completo, consulte el *Ejemplo de archivo de configuración* en la sección [Información adicional](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional). | Desarrollador de aplicaciones, DevOps ingeniero, AWS DevOps | 
| Implemente la solución. | Escriba el siguiente comando. Esto implementa la aplicación AWS CDK y aprovisiona las carteras y productos de Service Catalog, tal y como se especifica en el archivo **config.json**.<pre>sh +x setup.sh</pre> | Desarrollador de aplicaciones, DevOps ingeniero, AWS DevOps | 
| Comprobar la implementación. | Compruebe que la implementación se ha realizado correctamente de la siguiente manera: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html) | AWS general | 
| (Opcional) Actualice las carteras y los productos. | Si desea usar esta solución para actualizar las carteras o los productos, o para aprovisionar nuevos productos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html)Por ejemplo, puede añadir carteras adicionales o aprovisionar más recursos. La aplicación AWS CDK implementará solo los cambios. Si no hay cambios en las carteras o los productos implementados anteriormente, la reimplementación no les afectará. | Desarrollador de aplicaciones, DevOps ingeniero, AWS general | 

### Elimine la solución
<a name="clean-up-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| (Opcional) Elimine los recursos de AWS implementados por esta solución. | Si desea eliminar un producto aprovisionado, siga las instrucciones de [Eliminar productos aprovisionados](https://docs.aws.amazon.com/servicecatalog/latest/userguide/enduser-delete.html) (documentación de Service Catalog).Si desea eliminar todos los recursos creados por esta solución, ejecute el siguiente comando.<pre>sh uninstall.sh</pre> | AWS DevOps, DevOps ingeniero, desarrollador de aplicaciones | 

## Recursos relacionados
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-resources"></a>
+ [Biblioteca de constructos de AWS Service Catalog](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_servicecatalog-readme.html) (referencia de API de AWS)
+ [StackSets conceptos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html) (CloudFormation documentación)
+ [AWS Service Catalog](https://aws.amazon.com/servicecatalog) (marketing de AWS)
+ [Uso de Service Catalog con AWS CDK](https://catalog.us-east-1.prod.workshops.aws/workshops/d40750d7-a330-49be-9945-cde864610de9/en-US/4-builders-devs/sc-cdk) (taller de AWS)

## Información adicional
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional"></a>

**Clone el repositorio**

Introduzca el siguiente comando desde el que desea clonar el repositorio GitHub.

```
git clone https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git
```

**Ejemplo de archivo de configuración**

El siguiente es un archivo de muestra **config.json** con valores de ejemplo.

```
{
    "portfolios": [
        {
            "displayName": "EC2 Product Portfolio",
            "providerName": "User1",
            "description": "Test1",
            "roles": [
                "<Names of IAM roles that can access the products>"
            ],
            "users": [
                "<Names of IAM users who can access the products>"
            ],
            "groups": [
                "<Names of IAM user groups that can access the products>"
            ]
        },
        {
            "displayName": "Autoscaling Product Portfolio",
            "providerName": "User2",
            "description": "Test2",
            "roles": [
                "<Name of IAM role>"
            ]
        }
    ],
    "tagOption": [
        {
            "key": "Group",
            "value": [
                "finance",
                "engineering",
                "marketing",
                "research"
            ]
        },
        {
            "key": "CostCenter",
            "value": [
                "01",
                "02",
                "03",
                "04"
            ]
        },
        {
            "key": "Environment",
            "value": [
                "dev",
                "prod",
                "stage"
            ]
        }
    ],
    "products": [
        {
            "portfolioName": "EC2 Product Profile",
            "productName": "Ec2",
            "owner": "owner1",
            "productVersionName": "v1",
            "templatePath": "../../config/templates/template1.json"
        },
        {
            "portfolioName": "Autoscaling Product Profile",
            "productName": "autoscaling",
            "owner": "owner1",
            "productVersionName": "v1",
            "templatePath": "../../config/templates/template2.json",
            "deployWithStackSets": {
                "accounts": [
                    "012345678901",
                ],
                "regions": [
                    "us-west-2"
                ],
                "stackSetAdministrationRoleName": "AWSCloudFormationStackSetAdministrationRole",
                "stackSetExecutionRoleName": "AWSCloudFormationStackSetExecutionRole"
            }
        }
    ]
}
```