Centralização da distribuição de pacotes de software no AWS Organizations usando o Terraform - Recomendações da AWS

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

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

Resumo

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, como SentinelOne, ou TrendMicroferramentas para verificação de segurança, e o CloudWatch agente Amazon, o Datadog Agent ou agentes para monitoramento. AppDynamics 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, uma funcionalidade do AWS Systems Manager, 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

Arquitetura

Detalhes do recurso

Esse padrão usa o Account Factory for Terraform (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 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)

  • Arquivos compactados e manifest.json para o pacote

    • No Systems Manager, um pacote 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.

    • AddSoftwarePackageToDistributorconté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.

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.

  2. Seu pacote personalizado ficará disponível na seção Documentos da console do Systems Manager, na guia De minha propriedade.

  3. 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.

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

  5. 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.

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

  7. 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

Serviços da AWS

  • O Amazon Simple Storage Service (Amazon S3) é 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 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 auxilia no empacotamento e na publicação de software em instâncias gerenciadas pelo Systems Manager.

    • A automação simplifica as tarefas comuns de manutenção, implantação e remediação de muitos AWS serviços.

    • Os Documentos realizam ações nas instâncias gerenciadas pelo Systems Manager em toda a organização e nas contas.

  • AWS Organizationsé 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 é 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.

Práticas recomendadas

  • Para atribuir etiquetas a uma associação, use a AWS Command Line Interface (AWS CLI) ou as Ferramentas da AWS para PowerShell. 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 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

TarefaDescriptionHabilidades necessárias

Clonar o repositório.

  1. Clone o repositório GitHub centralizado de distribuição de pacotes:

    git clone https://github.com/aws-samples/aws-organization-centralised-package-distribution
  2. O repositório de código do Terraform requer duas pastas de personalização que são gerenciadas pelo AFT. Confirme que sua cópia local do repositório contém essas pastas:

    $ cd centralised-package-distribution $ ls global-customization account-customization
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.

  • account_id: o ID da conta em que a solução Distributor será implantada.

  • aws_region: O Região da AWS local onde a associação será implantada.

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.

  • package_bucket_name: o nome do bucket do S3 que contém o arquivo de distribuição do pacote.

  • package_name: o nome do arquivo de distribuição do pacote.

  • package_version: a versão do pacote do instalador.

DevOps engenheiro
TarefaDescriptionHabilidades 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.

  • targetAccounts: a unidade organizacional (OU) IDs dentro do AWS Organizations que representa contas com as instâncias de destino para distribuição. OU IDs começa com “você”.

  • targetRegions: o Regiões da AWS (por exemplo, “us-east-1″ ou “ap-southeast-2") em que as instâncias de destino estão sendo executadas.

  • action: especifique se deve instalar ou desinstalar o pacote.

  • installationType: um dos seguintes tipos de instalação:

    • uninstall: o pacote é desinstalado.

    • reinstall: a aplicação é mantida off-line até que o processo de reinstalação seja concluído.

    • In-place update: a aplicação permanece disponível enquanto novos arquivos ou arquivos atualizados são adicionados à instalação.

  • name: o nome do pacote a ser instalado ou desinstalado.

  • version: a versão do pacote a ser instalada ou desinstalada. Caso nenhuma versão do pacote esteja instalada, o sistema retornará um erro.

  • bucketName: o nome do bucket do S3 para o qual o pacote foi implantado. Este bucket deve conter apenas os pacotes e o arquivo de manifesto.

  • bucketPrefix: o prefixo do S3 no qual os ativos do pacote estão armazenados.

  • AutomationAssumeRole: o nome do recurso da Amazon (ARN) do SystemsManager-AutomationAdministrationRole.

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

  1. Substitua os arquivos PowerShell instaláveis pelos seus próprios arquivos ou forneça seu arquivo instalável, scripts de instalação e desinstalação e arquivo de manifesto para criar um pacote na account-customization pasta da sua conta.

  2. Personalize o arquivo manifest.json padrão que o Terraform gera na pasta account-customization de acordo com seus requisitos.

DevOps engenheiro
TarefaDescriptionHabilidades 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:

$ git add * $ git commit -m "message" $ git push

É 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:

$ terraform init
DevOps engenheiro

Pré-visualize as alterações.

Para visualizar previamente as alterações que o Terraform fará na infraestrutura, execute o comando:

$ terraform plan

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:

$ terraform apply
DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Valide a criação dos documentos do SSM.

  1. No console do Systems Manager, no painel de navegação à esquerda, escolha Documentos.

  2. Escolha a guia De minha propriedade.

Você deverá ver os pacotes DistributeSoftwarePackage e AddSoftwarePackageToDistributor.

DevOps engenheiro

Valide a implantação com êxito das automações.

  1. No console do Systems Manager, no painel de navegação à esquerda, escolha Automações.

  2. Na lista Execuções de automações, você deverá ver as implantações mais recentes dos pacotes DistributeSoftwarePackage e AddSoftwarePackageToDistributor.

  3. Selecione ID de execução para validar que os pacotes foram concluídos com êxito.

DevOps engenheiro

Valide se o pacote foi implantado nas instâncias de destino da conta de membro.

  1. No console do Systems Manager, no painel de navegação, selecione Executar comando.

  2. No Histórico de comandos, você verá cada invocação e o respectivo status.

  3. Escolha qualquer ID de comando para ver o histórico de implantação para cada instância de destino.

  4. Selecione o ID da instância e verifique a seção Saída da distribuição.

DevOps engenheiro

Solução de problemas

ProblemaSolução

A associação do Gerenciador de Estados falhou ou está travada no status “pendente”.

Consulte as informações de solução de problemas 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 para confirmar o agendamento.

Recursos relacionados