Implementar o AWS CLI e o CloudFormation para Infraestrutura

No passado sombrio dos servidores físicos, a infraestrutura era provisionada usando chaves de fenda e cabos em porões úmidos. Esses tempos sombrios se tornaram mais leves quando as soluções de nuvem pública começaram a substituir a infraestrutura local como a maneira preferida de provisionar e executar servidores. Neste post do blog, aprenda como implantar soluções de nuvem com AWS CLI e CloudFormation.

Este é um post de convidado por Karl Eriksson, cofundador da Mocki – uma ferramenta que permite criar APIs simuladas em minutos.

Se você está executando um ambiente para sua aplicação, então você pode gerenciar facilmente as coisas através de uma interface gráfica do usuário (GUI) como o Console da AWS. Mas quando você tem múltiplos ambientes como desenvolvimento, staging e produção, as coisas se tornam mais difíceis. Erros humanos e tempo entram na mistura. AWS CLI e CloudFormation podem ajudar.

Você precisa gerenciar sua infraestrutura como código. No mundo da AWS, a maneira de fazer isso é com pilhas de CloudFormation.

Ao implantar uma pilha de CloudFormation pela primeira vez, a AWS criará tudo do zero. Se você implantar a pilha como uma atualização, ela detectará quaisquer alterações na infraestrutura e implantará apenas essas alterações.

As pilhas de CloudFormation garantem que as mesmas alterações sejam aplicadas em todos os seus diferentes ambientes.

CloudFormation: Infraestrutura da AWS como Código

AWS Infrastructure as Code Source: https://aws.amazon.com/cloudformation/

AWS CloudFormation é uma ferramenta para escrever e provisionar infraestrutura como código em um ambiente AWS. A maioria dos serviços da AWS é suportada pelo CloudFormation. A maior parte do que você pode criar usando o Console da AWS, como servidores virtuais, bancos de dados, balanceadores de carga e armazenamento de arquivos, pode ser adicionada a uma pilha do CloudFormation. Uma vez adicionados, todos esses recursos podem ser implantados a partir de uma linha de comando ou algum outro processo automatizado.

Para atualizações, o CloudFormation garante que as operações sejam realizadas da maneira mais eficiente e até reverte automaticamente as alterações se algo der errado.

Vamos agora aprender como criar infraestrutura usando o AWS CLI e o CloudFormation.

Pré-requisitos

Para seguir o tutorial do CloudFormation no resto deste artigo, certifique-se de ter o seguinte:

  • Uma conta AWS
  • AWS CLI – Saiba como baixar e configurar aqui. Você pode confirmar que a CLI foi configurada com sucesso executando aws s3 ls. Se o comando retornar com sucesso, tudo está bem.

Se você tiver vários perfis AWS configurados via AWS CLI, use um adequado para fins de desenvolvimento ou teste para uso neste tutorial.

Criando Sua Primeira Pilha CloudFormation

Informações suficientes de fundo, vamos ao trabalho e usar a AWS CLI e o CloudFormation para criar uma pilha!

Neste exemplo, você criará uma pilha contendo a infraestrutura necessária para implantar um site estático hospedado no serviço de hospedagem de arquivos estáticos AWS S3.

Para começar, crie um novo arquivo chamado template.yaml e preencha-o com o conteúdo abaixo:

AWSTemplateFormatVersion: 2010-09-09
Description: A simple CloudFormation template
Resources:
    Bucket:
        Type: AWS::S3::Bucket
        Properties:
            BucketName: your-bucket-name # use seu próprio nome exclusivo
  • AWSTemplateFormatVersion determina a versão do formato para o modelo, para que a AWS possa interpretá-lo corretamente ao implantá-lo.
  • Description – contém uma descrição do modelo que será mostrada no Console da AWS após você tê-lo implantado.
  • Resources – contém toda a infraestrutura que você está adicionando ao modelo. Neste caso, os recursos criarão um bucket S3 simples que hospedará um site estático.

A propriedade BucketName deve ser única, então tente pensar em algo diferente de seu-nome-de-bucket.

Implantando o Stack com AWS CLI e CloudFormation

Agora que você tem um modelo simples criado para implantar, implante-o na AWS usando a AWS CLI e o CloudFormation através do comando abaixo:

aws cloudformation deploy --template-file template.yaml --stack-name static-website

Após executar o comando, navegue até o Console da AWS e vá para Serviços → CloudFormation. Você deverá então ver a implantação em execução. Após alguns minutos, você deverá então vê-la entrar no estado CREATE_COMPLETE. Se sim, está completo!

Se houver algum erro, você deverá ser capaz de vê-los na seção Eventos ao visualizar os detalhes do seu stack.

Ao navegar até ServiçosS3, você deverá ver agora um novo bucket S3 criado.

Construindo o Website Simples

Uma vez que você tenha um bucket S3 em vigor para armazenar um site, crie um arquivo index.html que servirá como o site.

Se você não tiver algo em mente, você pode usar o conteúdo abaixo no seu arquivo index.html:

<html>
  <body>
    <h1>Static Site Deployed Using CloudFormation</h1>
    <p>Hello! This site was deployed using CloudFormation. Go cloud!</p>
  </body>
</html>

Salve o arquivo index.html e faça o upload para o seu bucket S3 através do Console da AWS.

Assegure-se de conceder acesso público de leitura ao arquivo de índice, pois ele será acessível a todos que visitarem o site.

Atualizando o Modelo

Neste momento, o bucket S3 acabado de criar não está configurado para hospedar um site. Vamos alterar isso. Atualmente, você pode baixar o arquivo de índice através do console da AWS, mas não está acessível pela internet pública. Usando a AWS CLI e o CloudFormation, altere a configuração para permitir hospedagem de site estático.

Altere o arquivo template.yaml conforme abaixo para ativá-lo. Abaixo, apresentamos algumas novas propriedades para o nosso modelo.

AWSTemplateFormatVersion: 2010-09-09
Description: A simple CloudFormation template
Resources:
    Bucket:
        Type: AWS::S3::Bucket
        Properties:
            BucketName: your-bucket-name # use o seu próprio nome exclusivo
            AccessControl: PublicRead
            WebsiteConfiguration:
                IndexDocument: index.html
Outputs:
    WebsiteURL:
        Value: !GetAtt [Bucket, WebsiteURL]
        Description: URL for website hosted on S3
  • AccessControl – define os direitos de acesso ao bucket S3 como leitura pública para que qualquer usuário que visite o site possa ver o arquivo index.html
  • WebsiteConfiguration – configura o bucket S3 para funcionar como um site que servirá o arquivo index.html carregado quando os usuários acessarem a URL do bucket
  • Outputs – podem ser diferentes propriedades para os recursos que fazem parte do conjunto. No exemplo acima, o WebsiteURL é a saída do conjunto. Quando você implantar o modelo novamente, deverá ver a URL do site como uma saída no Console do AWS CloudFormation.

Agora, implante as alterações no conjunto existente usando o mesmo comando do passo anterior:

aws cloudformation deploy --template-file template.yaml --stack-name static-website

Para confirmar o resultado, navegue até o console do CloudFormation. Após alguns minutos, você deve notar que o stack está no estado UPDATE_COMPLETE. Quando o stack entrar nesse estado, vá para a aba Outputs, onde você deverá ver o WebsiteUrl adicionado como uma saída no modelo.

Clique na URL fornecida e você deverá ver seu site no navegador.

Parabéns! Com a AWS CLI e o CloudFormation, você agora implantou seu primeiro stack usando infraestrutura como código! Neste ponto, continue adicionando ao seu arquivo de modelo para implantar novas alterações ou crie um novo de acordo com suas necessidades.

Conclusão

Neste tutorial, você aprendeu sobre o conceito de infraestrutura como código e as vantagens que ele tem sobre a provisionamento manual de infraestrutura. Usando a abordagem de infraestrutura como código com a AWS CLI e o CloudFormation, você implantou então um stack para criar um site estático.

Usando os princípios aprendidos neste tutorial, você pode implantar um sistema pronto para produção completamente usando o CloudFormation.

Leitura Adicional

Se você deseja ler mais sobre infraestrutura como código como um fenômeno, confira Infraestrutura como Código no Mundo Real da HashiCorp.

Se você deseja aprender mais sobre como integrar o CloudFormation ao seu fluxo de desenvolvimento e gerenciar toda a sua infraestrutura usando o CloudFormation, não deixe de conferir:

Boa sorte em sua jornada implantando toda a sua infraestrutura usando infraestrutura como código na AWS!

Source:
https://adamtheautomator.com/aws-cli-and-cloudformation/