Workshop AWS Lambda

OTTera

Serviços OTT (over-the-top) para distribuição e monetização de conteúdos em diversas plataformas

200+
canais lineares
75+
aplicativos OTT
105.000.000+
usuários finais

OTTera Canais no Brasil

Canais no Brasil

OTTera Equipe presente

Adam Zhu
Adam Zhu
adam@ottera.tv
Craig McEldowney
Craig McEldowney
craig@ottera.tv
Joe Chellman
Joe Chellman
joe@ottera.tv
Steve Rifkin
Steve Rifkin
srifkin@ottera.tv
Vinícius Campitelli
Vinícius Campitelli
vinicius@ottera.tv

Objetivo

Mostrar a criação de um aplicação Node.js através do Lambda, serviço de Serverless da AWS

Serverless

As tecnologias sem servidores contam com escalabilidade automática, alta disponibilidade integrada e um modelo de faturamento pago por utilização para aumentar a agilidade e otimizar os custos. Estas tecnologias também eliminam as tarefas de gerenciamento de infraestrutura, como provisionamento de capacidade e patching, para que você possa se concentrar apenas em escrever códigos que atendam a seus clientes.
aws.amazon.com/pt/serverless

Serverless

In any serverless platform, the user just writes a cloud function in a high-level language, picks the event that should trigger the running of the function—such as loading an image into cloud storage or adding an image thumbnail to a database table—and lets the serverless system handle everything else: instance selection, scaling, deployment, fault tolerance, monitoring, logging, security patches, and so on.
Cloud Programming Simplified: A Berkeley View on Serverless Computing

Serverless

Diferenças vs Modelo tradicional

1. Decoupled computation and storage. The storage and computation scale separately and are provisioned and priced independently. In general, the storage is provided by a separate cloudservice and the computation is stateless.

Cloud Programming Simplified: A Berkeley View on Serverless Computing

Serverless

Diferenças vs Modelo tradicional

2. Executing code without managing resource allocation. Instead of requesting resources, the user provides a piece of code and the cloud automatically provisions resources to execute that code.

Cloud Programming Simplified: A Berkeley View on Serverless Computing

Serverless

Diferenças vs Modelo tradicional

3. Paying in proportion to resources used instead of for resources allocated. Billing is by some dimension associated with the execution, such as execution time, rather than by a dimension of the base cloud platform, such as size and number of VMs allocated.

Cloud Programming Simplified: A Berkeley View on Serverless Computing

Serverless

Diferenças vs Modelo tradicional

Comparação entre serverless e a "abordagem tradicional": EC2 versus Lambda
Cloud Programming Simplified: A Berkeley View on Serverless Computing

AWS Lambda

Serviço de computação sem servidor e orientado a eventos que permite executar código para praticamente qualquer tipo de aplicação ou serviço de backend sem provisionar ou gerenciar servidores. Você pode acionar o Lambda a partir de mais de 200 serviços da AWS e aplicações de software como serviço (SaaS) e pagar apenas pelo que usar.
aws.amazon.com/pt/lambda

AWS Lambda

O AWS Lambda executa automaticamente o código em resposta a vários eventos, como solicitações HTTP por meio do Amazon API Gateway, modificações de objetos em buckets do Amazon Simple Storage Service (Amazon S3), atualizações de tabela no Amazon DynamoDB e transições de estado no AWS Step Functions.
aws.amazon.com/pt/lambda/features

AWS Lambda

O Lambda executa o código em uma infraestrutura de computação altamente disponível e executa toda a administração dos recursos de computação. Isso inclui manutenção do servidor e do sistema operacional, provisionamento de capacidade e escalabilidade automática, implantação de código e patch de segurança, além de monitoramento e registro do código. Tudo o que você precisa fazer é fornecer o código.
aws.amazon.com/pt/lambda/features

AWS Lambda

Exemplo de Fluxo

AWS Lambda
Exemplo de processamento de arquivos
aws.amazon.com/pt/lambda

AWS Lambda

Exemplo de Fluxo

AWS Lambda
Exemplo de processamento de stream de dados
aws.amazon.com/pt/lambda

AWS Lambda

Exemplo de Fluxo

AWS Lambda
Exemplo de integração com IoT
aws.amazon.com/pt/lambda

API Gateway

