Acelerando a Implementação da Cultura DevOps na sua Organização com Amazon CodeCatalyst
Bom dia todos!
A cultura DevOps tem se tornado cada vez mais popular entre as organizações de desenvolvimento de software, pois promove uma abordagem colaborativa entre as equipes de desenvolvimento e operações, permitindo a entrega contínua de software de alta qualidade. No entanto, implementar efetivamente a cultura DevOps pode ser um desafio complexo.
É aqui que o serviço Amazon CodeCatalyst pode desempenhar um papel relevante. Neste post, exploraremos como o Amazon CodeCatalyst pode ajudar as organizações a acelerar e aprimorar a implementação da cultura DevOps, fornecendo uma plataforma completa de colaboração e automação.
Visão geral do Amazon CodeCatalyst
O Amazon CodeCatalyst é um serviço da AWS (Amazon Web Services) que fornece uma plataforma integrada para ajudar as equipes a colaborar, automatizar processos e adotar as melhores práticas da cultura DevOps. Ele oferece recursos para versionamento de código, gerenciamento de pipelines de integração e entrega contínua (CI/CD), rastreamento de problemas, gerenciamento de configuração e muito mais.
Colaboração aprimorada: Uma das chaves para o sucesso da cultura DevOps é a colaboração efetiva entre as equipes de desenvolvimento e operações. O Amazon CodeCatalyst oferece recursos avançados para promover a colaboração, como repositórios de código centralizados, integração com ferramentas de comunicação (como Slack) e recursos de revisão de código. Esses recursos permitem que as equipes trabalhem em conjunto de forma eficiente, compartilhem conhecimento e colaborem em projetos com facilidade.
Automação de processos: Automatizar processos é fundamental para acelerar a implementação da cultura DevOps. O Amazon CodeCatalyst oferece recursos abrangentes para automação, permitindo a criação de pipelines de CI/CD para automatizar a compilação, teste e implantação de software. Isso reduz a dependência de processos manuais demorados, aumentando a eficiência e a velocidade de entrega do software.
Gerenciamento de configuração: O gerenciamento de configuração é uma parte essencial da cultura DevOps. O Amazon CodeCatalyst oferece recursos para gerenciar de forma eficiente a configuração de infraestrutura e ambientes de aplicativos. Ele suporta o uso de ferramentas populares, como o AWS CloudFormation e Terraform, para provisionar e gerenciar recursos de infraestrutura como código. Isso garante a consistência e a rastreabilidade da infraestrutura e simplifica o gerenciamento de ambientes em diferentes estágios do ciclo de vida do software.
Rastreamento de problemas: O rastreamento de problemas e a gestão eficaz de projetos são cruciais para a implementação bem-sucedida da cultura DevOps. O Amazon CodeCatalyst oferece recursos integrados para o rastreamento de problemas, permitindo que as equipes registrem, priorizem e acompanhem problemas e tarefas de desenvolvimento. Isso melhora a visibilidade e a colaboração em torno dos problemas, facilitando sua resolução rápida e eficiente.
Segurança e conformidade: A segurança e a conformidade são considerações importantes ao implementar a cultura DevOps. O Amazon CodeCatalyst fornece recursos para controle de acesso, monitoramento de segurança e integração com outros serviços da AWS voltados para segurança, como o AWS Identity and Access Management (IAM) e o AWS CloudTrail. Isso garante que as organizações possam implementar práticas de segurança adequadas e atender a requisitos regulatórios.
Compartilhando lições aprendidas utilizando Amazon CodeCatalyst
Gostaria compartilhar com vocês lições aprendidas na utilização do Amazon CodeCatalyst aplicado num projeto que combinou requerimentos Multi-Cloud e DevOps. O objetivo final deste projeto era a implementação de um Website Estático Serverless em arquitetura Multi-Cloud, tendo como principais requerimentos:
Implementar o website estático através da utilização de recursos de armazenamento Serverless em AWS (S3), Azure (Blob Storage) e OCI (Buckets).
Criar repositórios centralizados de infraestrutura como código (IaC) e código do website estático, integrado com esteiras de integração e entrega contínua.
Centralizar o provisionamento, configuração e gerenciamento automatizado da infraestrutura nas múltiplas Clouds utilizando Amazon CloudCatalyst e Terraform.
Centralizar o gerenciamento e automação das esteiras de integração e entrega contínua do website estático em múltiplas Clouds utilizando Amazon CloudCatalyst.
Realizar a comunicação com a Cloud AWS através de recursos nativos do Amazon CloudCatalyst.
Realizar a comunicação com as Clouds Azure e OCI utilizando CLIs (Command Line Interfaces) e alavancando recursos de computação do próprio Amazon CloudCatalyst.
Podemos ver a arquitetura de solução aplicada neste projeto no diagrama a seguir:
Vejamos agora as etapas chave seguidas neste projeto:
Etapa 1 - Preparação do repositório de Infraestrutura como Código
Como primeiro passo para utilizar as funcionalidades do Amazon CloudCatalyst devemos criar um "Space" (no nosso projeto chamado "TerraformCodeCatalystLPG"). Durante a criação do "Space" é especificada a Conta AWS que será utilizada para faturamento e para criação dos recursos na Cloud AWS através de autorização de roles IAM.
Criado o "Space" podemos criar um "Project" (no nosso projeto chamado "TerraformCodeCatalyst"):
Dentro do "Project" encontramos os dois grupos de funcionalidades requeridos para atender os requerimentos do projeto: "Code" e "CI/CD".
Na figura abaixo podemos ver estas opções à esquerda, incluindo o detalhe das funcionalidades relacionadas com "Code":
Source Repositories: Funcionalidade que permite a criação e controle de versionamento dos repositórios de código;
Pull Requests: Funcionalidade que permite a gestão das solicitações de atualização do código nos repositórios, incluindo suporte para aprovação/desaprovação e aplicação das atualizações (Merge);
Dev Environments: Funcionalidade que permite a criação de ambientes de desenvolvimento pré-configurados que podemos utilizar para trabalhar com o código da nossa infraestrutura e/ou aplicações.
No projeto testamos a criação de ambientes de desenvolvimento e verificamos a disponibilidade de ambientes com suporte para AWS Cloud9 (executado no web browser) e Visual Studio Code além de outras opções com suporte para JetBrains IDEs. Para o projeto optamos pela utilização de um ambiente local de Visual Studio Code visando a reutilização de código Terraform preparado anteriormente.
Utilizando a funcionalidade Source Repository criamos nosso primeiro repositório ("bootstrapping-terraform-automation-for-amazon-codecatalyst") para armazenar o código Terraform que foi utilizado para o provisionamento da nossa infraestrutura.
Dentro desse repositório criamos primeiro um folder ("_bootstrap") para armazenar o código da infraestrutura base requerida para o funcionamento de Terraform utilizando Backend S3 em AWS. Esta infraestrutura base requer a criação de (1) um bucket S3 para armazenar o arquivo Terraform de controle de recursos provisionados (terraform.tfstate), (2) uma tabela DynamoDB para controlar o acesso concorrente ao arquivo terraform.tfstate no caso de execuções paralelas, e (3) IAM roles e IAM policies requeridos para a conexão de Amazon CloudCatalyst com a conta AWS onde serão criados os recursos - um IAM role para a Branch Main com permissão para criar recursos e outro IAM role para a Branch Pull Request com permissão de somente leitura.
Etapa 2 - Criação dos workflows CI/CD para atualização da Infraestrutura como Código
Criados os recursos da infraestrutura base, estamos prontos para criar os workflows CI/CD para gerenciar a atualização da infraestrutura como código da nossa aplicação. Para isso em primeiro lugar, devemos associar os dois IAM roles criados anteriormente com Amazon CloudCatalyst para que possamos utilizá-los nos workflows.
Como podem ver na figura abaixo, utilizamos agora a funcionalidade "CI/CD | Workflows", selecionando o repositório de código, para criar 03 workflows na Branch Main:
"TerraformPRBranch": Workflow que gerenciará a avaliação de atualizações solicitadas através de Pull Requests numa Branch. Este workflow realizará a instalação do Terraform numa maquina virtual EC2 e executará os comandos Terraform init, validate e plan, visando validar as atualizações feitas no código de infraestrutura;
"TerraformMainBranch": Workflow que gerenciará a aplicação automática das atualizações aprovadas no código da Branch Main do nosso repositório. De maneira semelhante este workflow executará os comandos Terraform init, validate, plan e apply, visando aplicar as atualizações feitas no código de infraestrutura;
"TerraformMainBranch_Destroy":Workflow que gerenciará a remoção da infraestrutura criada através do código da Branch Main. Este workflow é configurado para ser executado manualmente e executará os comandos Terraform init e destroy, visando eliminar os recursos provisionados.
Como exemplo, podemos ver na sequencia o código YAML do workflow "TerraformMainBranch":
# Adaptation of the https://developer.hashicorp.com/terraform/tutorials/automation/github-actions workflow
Name: TerraformMainBranch
SchemaVersion: "1.0"
# Here we are including the trigger for this workflow: Push / Pull Request. If not included then this workflow will be executed only manually
Triggers:
- Type: Push
Branches:
- main
# Here we are defining the actions that will be executed for this workflow
Actions:
Terraform-Main-Branch-Apply:
Identifier: aws/build@v1
Inputs:
Sources:
- WorkflowSource
Environment:
Connections:
- Role: Main-Branch-Infrastructure
Name: "XXXXXXXXXXXX"
Name: TerraformBootstrap
Configuration:
Steps:
- Run: export TF_VERSION=1.5.2 && wget -O terraform.zip "https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_linux_amd64.zip"
- Run: unzip terraform.zip && rm terraform.zip && mv terraform /usr/bin/terraform && chmod +x /usr/bin/terraform
- Run: terraform init -no-color
- Run: terraform validate -no-color
- Run: terraform plan -no-color -input=false
- Run: terraform apply -auto-approve -no-color -input=false
Compute:
Type: EC2
Etapa 3 - Execução dos workflows CI/CD para atualização da Infraestrutura como Código
Na sequencia, criamos uma Branch ("test-pr-workflow") que foi utilizada para validar as atualizações ao código Terraform da nossa infraestrutura.
Os arquivos Terraform da aplicação foram organizados em grupos: o primeiro deles focado na conexão com AWS, Azure e OCI (multicloud_provider.tf e multicloud_variables.tf) e outros três para provisionamento dos recursos de storage em cada Cloud (Exemplo: aws_storage.tf e aws_variables.tf). Para o provisionamento desta infraestrutura utilizamos também o Backend S3 previamente criado porem armazenando o arquivo terraform.tfstate numa chave diferente do bucket.
Utilizando Visual Studio Code Insiders sincronizamos os arquivos Terraform da infraestrutura com nosso repositório em Amazon CloudCatalyst utilizando a Branch "test-pr-workflow".
Atualizados os arquivos na Branch "test-pr-workflow" criamos uma Pull Request para iniciar o workflow "TerraformPRBranch" nessa Branch. Na figura abaixo podem ver os dados de criação de uma Pull Request incluindo a Branch origem "test-pr-workflow" e Branch destino "main" bem como também a especificação de revisores obrigatórios e opcionais das mudanças solicitadas com o qual estamos aplicando a colaboração dentro do time de DevOps.
A criação do Pull Request acionou o workflow "TerraformPRBranch" na Branch "test-pr-workflow" e na sua finalização conseguimos verificar, através dos logs do comando Terraform Plan, que a aplicação das atualizações na infraestrutura poderia ser realizada com sucesso e, sendo este o caso, autorizamos o Merge das atualizações na Branch "main".
Ao autorizar o Merge, o workflow "TerraformMainBranch" foi iniciado e com isso foi realizado o provisionamento das atualizações de infraestrutura definidas pelo código Terraform:
Isto demonstrou um ciclo completo CI/CD de automação de atualizações de infraestrutura utilizando o Amazon CodeCatalyst!!
Etapa 4 - Preparação do repositório de código da aplicação (Website Estático Serverless em arquitetura Multi-Cloud)
De maneira semelhante à Etapa 1, utilizando a funcionalidade Source Repository criamos o repositório para o código da nossa aplicação ("static-website-repo"), contendo os arquivos requeridos para o website:
Etapa 5 - Criação dos workflows CI/CD para atualização da aplicação
Seguindo o mesmo procedimento anterior, procedemos à criação dos workflows para realizar o armazenamento das atualizações dos arquivos do website estático nos buckets de cada Cloud. Cada um dos workflows foi configurado para atualizar sequencialmente os três ambientes especificados: Testes, Homologação e Produção, com a condição de avanço ao próximo ambiente apenas em caso de sucesso na aplicação no ambiente anterior.
Vejamos a seguir os pontos de destaque na preparação de cada workflow:
Workflow "Upload_to_AWS_S3" - Armazenamento em Buckets AWS S3
Conforme podem ver abaixo, na representação visual deste workflow, configuramos como acionador (trigger) automático o evento de atualização de código na Branch "main" do repositório. Este trigger iniciará o workflow que será composto por 03 ações (Actions) do tipo "aws/s3-publish@v1.0.5". Esta ação é um recurso nativo do Amazon CodeCatalyst que permite o carregamento de arquivos num Bucket S3 através da execução de comandos a partir de uma máquina virtual EC2:
Workflow "Upload_to_Azure_Blob" - Armazenamento em Azure Blob Storage
Conforme podem ver abaixo, na representação visual deste workflow, configuramos também como acionador (trigger) automático o evento de atualização de código na Branch "main" do repositório. Este trigger iniciará o workflow que será composto também por 03 ações (Actions).
Conforme requerimentos do projeto, a comunicação com Azure foi realizada utilizando a Azure CLI (Command Line Interface). Para viabilizar isto a alternativa técnica foi aplicar a capacidade do Amazon CloudCatalyst de permitir a criação do ambiente de processamento utilizando uma imagem de container customizada. A imagem customizada foi a versão em container do Azure CLI (Imagen: mcr.microsoft.com/azure-cli). A autenticação para uso do CLI foi realizada alavancando a funcionalidade Secrets do Amazon CloudCatalyst visando a segurança das informações de acesso.
Workflow "Upload_to_OCI_Bucket" - Armazenamento em OCI Buckets
Conforme podem ver abaixo, na representação visual deste workflow, configuramos também como acionador (trigger) automático o evento de atualização de código na Branch "main" do repositório. Este trigger iniciará o workflow que será composto também por 03 ações (Actions).
Conforme requerimentos do projeto, a comunicação com OCI foi também realizada utilizando a OCI CLI (Command Line Interface) e para viabilizar isto a alternativa técnica aplicada foi executar a versão em container do OCI CLI na máquina virtual EC2 (Imagen: ghcr.io/oracle/oci-cli:latest ) utilizando comandos Docker na versão já disponível no ambiente de processamento EC2. A autenticação para uso do CLI foi também realizada alavancando a funcionalidade Secrets do Amazon CloudCatalyst visando a segurança das informações de acesso.
Etapa 6 - Execução dos workflows CI/CD para atualização do código da aplicação
A atualização do código da aplicação foi feita aplicando a mesma metodologia que aplicamos no caso do repositório de infraestrutura como código (criação de branch para solicitação de Pull Requests). Realizado esse processo e autorizando o Merge foi gerado um evento Push na Branch "main" e com isso os três workflows anteriores foram acionados iniciando a atualização dos Buckets na AWS, Azure e OCI. As imagens na sequencia mostram o resultado da execução dos workflows:
E como resultado do processamento tivemos nosso Website Estático Serverless em arquitetura Multi-Cloud em funcionamento em AWS, Azure e OCI como resultado de um Processo DevOps fim-a-fim suportado pelo Amazon CodeCatalyst!!
Conclusão
A implementação eficiente da cultura DevOps é fundamental para o sucesso das organizações de desenvolvimento de software. O Amazon CodeCatalyst oferece uma plataforma abrangente para acelerar e aprimorar essa implementação.
Com recursos avançados de colaboração, automação de processos, gerenciamento de configuração e rastreamento de problemas, o Amazon CodeCatalyst permite que as equipes colaborem de maneira mais eficiente, melhorem a velocidade de entrega e garantam a qualidade do software. Ao adotar o Amazon CodeCatalyst, as organizações podem impulsionar sua jornada DevOps de maneira rápida e eficiente, obtendo os benefícios de uma abordagem ágil e colaborativa no desenvolvimento de software.
E como vimos no projeto apresentado acima, o Amazon CodeCatalyst possui também os recursos necessários para trabalhar com soluções em arquitetura Multi-Cloud em parceria com Terraform e Docker. Sugiro que vocês experimentem a solução também!!
Ficamos à disposição para apoiá-los neste processo e na continuidade da sua Jornada Cloud!
Nós encontramos na próxima publicação!
Comments