Vamos de Github Actions?
Existem inúmeras ferramentas para automatizar a integração e entrega de aplicações, dentre elas: bitbucket pipelines, goCD, gitlab, circleCI e etc. Há alguns anos eu tive a oportunidade de trabalhar com o bitbucket pipelines e curtia muito, atendia muito bem as nossas necessidades, e em novembro/19 mais uma ferramenta entra no mercado, github actions.
Como o github é a maior e mais conhecida plataforma de repositório e controle de versões de códigos, logo pensei: — que legal, se CI/CD no github actions for interessante, seguramente será a principal plataforma de CI/CD para muitos profissionais.
Recentemente fiz uma PoC para entender o básico do github actions e a ideia do artigo é justamente mostrar os passos para essa PoC.
Resumo
O github actions se encarregará de construir uma AMI contendo uma simples aplicação (python), e em seguida provisionará uma instância EC2 na AWS a partir dessa AMI.
Requisitos
Conta na AWS
Conhecimentos básicos de AWS
Conta no github
Utilitário git
Conhecimentos básicos de github
Access Key e Secret Key de um usuário AWS com privilégio administrativo
Preparando o Ambiente
Crie bucket S3 na conta da AWS com nome packer-terraform-github-actions
Crie um repositório público vazio na sua conta do github com o nome packer-terraform-github-actions
Após criar o repositório vá até a seção Settings > Secrets e crie 3 secrets, colocando seus respectivos valores:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
Você verá algo como mostrado na imagem a seguir após a criação das secrets:
Clone o repositório no seu computador local e entre no diretório criado:
Código
Vamos agora criar o código da nossa aplicação, para isso, crie um arquivo com nome main.py e cole o seguinte conteúdo:
Agora criaremos o código terraform que provisionará uma instância EC2 na AWS onde nossa aplicação vai ser executada. Cole o seguinte conteúdo em um arquivo com nome main.tf:
Como nossa ideia é que a aplicação seja inicializada logo que a instância for iniciada, vamos integrar nossa aplicação ao systemd do sistema operacional, no caso o Amazon Linux 2. Para isso, crie um arquivo com nome myapp.service com o seguinte conteúdo:
Vejam que na linha 8 do arquivo myapp.service indicamos que para subir o serviço será executado o arquivo shell de nome myapp.sh, então vamos criá-lo:
Agora vamos criar o arquivo (main.pkr.hcl) que a partir do utilitário Packer, contruirá a imagem (AMI) contendo a aplicação:
Crie o seguinte diretório e subdiretório:
Agora para encerrar nossos códigos, crie um arquivo com nome main.yml e salve no subdiretório que criamos acima:
Agora vamos realizar o commit e push de tudo o que fizemos:
Volte no seu repositório no github e entre na seção Actions, se fizemos tudo certo veremos o workflow sendo executado. O processo concluirá em aproximadamente 6 minutos, ao final você terá acesso a aplicação via IP público, veja na console da AWS qual o IP e acesse via browser com a seguinte URL:
Conclusão
Realizamos uma PoC com github actions, envolvendo a criação de uma imagem (AMI) com uma aplicação python e provisionada via terraform. A ideia do artigo foi apenas mostrar o básico do github actions, são inúmeras as possibilidades, espero ter ajudado.