Como acelerar sua jornada DevOps utilizando o AWS Deployment Framework

Pensando em uma cultura Devops, temos diversas ferramentas que surgem na nossa mente como Jekins, Github GitLab, essas ferramentas são poderosas, porém requerem conhecimentos avançados além do mais, em alguns casos como o Jenkins, exige uma arquitetura por trás, seja um cluster de EC2 em uma conta AWS, ou um ambiente instalado em sua infraestrutura on-premises, exigindo uma manutenção do seu ambiente como atualização do sistema operacional, atualização de patches etc.

É justamente aqui que entra o AWS Deployment Framework ou ADF, ele é um framework desenvolvido pela própria AWS para a realização de deployments em múltiplas contas ou regiões AWS, este framework é baseado no AWS Organizations, é uma ferramenta versátil e bem simples de utilizar.

O ADF exige conhecimentos da cultura Devops, mas o diferencial é que ele funciona integrado aos serviços AWS, a AWS possui uma vasta documentação sobre como utilizar ferramentas como AWS CodeCommit, AWS CodePipeline e AWS CodeBuild.

Abaixo podemos ter uma ideia de como funciona o framework do ADF:

A conta de origem (source account) será a conta utilizada para o armazenamento do código, neste exemplo iremos utilizar o serviço AWS CodeCommit mas é possível também utilizar o Github como fonte de origem para os seus códigos do CloudFormation.

A conta de deployment será a conta que irá de fato realizar o deployment dos recursos de infraestrutura como código, é nesta conta que será criada um pipeline para cada repositório, neste pipeline iremos incluir o passo de build, um passo de aprovação manual do código que será realizado o deploy e finalmente o passo de deployment.

Por fim teremos as contas de destino, estas são as contas onde a conta de deployment irá aplicar as configurações do código do CloudFormation, no exemplo acima utilizamos duas contas, uma conta de produção e outra de stage.

Este guia requer que você tenha conhecimentos do funcionamento do Git, sobre como clonar um repositório, realizar alterações no código, realizar o commit do código e por fim realizar o push contendo as alterações para o repositório remoto, no link abaixo é possível consultar mais informações sobre o funcionamento do git e sua instalação.

https://git-scm.com/

Instalação

A instalação deve ser feita a partir da Conta Master na AWS, basta selecionar a região de North Virginia (us-east-1) e procurar pelo serviço Serverless Application Repository (SAR), no campo de pesquisa procure por aws-deployment-framework ou adf.

Lembre-se de clicar no check-box “Show apps that create custom IAM roles or resource policies”.

Ao selecionar o ADF, você será direcionado a tela abaixo, onde é possível obter mais informações sobre source code do ADF que fica armazenado no Github.

Para consultar mais detalhes sobre o AWS ADF você pode clicar no link abaixo:

https://serverlessrepo.aws.amazon.com/applications/us-east-1/112893979820/aws-deployment-framework

Ainda na página de instalação, preencha os campos destacados abaixo:

Application Name

O nome do stack da aplicação criada pelo AWS Cloudformation. (deve ser sempre utilizado o nome aws-deployment-framework)

CrossAccountAccessRoleName

O nome da IAM Role que o ADF irá utilizar para acessar as outras contas AWS dentro da sua organização para criar ou atualizar os stacks de Cloudformation. Esta IAM Role deve existir em todas as contas dentro da sua organização.

DeploymentAccountEmailAddress

Aqui deve ser preenchido o e-mail associado a conta de Deployment, caso a conta de deployment já exista basta inserir o e-mail associado a esta conta.

DeploymentAccountId

Aqui devemos preencher o ID da conta de deployment, caso a conta de deployment não exista, basta manter este campo em branco que uma nova conta de deployment será criada e irá utilizar o e-mail mencionado no campo

DeploymentAccountMainRegion

A região AWS que irá centralizar todos os seus pipelines AWS, os pipelines podem ser executados em diferentes regiões AWS mas ainda sim precisamos definir qual será sua região padrão.

DeploymentAccountName

O nome da Conta de Deployment, se você tiver uma conta existente que será utilizada como deployment basta inserir o nome dela neste campo.

Na sequência insira as informações conforme destacado na imagem abaixo:

InitialCommit

Nesta parte insira inserir os parâmetros que serão armazenados no arquivo adfconfig.yml, este é o arquivo é utilizado para definir configurações básicas de como deve operar.

Ao utilizar o ADF pela primeira vez, parte do processo de instalação será criada automaticamente, será criado um repositório do AWS CodeCommit na conta de deployment na região do Notrte da Virginia (us-east-1), também irá criar um commit inicial na branch master deste repositório com as configurações padrões.

DeploymentAccountAlias

O apelido da conta de deployment, os apelidos (alias) são nomes únicos, mais informações podem ser obtidas no link abaixo:

https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#AboutAccountAlias

DeploymentAccountTargetRegions

Uma lista opcional de regiões que você deseja realizar o deploy de recursos, exemplo (us-east-1, us-east-2)

MainNotificationEndpoint

Um e-mail de notificação opcional que irá receber notificações relacionadas ao bootstrapping na conta master.

ProtectedOUs

