

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.

# Aprovisione un producto de Terraform AWS Service Catalog mediante un repositorio de código
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository"></a>

*Dr. Rahul Sharad Gaikwad y Tamilselvan P, Amazon Web Services*

## Resumen
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-summary"></a>

AWS Service Catalog [admite el aprovisionamiento de autoservicio con gobernanza para sus configuraciones de Terraform. HashiCorp ](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) Si usa Terraform, puede usar Service Catalog como la única herramienta para organizar, gobernar y distribuir sus configuraciones de Terraform AWS a escala. Puede acceder a las funciones clave de Service Catalog, como la catalogación de plantillas de infraestructura como código (IaC) estandarizadas y previamente aprobadas, el control de acceso, el aprovisionamiento de recursos en la nube con el menor acceso privilegiado, el control de versiones, el uso compartido con miles de personas y el etiquetado. Cuentas de AWS Los usuarios finales, como ingenieros, administradores de bases de datos y científicos de datos, ven una lista de productos y versiones a los que tienen acceso y, a continuación, pueden implementarlos con una sola acción.

Este patrón le ayuda a implementar AWS recursos mediante el código de Terraform. Se accede al código de Terraform del GitHub repositorio a través de Service Catalog. Con este enfoque, puede integrar los productos con los flujos de trabajo de Terraform existentes. Los administradores pueden crear carteras de Service Catalog y añadirles AWS Launch Wizard productos mediante Terraform.

Los siguientes son beneficios de esta solución:
+ Gracias a la característica de reversión de Service Catalog, si se produce algún problema durante la implementación, puede revertir el producto a una versión anterior.
+ Puede identificar fácilmente las diferencias entre las versiones del producto. Esto le permite resolver los problemas durante la implementación.
+ Puede configurar una conexión al repositorio en Service Catalog, por ejemplo, a GitHub o GitLab. Puede realizar cambios en los productos directamente a través del repositorio.

Para obtener información sobre las ventajas generales de AWS Service Catalog, consulte [Qué es Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html).

## Requisitos previos y limitaciones
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ Un GitHub repositorio u otro que contenga archivos de configuración de Terraform en formato ZIP. BitBucket
+ AWS Serverless Application Model Interfaz de línea de comandos (AWS SAM CLI), [instalada](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html).
+ AWS Command Line Interface (AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) y [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
+ Go [instalado](https://go.dev/doc/install).
+ Versión 3.9 de Python, [instalada](https://www.python.org/downloads/release/python-3913/). AWS SAM La CLI requiere esta versión de Python.
+ Permisos para escribir y ejecutar AWS Lambda funciones y permisos para acceder a los productos y carteras de Service Catalog y administrarlos.

## Arquitectura
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-architecture"></a>

![\[Diagrama de arquitectura del aprovisionamiento de un producto de Terraform en Service Catalog desde un repositorio de código\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/7d0d76e8-9485-4b3f-915f-481b6a7cdcd9/images/e83fa44a-4ca6-4438-a0d1-99f09a3541bb.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. Cuando la configuración de Terraform está lista, un desarrollador crea un archivo .zip que contiene todo el código de Terraform. El desarrollador carga el archivo .zip en el repositorio de código que está conectado a Service Catalog.

1. Un administrador asocia el producto de Terraform a una cartera de Service Catalog. El administrador también crea una restricción de lanzamiento que permite a los usuarios finales aprovisionar el producto.

1. En Service Catalog, los usuarios finales lanzan AWS recursos mediante la configuración de Terraform. Pueden elegir qué versión de producto se debe implementar.

## Tools (Herramientas)
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-tools"></a>

**Servicios de AWS**
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)le ayuda a gestionar de forma centralizada los catálogos de servicios de TI aprobados. 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.

**Otros servicios**
+ [Go](https://go.dev/doc/install) es un lenguaje de programación de código abierto compatible con Google.
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.

**Repositorio de código**

Si necesita ejemplos de configuraciones de Terraform que pueda implementar a través de Service Catalog, puede usar las configuraciones del repositorio GitHub [Amazon Macie Organization Setup Using](https://github.com/aws-samples/aws-macie-customization-terraform-samples) Terraform. No es necesario usar los ejemplos de código de este repositorio.

## Prácticas recomendadas
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-best-practices"></a>
+ En lugar de proporcionar los valores de las variables en el archivo de configuración de Terraform (`terraform.tfvars`), configure los valores de las variables al lanzar el producto a través de Service Catalog.
+ Conceda acceso a la cartera solo a usuarios o administradores específicos.
+ Cumpla con el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte las [mejores prácticas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) y [concesión de privilegios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) en la documentación AWS Identity and Access Management (IAM).

## Epics
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-epics"></a>

### Configure su equipo de trabajo local
<a name="set-up-your-local-workstation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| (Opcional) Instale Docker. | Si desea ejecutar las AWS Lambda funciones en su entorno de desarrollo, instale Docker. Para ver instrucciones, consulte [Install Docker Engine](https://docs.docker.com/engine/install/) (Instalar motor de Docker) en la documentación de Docker. | DevOps ingeniero | 
| Instale el AWS Service Catalog motor para Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingeniero, administrador de AWS | 

### Conectar el GitHub repositorio
<a name="connect-the-github-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una conexión con el GitHub repositorio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 

### Creación de un producto de Terraform en Service Catalog
<a name="create-a-terraform-product-in-service-catalog"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree el producto de Service Catalog. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Cree una cartera. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Agregue el producto de Terraform a la cartera. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Cree la política de acceso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Cree una política de confianza personalizada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Agregue una restricción de lanzamiento al producto de Service Catalog. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Conceda acceso al producto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Lance el producto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingeniero | 

### Verifique la implementación
<a name="verify-the-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide la implementación. | Hay dos máquinas de AWS Step Functions estado para el flujo de trabajo de aprovisionamiento de Service Catalog:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html)Debe comprobar los registros de la máquina de estados `ManageProvisionedProductStateMachine` para confirmar que el producto se ha aprovisionado.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingeniero | 

### Limpieza de la infraestructura
<a name="clean-up-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los productos aprovisionados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingeniero | 
| Retire el AWS Service Catalog motor de Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 

## Recursos relacionados
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-resources"></a>

**AWS documentación**
+ [Cómo empezar con un producto de Terraform](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-Terraform.html)

**Documentación de Terraform**
+ [Instalación de Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli)
+ [Terraform backend configuration](https://developer.hashicorp.com/terraform/language/backend)
+ [Documentación de Terraform Provider AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

## Información adicional
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-additional"></a>

**Política de acceso**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/servicecatalog:provisioning": "true"
                }
            }
        },
        {
            "Action": [
                "s3:CreateBucket*",
                "s3:DeleteBucket*",
                "s3:Get*",
                "s3:List*",
                "s3:PutBucketTagging"
            ],
            "Resource": "arn:aws:s3:::*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "resource-groups:CreateGroup",
                "resource-groups:ListGroupResources",
                "resource-groups:DeleteGroup",
                "resource-groups:Tag"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "tag:GetResources",
                "tag:GetTagKeys",
                "tag:GetTagValues",
                "tag:TagResources",
                "tag:UntagResources"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

**Política de confianza**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GivePermissionsToServiceCatalog",
            "Effect": "Allow",
            "Principal": {
                "Service": "servicecatalog.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::account_id:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringLike": {
                    "aws:PrincipalArn": [
                        "arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*",
                        "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*",
                        "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*"
                    ]
                }
            }
        }
    ]
}
```