- Criada em 1991(primeira release), por Guido Van Rossum.
- "Bala de prata" (quase).
- Muito utilizado em:
- Automatizações - Selenium, Beautiful Soap
- Bigdata - PySpark
- Data Science - Jupyter, Libs estatisticas e analise exploratória
- Machine Learning / Deep Learning - NLTK, Scikit-Learn, Tensor Flow, Keras
- Web - Django
- Hack (Mr. Robot)
- Vídeos David Bombal
- python/exemplos/1-hello-world.py
- python/exemplos/2.teste-unitario.py
Configuração Proxy:
- 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
- É o gerenciador de pacotes do Python.
- Gradle/Maven/NPM do Python
pip install <NOME DO PACOTE>
# OU
pip install -r requirements.txt
jupyter notebook notebooks
- 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
- 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
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.
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"
Podemos criar o projeto utilizando o Serverless Application Model (SAM).
-
Instalar o client
-
Criar a base do projeto:
sam init
# Seguir o passo a passo
sam local invoke FunctionExemplo --event events/event.json
- 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"]
- Boto3 - Lib oficial para comunicação com os serviços AWS
- Subir o docker-compose
cd aws-lambda/aplicacao
docker-compose up --build
- Start do lambda
python app/app.py