Uma lista opcional de OUs que você deseja proteger, ou seja as contas que estiverem nesta lista de OUs não irão participar do ADF, seria mais uma espécie de guardrail para algumas contas pertencentes a lista de OUs informada.

Próximos Passos

 Ao clicar em deploy, será criado um stack do AWS adf com recursos como AWS CodeCommit, um projeto do AWS Build e um pipeline AWS CodePipeline, além disto será implementado na conta de deployment uma função do Step Function, ela irá monitorar os repositórios e caso algum seja atualizado com um novo commit na branch master, será inicializado o pipeline automaticamente.

Abaixo um exemplo de configuração do arquivo deployment_map.yml, este arquivo pode ser encontrado na conta de deployment, acessando o serviço do CodeCommit, haverá um repositório que foi criado automaticamente com o nome aws-deployment-framework-pipelines.

Observe na configuração do arquivo, no trecho onde está escrito pipelines, adicionamos o nome de vpc, este é o nome do repositório que será criado na source account, é nela que o código do Codecommit ficará, é inserido também o ID da conta de source.

É possível configurar também um e-mail que será utilizado para receber as notificações sobre cada evento deste pipeline através do parâmetro notification_endpoint, por fim no campo targets será definido qual a nossa conta de destino do código que vai ser aplicado, é configurado também uma fase de aprovação manual dentro deste pipeline.

Utilizando o ADF para criar seus recursos na AWS através do CloudFormation

Vamos utilizar o exemplo de uma VPC existente e através do ADF iremos alterar seu nome, é um exemplo bem simples, mas através deste passo é possível demonstrar na prática todo o processo desde a alteração do nome da VPC no código, passando pelo pipeline, aprovação, deploy e por fim validar se a alteração foi realizada.

Abaixo podemos ver que já temos criada a VPC adf-vpc-VPC, esta é a VPC que iremos renomear.

Abaixo o repositório localizado na source account chamado “vpc”:

Faça o clone deste repositório na sua máquina local, na sequência renomeie a VPC, veja que após realizar o commit e o push para o branch master o ADF irá detectar esta alteração e iniciará o pipeline automaticamente.

Faça uma alteração bem simples apenas para dar início ao pipeline e mostrar os próximos passos:

Neste exemplo altere o nome da VPC e depois realize o commit e o push do código utilizado na branch master diretamente, repare que na imagem acima o ADF na conta master detectou a alteração e exibe que o pipeline está em progresso, ele exibe também o id do commit realizado.

Para facilitar a demonstração, estamos utilizando apenas a branch master, mas um deployment em produção a melhor prática é a criação de uma nova branch com a alteração desejada, e na sequência seja aberto um pull request para que a alteração possa ser avaliada pelo time responsável e depois de aprovado o pull request seguir com o deploy e o merge na branch master.

É importante dizer também que o ADF foi configurado para que a branch principal seja nomeada como master, caso queira utilizar main como a branch principal será necessário alterar a configuração do ADF para que ele tenha ciência da branch correta na hora de executar o pipeline.

Na imagem abaixo podemos ver que o pipeline passou pela fase de build com sucesso:

Na imagem abaixo podemos ver que resta agora o passo de aprovação manual antes da alteração de fato do nome da VPC.

Podemos validar na conta de destino, acessando o CloudFormation, localizando o stack nomeado como vpc, e através do change-sets podemos verificar que não há erros e inclusive podemos abrir o template que será aplicado.

Repare no change sets onde informa que o VPC id final b5c7b será alterada:

Abaixo o passo de aprovação após revisar o código que será aplicado na conta de destino:

Por fim ao acessar a conta de destino, observe que o nome da VPC foi alterado, conforme imagem abaixo.

Conclusão

O AWS Deployment Framework é uma ferramenta excelente e com uma instalação bem amigável. Neste artigo abordamos alguns conceitos básicos deste framework. No link abaixo, é possível extrair diversas outras opções de deployments e encontrar mais informações na documentação oficial do framework:

https://github.com/awslabs/aws-deployment-framework

Como por exemplo alguns modelos contendo exemplos de deployments,  e como customizar o arquivo do deployment_map para que se adeque a sua necessidade como por exemplo o deployment em mais de uma região ao mesmo tempo e entre outras funcionalidades.

Por fim, o ADF é uma ferramenta que pode ser um grande aliado nas atividades do engenheiro Devops do dia-a-dia na AWS, resultando uma adoção eficiente e organizacional da arquitetura na nuvem, como a padronização da infraestrutura como código, além disto os serviços utilizados pelo ADF são utilizados sob demanda, resultando em um uso eficiente dos recursos na nuvem e também uma redução de custos.

Gostou da solução? Nós podemos ajudar!

Conheça nossos conteúdos gratuitos, direcionados aos assuntos de sua preferência!

Enviar

Receba nosso conteúdo

Gostaria de receber de forma gratuita mais conteúdos sobre este ou outros assuntos? Preencha o formulário abaixo e receba nosso conteúdo gratuito!

Parabéns!

Você receberá nosso conteúdo em breve!

Atenção

Tivemos um problema com seu formulário, tente novamente.