Skip to content

ortisan/python-aws-lambda-hands-on

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Python + AWS Lambda Hands On

Python

Exemplos de script

  1. python/exemplos/1-hello-world.py
  2. python/exemplos/2.teste-unitario.py

Preparação do Ambiente

Configuração Proxy:

  1. Criar o arquivo pip.ini no diretório USER_HOME/pip/:
[global]
trusted-host = pypi.python.org
                pypi.org
                files.pythonhosted.org
http_proxy = <url http proxy>
https_proxy = <url https proxy>

Criação do ambiente:

cd python
# Versão >= Python 3.3
python3 -m venv ./hands-on-env -p=<CAMINHO_PYTHON_HOME>/python
# Versão < Python 3.3
pip install virtualenv
virtualenv -p=<CAMINHO_PYTHON_HOME>/python ./hands-on-env

Ativação do ambiente:

# Linux/Gitbash
source ./hands-on-env/bin/activate
# Windows
hands-on-env/Script/activate.bat

PIP

  • É o gerenciador de pacotes do Python.
  • Gradle/Maven/NPM do Python

Instalação das dependências

pip install <NOME DO PACOTE>

# OU

pip install -r requirements.txt

Notebooks

jupyter notebook notebooks
  1. Python Básico
  2. Bot Bitcoin
  3. Analise Dados Bitcoin

AWS Lambda

  • Function as a service (FAAS)
  • Functions são configuradas, carregadas e executadas por uma runtime
  • Configuramos somente a memória. CPU é alocada indiretamente
  • Pagamos pelo tempo de duração da execução da função
  • Uma das peças principais de uma arquitetura Serverless
  • Tempo máximo de duração 15 min
  • Pacote pode ter até 50 Mb zipado e 250 Mb deszipado
  • 512 Mb storage disponível no /tmp
  • Mínimo 128 MB and máximo 3GB

Permissões

  • AWS Lambda execution role

Exemplo: Assume role policy:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Effect": "Allow",
    }
  ]
}
  • Cada deploy de uma lambda recebe uma versão sequencial e um ARN.
  • O ARN com sufixo latest aponta para o último deploy
  • Por essa caracteristica de imutabilidade de versão, podemos utilizar apelidos (Alias). Feature muito utilizada em integrações com o API Gateway para os modelos de deploy Blue Green
# Criar um apelido
aws lambda create-alias --function-name my-function --name alias-name --function-version version-number --description " "
# Alterar o apelido
aws lambda update-alias --function-name my-function --name alias-name --function-version version-number 
# Deletar o apelido
aws lambda delete-alias --function-name my-function --name alias-name 

image

Fase Inicial:

  • Cria ou descongela a função
  • Faz download do código;
  • Configura as variáveis de ambiente;
  • Roda as funções de inicialização - Tudo que não pertença à função handler

Fase Execução:

  • A função handler é executada. Só pagamos por esse tempo (Billing execution).

Fase Desligamento:

  • Quando a função não recebe requisições por x segundos, a lambda é desligada.

Estrutura

Toda lambda deve possuir uma função handler. Pode ter qualquer nome (de acordo com a linguagem) e precisa ser declarado com dois parâmetros, event e context

import boto3

def lambda_handler(event, context):
    # ... logica de negocio ...
    return "Retorno"

Criação da Infraestrutura

Criação do Projeto

Podemos criar o projeto utilizando o Serverless Application Model (SAM).

  1. Instalar o client

  2. Criar a base do projeto:

sam init
# Seguir o passo a passo

Execução local

sam local invoke FunctionExemplo --event events/event.json

Empacotamento

  • Manualmente. Zipamos toda a pasta dos fontes e também dos pacotes de dependência
  • Em Dezembro de 2020 a AWS passa a suportar containers para a distribuição de Lambdas

Estrutura:

FROM public.ecr.aws/lambda/python:3.7

COPY app.py requirements.txt ./

RUN python3.7 -m pip install -r requirements.txt -t .

# Command can be overwritten by providing a different command in the template directly.
CMD ["app.lambda_handler"]

Lib Essencial (Python)

  • Boto3 - Lib oficial para comunicação com os serviços AWS

Executando a DEMO

  • Subir o docker-compose
cd aws-lambda/aplicacao
docker-compose up --build 
  • Start do lambda
python app/app.py 

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages