

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.

# Centralización de la distribución de paquetes de software en AWS Organizations mediante Terraform
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform"></a>

*Pradip kumar Pandey, Chintamani Aphale, T.V.R.L.Phani Kumar Dadi, Pratap Kumar Nanda, Aarti Rajput y Mayuri Shinde, Amazon Web Services*

## Resumen
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-summary"></a>

Las empresas suelen mantener varias Cuentas de AWS distribuidas Regiones de AWS en varias para crear una sólida barrera de aislamiento entre las cargas de trabajo. [Para garantizar la seguridad y la conformidad, sus equipos de administración instalan herramientas basadas en agentes [CrowdStrike](https://www.crowdstrike.com/falcon-platform/), como, o [TrendMicro](https://www.trendmicro.com/en_sg/business.html)herramientas para el análisis de seguridad [SentinelOne](https://www.sentinelone.com/platform/), y el agente de [Amazon, el CloudWatch agente](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) de [Datadog o AppDynamics los agentes](https://www.datadoghq.com/) para la supervisión.](https://www.appdynamics.com/product/how-it-works/agents-and-controller) Estos equipos suelen enfrentarse a desafíos cuando quieren automatizar de forma centralizada la administración y distribución de paquetes de software en este entorno tan amplio.

[Distributor](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor.html), una capacidad de [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html), automatiza el proceso de empaquetado y publicación de software en instancias administradas de Microsoft Windows y Linux en la nube y en los servidores en las instalaciones a través de una única interfaz simplificada. Este patrón demuestra cómo puede utilizar Terraform para simplificar aún más el proceso de administración de la instalación del software y ejecutar scripts en un gran número de instancias y cuentas de miembros con un mínimo esfuerzo. AWS Organizations 

Esta solución funciona para instancias de Amazon, Linux y Windows administradas por Systems Manager.

## Requisitos previos y limitaciones
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-prereqs"></a>
+ Un [paquete de Distributor](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor-working-with-packages-create.html) que incluye el software que se va a instalar
+ La versión 0.15.0 o posterior de [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ Instancias de Amazon Elastic Compute Cloud (Amazon EC2) [administradas por Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/managed_instances.html) y con [permisos básicos para acceder a Amazon Simple Storage Service (Amazon S3](https://repost.aws/knowledge-center/ec2-instance-access-s3-bucket)) en la cuenta de destino
+ Una zona de aterrizaje para su organización que se configura mediante [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)
+ (Opcional) [Generador de cuentas paraTerraform (AFT)](https://catalog.workshops.aws/control-tower/en-US/customization/aft)

## Arquitectura
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-architecture"></a>

**Detalles del recurso**

Este patrón usa [Account Factory for Terraform (AFT)](https://catalog.workshops.aws/control-tower/en-US/customization/aft) para crear todos los AWS recursos necesarios y la canalización de código para implementar los recursos en una cuenta de implementación. La canalización de código se ejecuta en dos repositorios:
+ La **personalización global** contiene el código de Terraform que se aplicará a todas las cuentas registradas en AFT.
+ **Las personalizaciones de la cuenta** contienen el código de Terraform que se ejecutará en la cuenta de implementación.

También puede implementar esta solución sin usar AFT; para ello, ejecute los comandos de [Terraform](https://developer.hashicorp.com/terraform/intro) en la carpeta de personalizaciones de la cuenta.

El código de Terraform implementa los siguientes recursos:
+ AWS Identity and Access Management Función y políticas (IAM)
  + [SystemsManager- AutomationExecutionRole](https://docs.aws.amazon.com/systems-manager/latest/userguide/running-automations-multiple-accounts-regions.html) concede al usuario permisos para ejecutar automatizaciones en las cuentas de destino.
  + [SystemsManager- AutomationAdministrationRole](https://docs.aws.amazon.com/systems-manager/latest/userguide/running-automations-multiple-accounts-regions.html) concede al usuario permisos para ejecutar automatizaciones en varias cuentas y unidades organizativas ()OUs.
+ Archivos comprimidos y manifest.json para el paquete
  + En Systems Manager, un [paquete](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor-working-with-packages-create.html) incluye al menos un archivo .zip de software o activos instalables.
  + El manifiesto de JSON incluye indicadores a los archivos de código del paquete.
+ Bucket de S3
  + Los paquetes distribuidos que se comparten entre la organización se almacenan de forma segura en un bucket de Amazon S3.
+ AWS Systems Manager documentos (documentos SSM)
  + `DistributeSoftwarePackage` contiene la lógica para distribuir el paquete de software a todas las instancias de destino de las cuentas de miembros.
  + `AddSoftwarePackageToDistributor`contiene la lógica para empaquetar los activos de software instalables y añadirlos a la automatización, una capacidad de. AWS Systems Manager
+ Asociación de de Systems Manager
  + Se utiliza una asociación de Systems Manager para implementar la solución.

**Arquitectura y flujo de trabajo**

![Diagrama de arquitectura para centralizar la distribución de paquetes de software en AWS Organizations](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/da584449-e12b-4878-a61d-00d8cea3d3d7/images/2718f2c4-f816-4e34-89b8-8182c128e6db.png)


El siguiente diagrama muestra los siguientes pasos:

1. Para ejecutar la solución desde una cuenta centralizada, debe cargar sus paquetes o software junto con los pasos de implementación en un bucket de S3.

1. El paquete personalizado estará disponible en la sección [Documentos](https://ap-southeast-2.console.aws.amazon.com/systems-manager/documents?region=ap-southeast-2) de la consola de Systems Manager, en la pestaña **De mi propiedad**.

1. State Manager, una función de Systems Manager, crea, programa y ejecuta una asociación del paquete en toda la organización. La asociación especifica que el paquete de software debe estar instalado y ejecutándose en un nodo administrado para poder instalarse en el nodo de destino.

1. La asociación indica a Systems Manager que instale el paquete en el nodo de destino.

1. Para cualquier instalación o cambio posterior, los usuarios pueden ejecutar la misma asociación de forma periódica o manual desde una única ubicación para realizar implementaciones en todas las cuentas.

1. En las cuentas de miembros, Automation envía los comandos de implementación a Distributor.

1. Distributor reparte los paquetes de software en todas las instancias.

Esta solución utiliza la cuenta de administración que AWS Organizations contiene, pero también puede designar una cuenta (administrador delegado) para que la gestione en nombre de la organización.

## Tools (Herramientas)
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-tools"></a>

**Servicios de AWS**
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos. Este patrón utiliza Amazon S3 para centralizar y almacenar de forma segura el paquete distribuido.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) lo ayuda a administrar las aplicaciones y la infraestructura que se ejecutan en la Nube de AWS. Simplifica la administración de aplicaciones y recursos, reduce el tiempo necesario para detectar y resolver problemas operativos y le ayuda a administrar sus AWS recursos de forma segura y a escala. Este patrón utiliza las siguientes capacidades de Systems Manager:
  + [Distributor ](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor.html)lo ayuda a empaquetar y publicar el software en nodos administrados de Systems Manager.
  + [La automatización](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html) simplifica las tareas habituales de mantenimiento, implementación y corrección de muchos servicios. AWS 
  + [Documents](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) realiza acciones en las instancias gestionadas por Systems Manager en toda la organización y las cuentas.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)es un servicio de administración de cuentas que le ayuda a consolidar varias AWS cuentas en una organización que puede crear y administrar de forma centralizada.

**Otras herramientas**
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (iAC) HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.

**Repositorio de código**

Las instrucciones y el código de este patrón están disponibles en el repositorio GitHub [centralizado de distribución de paquetes](https://github.com/aws-samples/aws-organization-centralised-package-distribution).

## Prácticas recomendadas
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-best-practices"></a>
+ Para asignar etiquetas a una asociación, use [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) o [Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html). No se admite agregar etiquetas a una asociación mediante la consola de Systems Manager. Para obtener más información, consulte [Etiquetado de recursos de Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/tagging-resources.html) en la documentación de Systems Manager.
+ Para ejecutar una asociación con una versión nueva de un documento compartido desde otra cuenta, debe establecer la versión del documento en `default`.
+ Para etiquetar solo el nodo de destino, utilice una clave de etiqueta. Si quiere dirigir los nodos mediante varias claves de etiqueta, utilice la opción de grupo de recursos.

## Epics
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-epics"></a>

### Configuración de las cuentas y los archivos de origen
<a name="configure-source-files-and-accounts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps ingeniero | 
| Actualice las variables globales. | En el archivo `global-customization/variables.tf`, actualice los siguientes parámetros de entrada: Estas variables se aplican a todas las cuentas creadas y administradas por AFT.[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps ingeniero | 
| Actualice las variables de la cuenta. | En el archivo `account-customization/variables.tf`, actualice los siguientes parámetros de entrada: Estas variables se aplican únicamente a cuentas creadas y administradas específicamente por AFT.[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps ingeniero | 

### Personalización de los parámetros y los archivos de implementación
<a name="customize-parameters-and-deployment-files"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice los parámetros de entrada de la asociación de State Manager. | Actualice los siguientes parámetros de entrada del archivo `account-customization/association.tf` para definir el estado que desea mantener en las instancias. Puede utilizar los valores de parámetros predeterminados si admiten su caso de uso.[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps ingeniero | 
| Prepare los archivos comprimidos y el archivo `manifest.json` para el paquete. | Este patrón proporciona ejemplos de archivos PowerShell instalables (.msi para Windows y .rpm para Linux) con scripts de instalación y desinstalación en la carpeta. `account-customization/package`[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps ingeniero | 

### Ejecución de los comandos de Terraform para aprovisionar recursos
<a name="run-terraform-commands-to-provision-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicialice la configuración de Terraform. | Para implementar la solución automáticamente con AFT, inserte el código en AWS CodeCommit:<pre>$ git add *<br />$ git commit -m "message"<br />$ git push</pre>También puede implementar esta solución sin usar AFT; para ello, ejecute un comando de Terraform de la carpeta `account-customization`. Para inicializar el directorio de trabajo que contiene los archivos Terraform, ejecute:<pre>$ terraform init</pre> | DevOps ingeniero | 
| Previsualice los cambios. | Para obtener una vista previa de los cambios que Terraform realizará en la infraestructura, ejecute el comando:<pre>$ terraform plan</pre>Este comando evalúa la configuración de Terraform para determinar el estado deseado de los recursos que se han declarado. También compara el estado deseado con la infraestructura real que se va a aprovisionar en el espacio de trabajo. | DevOps ingeniero | 
| Aplique los cambios. | Ejecute el siguiente comando para implementar los cambios que realizó en los archivos `variables.tf`:<pre>$ terraform apply</pre> | DevOps ingeniero | 

### Valide los recursos
<a name="validate-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide la creación de documentos SSM. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html)Debería ver los paquetes `DistributeSoftwarePackage` y `AddSoftwarePackageToDistributor`. | DevOps ingeniero | 
| Valide la implementación correcta de las automatizaciones. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps ingeniero | 
| Compruebe que el paquete se haya implementado en las instancias de cuentas de miembros de destino. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps ingeniero | 

## Resolución de problemas
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La asociación de State Manager ha devuelto un error o se encuentra en estado pendiente. | Consulte la [información de solución de problemas](https://repost.aws/knowledge-center/ssm-state-manager-association-fail) en el Centro de AWS conocimiento. | 
| No se pudo ejecutar una asociación programada. | Es posible que la especificación de su programación no sea válida. Actualmente, State Manager no permite especificar meses en expresiones cron para asociaciones. Utilice [expresiones de frecuencia o cron](https://docs.aws.amazon.com/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html) para confirmar la programación. | 

## Recursos relacionados
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-resources"></a>
+ [Distribución centralizada de paquetes](https://github.com/aws-samples/aws-organization-centralised-package-distribution) (GitHub repositorio)
+ [Generador de cuentas para Terraform (AFT)](https://catalog.workshops.aws/control-tower/en-US/customization/aft)
+ [Casos de uso y mejores prácticas](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-best-practices.html) (AWS Systems Manager documentación)