Serviço gerenciado que permite que desenvolvedores criem, publiquem, mantenham, monitorem e protejam APIs em qualquer escala com facilidade. APIs agem como a “porta de entrada” para aplicativos acessarem dados, lógica de negócios ou funcionalidade de seus serviços de back-end.
aws.amazon.com/pt/api-gateway

API Gateway

Você pode criar APIs RESTful ou WebSocket que habilitam aplicativos de comunicação bidirecionais em tempo real. O API Gateway dá suporte a cargas de trabalho conteinerizadas e sem servidor, além de aplicativos da web.
aws.amazon.com/pt/api-gateway

API Gateway

Administra todas as tarefas envolvidas no recebimento e processamento de até centenas de milhares de chamadas de API simultâneas, inclusive gerenciamento de tráfego, suporte de CORS, controle de autorização e acesso, com fluxo controlado, monitoramento e gerenciamento de versões de API.
aws.amazon.com/pt/api-gateway

API Gateway

Exemplo de Fluxo

Como o API Gateway funciona
Exemplo de possíveis fluxos do API Gateway
aws.amazon.com/pt/api-gateway

AWS Lambda

Exemplo de Fluxo

AWS Lambda
Exemplo de Lambda com endpoints Web através do API Gateway
aws.amazon.com/pt/lambda

AWS Lambda

Exemplo de Fluxo

AWS Lambda
Exemplo de Lambda com endpoints Web através do API Gateway e com notificações via SNS
aws.amazon.com/pt/lambda

Hands-on

Vamos desenvolver uma função Lambda que irá consumir duas APIs externas, mesclar a saída delas e retornar esse dado

Depois, vamos criar uma aplicação no API Gateway para lidar com as requisições e criar endpoints públicos

Hands-on

  1. Instale o AWS SAM CLI, utilitário de linha de comando que facilita o deploy e o teste local da função

Hands-on

  1. Inicie uma nova aplicação com sam init
    Which template source would you like to use?
    Escolha 1 - AWS Quick Start Templates
    Choose an AWS Quick Start application template
    1 - Hello World Example
    Use the most popular runtime and package type? (Python and zip) [y/N]:
    N (ou Y se quiser Python)
    Which runtime would you like to use?
    8 - nodejs14.x (ou o runtime que preferir)
    What package type would you like to use?
    1 - Zip
    Select your starter template
    2 - Hello World Example TypeScript (ou 1 para JavaScript)
    Project name [sam-app]:
    Escolha um nome ou pressionar ENTER para o padrão sam-app

Hands-on

  1. Para entender toda a estrutura que o SAM cria, abra o arquivo template.yaml
  2. Execute sam build para compilar a aplicação
    • Ou sam build --beta-features se tiver escolhido TypeScript
    • Lembre-se de executar sempre que houver modificações no código

Hands-on

  1. Teste a função localmente com
    sam local invoke HelloWorldFunction --event events/event.json

    Saída esperada:

                                        START RequestId: 145a44a8-07cf-4b07-b292-1e8ab3a60464 Version: $LATEST
                                        {"statusCode":200,"body":"{\"message\":\"hello world\"}"}
                                        END RequestId: 145a44a8-07cf-4b07-b292-1e8ab3a60464
                                        REPORT RequestId: 145a44a8-07cf-4b07-b292-1e8ab3a60464
                                    

Hands-on

  1. Abra a pasta da aplicação em sua IDE ou editor de texto e edite o arquivo hello-world/app.ts
  2. Codifique a chamada às APIs de TODO e Users do JSONPlaceholder
    • Sugestões de pacotes para facilitar o desenvolvimento:
      Linguagem Sugestões
      Node axios
      PHP cURL ou guzzle
      Pyhton requests

Hands-on

  1. Teste o API Gateway executando sam local start-api e acessando localhost:3000/hello
  2. Quando estiver funcionando corretamente, basta realmente subir a função com sam deploy --guided

Hands-on

Guia para o sam deploy --guided:

Stack Name [sam-app]:
workshop-lambda
AWS Region [us-east-1]:
us-east-1
Confirm changes before deploy [y/N]:
y
Allow SAM CLI IAM role creation [Y/n]:
y
Disable rollback [y/N]:
n
LambdaWorkshop may not have authorization defined, Is this okay? [y/N]:
y
Save arguments to configuration file [Y/n]:
y
SAM configuration file [samconfig.toml]:
[ENTER]
SAM configuration environment [default]:
[ENTER]
Deploy this changeset? [y/N]:
y

Obrigado!

Siga-nos em nossas redes sociais:

OTTera