Seja bem-vindo à nossa primeira etapa sobre como criar um cassino com a Amazon AWS. Ao final desta série, você aprenderá a utilizar serviços da AWS como Lambda, API Gateway, IAM, SNS e DynamoDB.
Iremos construir um cassino totalmente serverless, utilizando Lambda e API Gateway para gerenciar todas as nossas funções.
No próximo post, exploraremos um pouco mais sobre esse universo serverless. Mas, nesse primeiro momento, iremos aprender a configurar nosso ambiente de deploy, pois ele será inteiramente responsável por automatizar as coisas nos bastidores.
Para esta série de conteúdos, você precisará de:
- Uma conta no Github
- Uma conta na AWS
Configurando nosso ambiente de CI/CD
Vamos começar do princípio. Nosso ambiente de CI/CD é crucial para este tutorial, pois, como utilizaremos serverless para nossas funções, poderíamos ter uma carga muito pesada de funções para fazer deploy manualmente. Imagine ter que fazer uma por uma manualmente? Seria um trabalhão. Por isso, iremos configurar um ambiente de pipeline com as seguintes etapas:
- Encontrar os nomes das funções dentro da pasta
lambda_functions
. - Configurar nosso ambiente de desenvolvimento com Python 3.9.
- Instalar todas as dependências individuais de cada projeto.
- Compactar e atualizar as funções Lambda.
Segue a estrutura do projeto:
-- .github/workflows/deploy.yml
-- lambda_functions
-- lambda_function_1
-- lambda_function_2
Dentro da nossa pasta .github/workflows, iremos criar um arquivo chamado deploy.yml e colar o código abaixo:
name: Update Function Code
on:
push:
branches:
- master
jobs:
get-filenames:
runs-on: ubuntu-latest
outputs:
lambdaArray: ${{ steps.lambda_functions.outputs.lambdas }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Get functions filenames
id: lambda_functions
run: |
directories=$(tree lambda_functions -d -L 1 -J | jq -j -c '.[0].contents | map(.name)')
echo ::set-output name=lambdas::${directories}
update-code:
needs: get-filenames
strategy:
matrix:
lambda: ${{ fromJson(needs.get-filenames.outputs.lambdaArray) }}
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.9'
cache: 'pip'
- name: Zip And Install Lambda functions
run: |
cd lambda_functions/${{matrix.lambda}}
pip install -r requirements.txt -t .
zip -r ${{matrix.lambda}}.zip .
- name: Set up AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Update Lambdas code
run: aws lambda update-function-code --function-name=${{matrix.lambda}} --zip-file=fileb://lambda_functions/${{matrix.lambda}}/${{matrix.lambda}}.zip
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: us-east-1
O código YAML acima define um fluxo de trabalho (workflow) para automação de deploys usando o GitHub Actions. Ele consiste em duas etapas principais:
get-filenames: Esta etapa é responsável por encontrar os nomes das funções dentro da pasta
lambda_functions
. Utiliza a ferramentatree
para listar os diretórios e arquivos dentro delambda_functions
, em seguida usajq
para filtrar apenas os nomes das funções e armazená-los como saída para uso posterior.-
update-code: Esta etapa depende da saída da etapa anterior e utiliza uma matriz para iterar sobre cada função encontrada. Para cada função, ela realiza as seguintes tarefas:
- Configura o ambiente Python.
- Instala as dependências de cada função.
- Compacta o código da função em um arquivo
.zip
. - Configura as credenciais da AWS.
- Atualiza o código da função Lambda na AWS com o arquivo compactado.
Este fluxo de trabalho automatiza o processo de atualização do código das funções Lambda sempre que ocorrer um push para a branch master
do repositório.
Criando uma chave secreta na AWS
O código YAML acima define um fluxo de trabalho (workflow) para automação de deploys usando o GitHub Actions. Ele consiste em duas etapas principais:
get-filenames: Esta etapa é responsável por encontrar os nomes das funções dentro da pasta lambda_functions. Utiliza a ferramenta tree para listar os diretórios e arquivos dentro de lambda_functions, em seguida usa jq para filtrar apenas os nomes das funções e armazená-los como saída para uso posterior.
update-code: Esta etapa depende da saída da etapa anterior e utiliza uma matriz para iterar sobre cada função encontrada. Para cada função, ela realiza as seguintes tarefas:
Configura o ambiente Python.
Instala as dependências de cada função.
Compacta o código da função em um arquivo .zip.
Configura as credenciais da AWS.
Atualiza o código da função Lambda na AWS com o arquivo compactado.
Este fluxo de trabalho automatiza o processo de atualização do código das funções Lambda sempre que ocorrer um push para a branch master do repositório.
IAM, ou Identity and Access Management (Gerenciamento de Identidade e Acesso), é um serviço da AWS que permite controlar o acesso aos recursos da AWS de forma segura. Com o IAM, você pode gerenciar usuários, grupos e permissões para conceder acesso apenas às ações necessárias dentro da sua conta AWS.
No contexto deste tutorial, ao criar uma chave secreta na AWS, estamos configurando as credenciais de acesso que serão usadas pelo GitHub Actions para interagir com os serviços da AWS, como Lambda. Essas credenciais são essenciais para garantir que o processo de deploy automatizado tenha permissão para atualizar o código das funções Lambda na sua conta AWS.
1- Na barra de pesquisa procure por IAM
2- Procure por users e clique sobre: Create user
3- Escolha um nome de usuário
4- Na parte de policy escolha por: Attach policies directly
5- Pesquise por Lambda e escolha a permissão: Lambda Full Access
6- Revise as informações e clique sobre criar usuário
7- De volta na nossa tela de usuários, clique sobre o nome de usuário que acabou de criar, e vá ate Security Credentials
8- Role a tela e procure a sessão de credentials keys e clique sobre Create Access Key
9- Escolha a opção Outside AWS
10- Clique sobre o botão create access key
Configurando variáveis de ambiente no Github
1- Crie o seu projeto no github
2- Navegue ate em settings, no menu lateral escolha por Secrets and variables e escolha por Actions
3- Clique sobre o botão criar New Repository Secret
4- Crie a primeira variavel com o nome de AWS_ACCESS_KEY_ID, no console da AWS copie sua Access key
5- Logo após crie a variavel AWS_SECRET_ACCESS_KEYno console da AWS copie sua Secret access key
Pronto, nosso ambiente de deploy está configurado para realizar deploys automáticos para a AWS.
Top comments (0)