O blog da AWS

Atualize o AWS Tools for Powershell em grande escala com o AWS Systems Manager

Por Andre Faria

Neste post do Blog, mostrarei como atualizar o AWS Tools for Powershell em grande escala em seu ambiente usando o AWS Systems Manager Run Command.

Atualizar manualmente o AWS Tools for PowerShell em várias instâncias pode ser demorado, ineficiente e propenso a erros. Esses esforços operacionais manuais geralmente resultam em um pesadelo logístico, especialmente em ambientes corporativos de grande porte. O AWS Tools for Powershell são um conjunto de módulos do PowerShell criados com base na funcionalidade exposta pelo SDK da AWS para .NET, que permitem que você crie scripts de operações em seus recursos da AWS dentro da linha de comando do PowerShell. E com o AWS Systems Manager, você pode automatizar tarefas operacionais em seu ambiente de nuvem da AWS e em servidores locais, simplificando o gerenciamento de recursos e aplicativos. Isso facilita a operação e o gerenciamento de sua infraestrutura com segurança em grande escala.

Para esta postagem do blog, criarei um fluxo de trabalho que usa o recurso Run Command do AWS Systems Manager. Esse fluxo de trabalho executará um script do PowerShell que captura a versão do AWS Tools for PowerShell em todas as instâncias gerenciadas do Amazon Elastic Compute Cloud (Amazon EC2) em uma conta da AWS e a atualizará para a versão mais recente, se necessário.

Pré-requisitos

Passo a passo

  1. Abra o console do AWS Systems Manager e selecione a opção Executar comando em Gerenciamento de nós (Figura 1).

Figura 1 — AWS Systems Manager — Executar comandoFigure 1 - AWS Systems Manager - Run Command

2. No painel Comandos, escolha Executar comando (Figura 2).Figure 2 - Commands - Run a command

Figura 2- Comandos — Executar comando

3. Na caixa de pesquisa do documento de comando, digite AWS-RunPowerShellScript e selecione o botão de opção para o comando AWS-RunPowerShellScript (Figura 3).Figure 3 - Select RunPowerShellScript command type

Figura 3- Executar comando — Selecione o tipo de comando RunPowerShellScript

4. No painel Parâmetros de comando, cole o seguinte script do PowerShell, conforme mostrado na Figura 4:

$repo = "PSGallery" # PowerShell Gallery (powershellgallery.com)

# Validate NuGet provider is available (required to interact with PowerShell Gallery)
if(-not (Get-PackageProvider -Name NuGet -ErrorAction SilentlyContinue)) {

  # Install NuGet provider if not present (required to interact with PowerShell Gallery)
  try {
    Install-PackageProvider -Name NuGet -Force | Out-Null
  }
  catch {
    Write-Error "Failed to install NuGet provider: $($_.Exception.Message)"
    Exit
  }

}

# Set approved repository
Set-PSRepository -Name $repo -InstallationPolicy Trusted

# Retrieve installed modules
$installedModules = Get-InstalledModule -Name AWS* -ErrorAction Stop

# Check if AWS modules are not installed
if(-not $installedModules) {
  Write-Output "No AWS modules installed."
  Exit
}

# Loop through each installed AWS module
foreach ($module in $installedModules) {

  # Try to get module from repository
  try {
    $repoModule = Find-Module -Name $module.Name -Repository $repo -ErrorAction Stop
  }
  catch {
    Write-Error "Failed to find $($module.Name) in repository: $($_.Exception.Message)"
    Continue
  }

  # Check if newer version available
  if ($repoModule.Version -gt $module.Version) {

    Write-Output "$($module.Name) $($module.Version) installed. $($repoModule.Name) $($repoModule.Version) available."

    # Uninstall outdated version
    try {
      Uninstall-Module -Name $module.Name -AllVersions -Force -ErrorAction Stop
    }
    catch {
      Write-Error "Failed to uninstall $($module.Name): $($_.Exception.Message)"
      Continue
    }

    # Install latest version
    try {
      Install-Module -Name $module.Name -Force -ErrorAction Stop -Repository $repo
      Write-Output "Updated $($module.Name) to $($repoModule.Version)"
    }
    catch {
      Write-Error "Failed to install $($repoModule.Name): $($_.Exception.Message)"
      Continue
    }

  }
  # Latest version is already installed
  else {
    Write-Output "$($module.Name) $($module.Version) is installed and is the latest available version."
  }

}

Figure 4- Run Command - PowerShell command parameters

Figura 4- Executar comando — parâmetros de comando do PowerShell

Esse script do PowerShell pesquisará todos os módulos do AWS PowerShell instalados na instância em que está sendo executado. Em seguida, ele comparará a versão do módulo instalado com a versão mais recente disponível na Galeria do PowerShell e instalará a versão mais recente, se aplicável.

Há três opções de pacotes do AWS Tools for PowerShell disponíveis para computadores baseados em Windows:

  • AWS.Tools — A versão modularizada do AWS Tools for PowerShell. Cada serviço da AWS é suportado por seu próprio pequeno módulo individual.
  • AWSPowerShell.NetCore — A versão única de módulo grande do AWS Tools for PowerShell. Todos os serviços da AWS são suportados por esse único módulo grande.
  • AWSPowerShell — A versão antiga de módulo grande, específica para Windows, do AWS Tools for PowerShell. Todos os serviços da AWS são suportados por esse único módulo grande.

Esse script atualizará somente os pacotes existentes para uma versão mais recente. Ele não substituirá um pacote por outro (por exemplo, atualizará o AWSPowerShell para AWSPowerShell.NetCore). Para obter mais informações sobre cada pacote disponível, inclusive como determinar qual pacote usar, consulte Quais são as ferramentas da AWS para PowerShell? no guia do usuário.

