

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Centralização da distribuição de pacotes de software no AWS Organizations usando o 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 e Mayuri Shinde, Amazon Web Services*

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

As empresas geralmente mantêm várias Contas da AWS que estão espalhadas por várias Regiões da AWS para criar uma forte barreira de isolamento entre as cargas de trabalho. [Para se manterem seguras e em conformidade, suas equipes de administração instalam ferramentas baseadas em agentes [CrowdStrike](https://www.crowdstrike.com/falcon-platform/), como [SentinelOne](https://www.sentinelone.com/platform/), ou [TrendMicro](https://www.trendmicro.com/en_sg/business.html)ferramentas para verificação de segurança, e o [ CloudWatch agente Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html), o [Datadog Agent](https://www.datadoghq.com/) ou agentes para monitoramento. AppDynamics ](https://www.appdynamics.com/product/how-it-works/agents-and-controller) Essas equipes costumam enfrentar dificuldades ao tentar automatizar de forma centralizada o gerenciamento e a distribuição de pacotes de software em todo esse vasto cenário.

O [Distributor](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor.html), uma funcionalidade do [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html), automatiza o processo de empacotamento e de publicação de software em instâncias gerenciadas do Microsoft Windows e do Linux, tanto na nuvem quanto em servidores on-premises, por meio de uma interface única e simplificada. Esse padrão demonstra como você pode usar o Terraform para simplificar ainda mais o processo de gerenciamento da instalação do software e executar scripts em um grande número de instâncias e contas de membros AWS Organizations com o mínimo esforço.

Esta solução é aplicável a instâncias da Amazon, do Linux e do Windows que são gerenciadas pelo Systems Manager.

## Pré-requisitos e limitações
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-prereqs"></a>
+ Um [pacote do Distributor](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor-working-with-packages-create.html) com o software que será instalado
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) versão 0.15.0 ou versões posteriores
+ Instâncias do Amazon Elastic Compute Cloud (Amazon EC2) que são [gerenciadas pelo Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/managed_instances.html) e têm [permissões básicas para acessar o Amazon Simple Storage Service (Amazon](https://repost.aws/knowledge-center/ec2-instance-access-s3-bucket) S3) na conta de destino
+ Uma zona de pouso para sua organização que é configurada usando o [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)
+ (Opcional) O [Account Factory for Terraform (AFT)](https://catalog.workshops.aws/control-tower/en-US/customization/aft)

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

**Detalhes do recurso**

Esse padrão usa o [Account Factory for Terraform (AFT)](https://catalog.workshops.aws/control-tower/en-US/customization/aft) para criar todos os AWS recursos necessários e o pipeline de código para implantar os recursos em uma conta de implantação. O pipeline de código é executado em dois repositórios:
+ A **personalização global** contém código do Terraform que será executado em todas as contas registradas no AFT.
+ As **personalizações da conta** contêm código do Terraform que será executado na conta de implantação.

É possível implantar esta solução sem usar o AFT, executando os comandos do [Terraform](https://developer.hashicorp.com/terraform/intro) na pasta de personalização das contas.

O código do Terraform implanta os seguintes recursos:
+ AWS Identity and Access Management Papel e políticas (IAM)
  + [SystemsManager- AutomationExecutionRole](https://docs.aws.amazon.com/systems-manager/latest/userguide/running-automations-multiple-accounts-regions.html) concede ao usuário permissões para executar automações nas contas de destino.
  + [SystemsManager- AutomationAdministrationRole](https://docs.aws.amazon.com/systems-manager/latest/userguide/running-automations-multiple-accounts-regions.html) concede ao usuário permissões para executar automações em várias contas e unidades organizacionais (OUs).
+ Arquivos compactados e manifest.json para o pacote
  + No Systems Manager, um [pacote](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor-working-with-packages-create.html) contém, pelo menos, um arquivo .zip de software ou de ativos instaláveis.
  + O manifesto JSON inclui referências aos arquivos de código do seu pacote.
+ Bucket do S3
  + O pacote distribuído, compartilhado por toda a organização, é armazenado de forma segura em um bucket do Amazon S3.
+ AWS Systems Manager documentos (documentos SSM)
  + O `DistributeSoftwarePackage` contém a lógica para distribuir o pacote de software para todas as instâncias de destino nas contas de membros.
  + `AddSoftwarePackageToDistributor`contém a lógica para empacotar os ativos de software instaláveis e adicioná-los à automação, um recurso de AWS Systems Manager.
+ Systems Manager (Gerenciador de sistemas)Associação
  + Uma associação do AWS Systems Manager é usada para implantar a solução.

**Arquitetura e fluxo de trabalho**

![Diagrama da arquitetura para centralizar a distribuição de pacotes de software nas AWS Organizations.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/da584449-e12b-4878-a61d-00d8cea3d3d7/images/2718f2c4-f816-4e34-89b8-8182c128e6db.png)


O diagrama ilustra as seguintes etapas:

1. Para executar a solução de uma conta centralizada, você faz o upload dos seus pacotes ou do software junto com as etapas de implantação para um bucket do S3.

1. Seu pacote personalizado ficará disponível na seção [Documentos](https://ap-southeast-2.console.aws.amazon.com/systems-manager/documents?region=ap-southeast-2) da console do Systems Manager, na guia **De minha propriedade**.

1. O Gerenciador de Estados, uma funcionalidade do Systems Manager, cria, agenda e executa uma associação para o pacote em toda a organização. A associação especifica que o pacote de software deve ser instalado e estar em execução em um nó gerenciado antes de ser instalado no nó de destino.

1. A associação orienta o Systems Manager a instalar o pacote no nó de destino.

1. Para qualquer instalação ou alteração subsequente, os usuários podem executar a mesma associação periódica ou manualmente de um único local para realizar implantações entre as contas.

1. Nas contas de membros, o Automation envia comandos de implantação ao Distributor.

1. O Distributor distribui pacotes de software entre as instâncias.

Essa solução usa a conta de gerenciamento interna AWS Organizations, mas você também pode designar uma conta (administrador delegado) para gerenciá-la em nome da organização.

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

**Serviços da AWS**
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados. Esse padrão usa o Amazon S3 para centralizar e armazenar com segurança o pacote distribuído.
+ O [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) ajuda você a gerenciar suas aplicações e infraestrutura em execução na Nuvem AWS. Ele simplifica o gerenciamento de aplicativos e recursos, reduz o tempo para detectar e resolver problemas operacionais e ajuda você a gerenciar seus AWS recursos com segurança em grande escala. Este padrão usa as seguintes funcionalidades do Systems Manager:
  + O [Distributor](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor.html) auxilia no empacotamento e na publicação de software em instâncias gerenciadas pelo Systems Manager.
  + [A automação](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html) simplifica as tarefas comuns de manutenção, implantação e remediação de muitos AWS serviços.
  + Os [Documentos](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) realizam ações nas instâncias gerenciadas pelo Systems Manager em toda a organização e nas contas.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)é um serviço de gerenciamento de contas que ajuda você a consolidar várias AWS contas em uma organização que você cria e gerencia centralmente.

**Outras ferramentas**
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

**Repositório de código**

As instruções e o código desse padrão estão disponíveis no repositório GitHub [centralizado de distribuição de pacotes](https://github.com/aws-samples/aws-organization-centralised-package-distribution).

## Práticas recomendadas
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-best-practices"></a>
+ Para atribuir etiquetas a uma associação, use a [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ou as [Ferramentas da AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html). Não há suporte à adição de tags a uma associação usando o console do Systems Manager. Para obter mais informações, consulte [Marcação de recursos do Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/tagging-resources.html) na documentação do Systems Manager.
+ Para executar uma associação usando uma nova versão de um documento compartilhado de outra conta, defina a versão do documento como `default`.
+ Para marcar apenas o nó de destino, use uma chave de etiqueta. Se desejar segmentar os nós com várias chaves de etiqueta, use a opção de grupo de recursos.

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

### Configuração de arquivos e contas de origem
<a name="configure-source-files-and-accounts"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 
| Atualize as variáveis globais. | Atualize os parâmetros de entrada apresentados a seguir no arquivo `global-customization/variables.tf`. Essas variáveis se aplicam a todas as contas que são criadas e gerenciadas pelo AFT.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 
| Atualize as variáveis da conta. | Atualize os parâmetros de entrada apresentados a seguir no arquivo `account-customization/variables.tf`. Essas variáveis se aplicam apenas a contas específicas criadas e gerenciadas pelo AFT.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 

### Personalização dos parâmetros e dos arquivos de implantação
<a name="customize-parameters-and-deployment-files"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atualize os parâmetros de entrada para a associação do Gerenciador de Estados. | Atualize os parâmetros de entrada apresentados a seguir no arquivo `account-customization/association.tf` para definir o estado que você deseja manter em suas instâncias. É possível usar os valores padrão dos parâmetros, caso se adequem ao seu caso de uso.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 
| Prepare os arquivos compactados e o arquivo `manifest.json` para o pacote. | Esse padrão fornece exemplos de arquivos PowerShell instaláveis (.msi para Windows e .rpm para Linux) com scripts de instalação e desinstalação na pasta. `account-customization/package`[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 

### Executar comandos do Terraform para provisionar recursos
<a name="run-terraform-commands-to-provision-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicialize a configuração do Terraform. | Para implantar a solução automaticamente com o AFT, envie o código para o AWS CodeCommit:<pre>$ git add *<br />$ git commit -m "message"<br />$ git push</pre>É possível implantar esta solução sem usar o AFT, executando o comando do Terraform a partir da pasta `account-customization`. Para inicializar o diretório de trabalho que contém os arquivos do Terraform, execute:<pre>$ terraform init</pre> | DevOps engenheiro | 
| Pré-visualize as alterações. | Para visualizar previamente as alterações que o Terraform fará na infraestrutura, execute o comando:<pre>$ terraform plan</pre>Este comando avalia a configuração do Terraform para determinar o estado desejado dos recursos que foram declarados. O comando também compara o estado desejado com a infraestrutura real a ser provisionada no espaço de trabalho. | DevOps engenheiro | 
| Aplique as alterações. | Execute o seguinte comando para aplicar as alterações que você fez nos arquivos `variables.tf`:<pre>$ terraform apply</pre> | DevOps engenheiro | 

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Valide a criação dos documentos do SSM. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html)Você deverá ver os pacotes `DistributeSoftwarePackage` e `AddSoftwarePackageToDistributor`. | DevOps engenheiro | 
| Valide a implantação com êxito das automações. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 
| Valide se o pacote foi implantado nas instâncias de destino da conta de membro. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 

## Solução de problemas
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| A associação do Gerenciador de Estados falhou ou está travada no status “pendente”. | Consulte as [informações de solução de problemas](https://repost.aws/knowledge-center/ssm-state-manager-association-fail) no Centro de AWS Conhecimento. | 
| Uma associação agendada falhou ao ser executada. | A especificação do seu agendamento pode ser inválida. No momento, o Gerenciador de Estados não fornece suporte à especificação de meses em expressões cron para associações. Use [expressões rate ou cron](https://docs.aws.amazon.com/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html) para confirmar o agendamento. | 

## Recursos relacionados
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-resources"></a>
+ [Distribuição centralizada de pacotes](https://github.com/aws-samples/aws-organization-centralised-package-distribution) (GitHub repositório)
+ [Account Factory for Terraform (AFT)](https://catalog.workshops.aws/control-tower/en-US/customization/aft)
+ [Casos de uso e melhores práticas](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-best-practices.html) (AWS Systems Manager documentação)