1 of 37

Serverless utilizando

AWS Lambda + Python

Raffael Tancman

+

2 of 37

Apresentação

Raffael Tancman

@rtancman / fullstack developer / software engineer

https://rtancman.com.br

Atualmente na Resultados Digitais

GruPy

Blumenau

3 of 37

Agenda

  1. O que é o AWS Lambda?
  2. AWS Lambda console web
  3. awscli + Lambda
  4. Utilizando pacotes Python + awscli + Lambda
  5. Apex.run + Lambda
  6. Pegadinhas Python + Lambda

4 of 37

O que é o AWS Lambda?

Vamos passar a

lambda...

5 of 37

O que é o AWS Lambda?

  • Serviço que permite rodar códigos sem a necessidade de ter uma máquina ligada o tempo todo.

  • Pode ser executado através:
    • Gatilhos que são configurados no serviço
    • Invocado por um programa ou outro lambda

6 of 37

O que é o AWS Lambda?

Linguagens Suportadas atualmente (02/2019)

    • C#
    • Go
    • Java
    • JS
    • Python
    • Ruby

7 of 37

O que é o AWS Lambda?

Estrutura da função no lambda

def handler_name(event, context):� ...� return some_value

8 of 37

O que é o AWS Lambda?

event

É o parâmetro principal. Neste argumento recebemos os dados de entrada podendo conter dados de uma mensagem recebida no SQS ou de um request repassado pelo API Gateway.

9 of 37

O que é o AWS Lambda?

context

Neste recebemos um objeto LambdaContext. Neste objeto temos informações de invocação deste lambda como a quantidade de memória configurada e o ARN de quem invocou esta função.

10 of 37

AWS Lambda console web

Home do servico

11 of 37

AWS Lambda console web

Opções de criação:

  • From Scratch: É para criar funções do zero.
  • Blueprints: São exemplos de funções para atividades recorrentes na amazon.
  • AWS Serveless Aplication Repository: São exemplos de aplicações Serverless.

12 of 37

AWS Lambda console web

Mão na massa!�Vamos acessar o console e criar um lambda.�https://console.aws.amazon.com

Video explicando o Console web: https://www.youtube.com/watch?v=Mr2XT_6HPSo

OBS: Como todo serviço na AWS, precisamos de uma role de execução. Este não é nosso foco, mas para se aprofundar veja a documentaçao.

13 of 37

awscli + Lambda

14 of 37

awscli + Lambda

AWS disponibiliza uma interface de linha de comando para interagir com os serviços.

O awscli é feito em Python <3

15 of 37

awscli + Lambda

Instalação

pip install awscli�

#validando se o awscli foi instalado corretamente�aws --version

#config precisamos do AWS Access Key ID e Secret Access Key

aws configure

16 of 37

awscli + Lambda

Vamos focar nos principais comandos para manipular um lambda que são eles:

  • aws lambda create-function
  • aws lambda list-functions
  • aws lambda update-function-code
  • aws lambda invoke
  • aws lambda delete-function

17 of 37

awscli + Lambda

Mão na massa!

Vamos acessar o terminal e executar os comandos.

Gist com os comandos executados

18 of 37

Utilizando pacotes Python + awscli + Lambda

+

+

19 of 37

Utilizando pacotes Python + awscli + Lambda

  • O lambda suporta instalação de outras bibliotecas em nosso código como o requests.

  • Precisamos incluir as dependências no mesmo diretório onde a nossa função lambda foi criada, zipar todo o conteúdo e subir em seguida para o lambda.

20 of 37

Utilizando pacotes Python + awscli + Lambda

O pip tem um opção que é o --target ou -t. Esta opção permite passar o caminho onde vão ser criados os arquivos de dependências do nosso projeto.

pip install -r requirements.txt -t PATH_PARA_CRIAR_ARQUIVOS

21 of 37

Utilizando pacotes Python + awscli + Lambda

Mão na massa!

Gist com os comandos executados

22 of 37

Apex.run + Lambda

23 of 37

Apex.run + Lambda

  • O Apex.run é uma ferramenta para organizar e simplificar os comandos lambda.�
  • Ele propõe uma estrutura de diretórios facilitando o versionamento das suas funções.

24 of 37

Apex.run + Lambda

Conhecendo o site��http://apex.run/

25 of 37

Apex.run + Lambda

Principais comandos

  • apex init
  • apex deploy
  • apex list
  • apex invoke

26 of 37

Apex.run + Lambda

Mão na massa!

Gist com os comandos executados

Video explicando o Apex.run: https://www.youtube.com/watch?v=PvvlCvfljz0

27 of 37

Pegadinhas Python + Lambda

28 of 37

Pegadinhas Python + Lambda

Um problema comum em utilizar dependências com linguagens dinâmicas é que a algumas bibliotecas fazem wrapper para funções escritas em C e outras funções do SO.

29 of 37

Pegadinhas Python + Lambda

Ou seja, o lambda roda em cima de uma imagem Amazon Linux com isso utilizando o seu SO preferido para instalar dependências podemos ter problemas de compatibilidades ao instalar bibliotecas.

30 of 37

Pegadinhas Python + Lambda

É nessa hora que o Docker entra para nos ajudar!

docker pull amazonlinux

31 of 37

Pegadinhas Python + Lambda

Ou seja, o ideal para não sofrer com esse tipo de problema e realizar a instalação em um container que tenha o Amazon Linux AMI.

No hub docker temos acesso a essa imagem oficial que você pode encontrar também por este link:

https://hub.docker.com/_/amazonlinux/

32 of 37

Pegadinhas Python + Lambda

Agora vamos realizar a nossa instalação utilizando o docker e seguir os seguintes passos:

  1. Criar o nosso Dockerfile com as configurações necessários para o Python
  2. Rodar o container para instalar as dependências
  3. Subir o nosso lambda

33 of 37

Pegadinhas Python + Lambda

Mão na massa!

Gist com os comandos executados

34 of 37

Pegadinhas Python + Lambda

Agora temos um ambiente mais “seguro” para instalar as suas dependências. No projeto lambda-ci tem uma variedade de imagens prontas para o processo de build dos seus lambdas.

OBS: Você ainda pode encontrar mais alguns problemas como algumas bibliotecas específicas.

35 of 37

Conclusão

  • Acessamos o console web do AWS Lambda
  • Rodamos comandos awscli lambda
  • Instalamos pacotes Python no lambda
  • Vimos o funcionamento básico do apex
  • Possíveis problemas de incompatibilidade de bibliotecas

36 of 37

Perguntas

?

37 of 37

Obrigado :)

https://rtancman.com.br�https://github.com/rtancman

https://facebook.com/rtancman

https://twitter.com/rtancman

https://www.linkedin.com/in/rtancman