Também é importante observar que, atualmente, o AWS Tools for PowerShell versão 4 é a versão principal mais recente e fornece compatibilidade com versões anteriores do AWS Tools for PowerShell versão 3.3. Se você estiver atualizando da versão 3.3 para a versão 4, seus scripts existentes devem continuar funcionando com a nova versão. Eu recomendo testar minuciosamente cada um dos seus scripts antes da atualização. Para obter mais informações, consulte Migração do AWS Tools for PowerShell versão 3.3 para a versão 4.

5. Depois de colar o script no painel Parâmetros do comando, role para baixo até o painel Seleção de destino. Há três métodos para selecionar alvos no AWS Systems Manager Run Command:

    • Especificar tags de instância — especifique um ou mais pares de chave-valor de tag para selecionar instâncias que compartilham essas tags.
    • Escolha as instâncias manualmente — Selecione manualmente as instâncias que você deseja registrar como destinos.
    • Escolha um grupo de recursos — Escolha um grupo de recursos que inclua os recursos que você deseja segmentar.

Neste exemplo, usei o método Specify instance tags. Eu atribuí uma chave de tag de update-pstools com um valor de sim a todos os destinos em que eu queria atualizar o AWS Tools for PowerShell (Figura 5).Figure 5- Run Command - Target selection

Figura 5- Executar comando — Seleção de destino

A funcionalidade Executar comando no AWS Systems Manager permite que a saída do comando seja gravada em um bucket do Amazon Simple Storage Service (Amazon S3). Você também pode transmitir a saída do comando para os logs do Amazon CloudWatch.

6. Role para baixo até a seção Opções de saída. Neste exemplo, desativarei a capacidade de gravar a saída do comando em um bucket do Amazon S3 (Figura 6).Figure 6- Run Command - Output options

Figura 6: Executar comando — Opções de saída

Quando estiver pronto para continuar, vá até a parte inferior da página e clique no botão Executar (Figura 7).

Figura 7- Executar comando — Executar

Status e saída do comando

O comando agora será executado em todos os nós com as tags especificadas na etapa anterior. Você pode verificar o status do comando em cada nó consultando a coluna Status na seção Metas e saídas. O status será Em andamento e, eventualmente, mudará para Sucesso quando o script for executado nos nós de destino (Figura 8).Figure 8- Run Command - Targets and outputs

Figura 8- Executar comando — Alvos e saídas

Quando o status mudar para Sucesso para uma determinada instância (Figura 9), você pode clicar no ID da instância para ver a saída do comando dessa instância (Figura 10).

Figura 9- Executar comando — Status de destinos e saídasFigure 10- Run Command - Command Output

Figura 10- Executar comando — Saída de comando

A Figura 10 mostra que a instância de exemplo tinha versões modularizadas do AWS Tools for PowerShell para vários serviços. Cada módulo individual estava desatualizado e, portanto, atualizado para a versão mais recente disponível quando eu executei o script.

Limpeza

Como nenhum recurso é criado em sua conta da AWS seguindo as etapas descritas neste exemplo, nenhuma limpeza é necessária.

Conclusão

Nesta postagem do blog, demonstrei como você pode usar o AWS Systems Manager Run Command para atualizar o AWS Tools for PowerShell em seus nós gerenciados de forma simples e automatizada. Isso permitirá que você reduza a sobrecarga operacional, melhore a consistência em seu ambiente e aprimore a segurança, permitindo que as atualizações sejam realizadas de maneira oportuna e repetível. Para saber mais sobre outros recursos do AWS Systems Manager, consulte a documentação do AWS Systems Manager.

A AWS tem significativamente mais serviços e mais recursos dentro desses serviços do que qualquer outro provedor de nuvem, tornando mais rápido, fácil e econômico mover seus aplicativos existentes para a nuvem e criar praticamente qualquer coisa que você possa imaginar. Ofereça aos seus aplicativos Microsoft a infraestrutura de que eles precisam para gerar os resultados comerciais que você deseja. Visite nossos blogs sobre o.NET na AWS e no banco de dados da AWS para obter orientações e opções adicionais para suas cargas de trabalho da Microsoft. Entre em contato conosco para iniciar sua jornada de migração e modernização hoje mesmo.

Este blog em português é uma tradução do blog original em inglês.

TAGS: automação, AWS Systems Manager, Windows On AWS, Windows Server

Autor

Andre Faria é gerente técnico sênior de contas com sede em Milford, Connecticut. Ele trabalha na organização Automotive Strategic Industries do AWS Enterprise Support, apoiando grandes empresas automotivas em sua jornada na nuvem. Fora do trabalho, ele é um entusiasta da aviação e piloto particular, então você provavelmente o encontrará voando pelo nordeste dos EUA.

 

 

Tradutores e Revisores

Luiz Rampanelli é um Solutions Architect no time da AWS Latam. Possui mais de 10 anos de experiência com workloads Microsoft em nuvem e ambientes híbridos. Atua com desenho de soluções seguindo as melhores práticas para que os clientes possam aproveitar ao máximo os benefícios da nuvem da AWS.
Diego Voltz atua como arquiteto de soluções senior no seguimento de enterprise na AWS no sul da Florida. Ele atuou por 15 anos como CTO de Startups no seguimento de Web Hosting e Health, tendo como foco virtualização, Storage e containers, hoje ajuda os clientes da AWS na jornada de adoção da nuvem e na otimização dos custos.