Skip to content

Instantly share code, notes, and snippets.

@cmendesce
Last active November 24, 2020 20:40
Show Gist options
  • Select an option

  • Save cmendesce/391dcfae507232f98f31621b243df543 to your computer and use it in GitHub Desktop.

Select an option

Save cmendesce/391dcfae507232f98f31621b243df543 to your computer and use it in GitHub Desktop.

AWS Chalice

Este tutorial fornecerá uma introdução sobre como usar o AWS Chalice e instruções sobre como construir seu primeiro aplicativo serverless usando Chalice.

Pré-requisitos

  • AWS ...

Criar um virtualenv e instalar o Chalice


Para começar a usar o Chalice, você precisará de um novo virtualenv com o Chalice instalado.

Instruções

Tenha certeza que você tem o Python 3 instalado.

  1. Crie um novo virtualenv chamado chalice-env executando o comando a seguir:
python3 -m venv chalice-env
  1. Ative o virtualenv recém criado:
source chalice-env/bin/activate

Se você está usando Windows, tente executar:

> .\chalice-env\Scripts\activate
  1. Instalar chalice usuando pip:
pip3 install chalice

Validação

Para verificar que o chalice foi instalado, execute:

chalice --version

O comando acima deve imprimir a versão do chalice que está instalado eu seu virtualenv.

Criar uma aplicação baseada no Chalice


Com o chalice instalado, é possível criar a primeira aplicação.

Instruções

  1. Execute o comando chalice new-project para criar um projeto chamado workshop-intro:
chalice new-project workshop-intro

Validação

Um novo diretório chamado workshop-intro deve ter sido criado.

Dentro do diretório workshop-intro, você deve ver dois arquivos: app.py e requirements.txt.

Implantar a aplicação Chalice


O aplicativo Chalice criado no passado anterior pode ser implantado imediatamente.

Instruções

  1. Entre no diretório workshop-intro recém criado:

  2. Execute chalice deploy para implantar sua aplicação Chalice:

$ chalice deploy

O resultado do seu comando deve ser parecido com o exemplo abaixo:

Creating deployment package.
Creating IAM role: workshop-intro-dev
Creating lambda function: workshop-intro-dev
Creating Rest API
Resources deployed:
  - Lambda ARN: arn:aws:lambda:us-east-1:969891403741:function:workshop-intro-dev
  - Rest API URL: https://wn0qx6ivs7.execute-api.us-east-1.amazonaws.com/api/

Validação

Você deve ser capaz de interagir com sua API implantada. Para fazer, instale o pacote httpie:

pip3 install httpie

Obtenha o endpoint da sua aplicação Chalice usando chalice url:

Agora, use o httpie para criar uma requisição HTTP. Veja o exemplo a seguir e troque pela url obtida no passo anterior.

http https://wn0qx6ivs7.execute-api.us-east-1.amazonaws.com/api/

O resultado deve ser algo como o exemplo a seguir:

HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 17
Content-Type: application/json
Date: Sun, 22 Nov 2020 23:30:34 GMT
Via: 1.1 bd8c6bfe710f91c12ac92a052545fb5e.cloudfront.net (CloudFront)
X-Amz-Cf-Id: tLV0H-4CmDdYUUBFFqWWrloh4KTc4T5Ur4cRqB2UD7vkt4jaJFf34g==
X-Amz-Cf-Pop: BOG50-C1
X-Amzn-Trace-Id: Root=1-5fbaf49a-764239220a458e7c4c2a6695;Sampled=0
X-Cache: Miss from cloudfront
x-amz-apigw-id: WbsoKG1nIAMFpUg=
x-amzn-RequestId: df545d64-a28f-454d-964f-d2a9c627d555

{
    "hello": "world"
}

Adicionar uma nova rota


Agora que a aplicação está implantada, vamos adicionar uma nova rota chamada /hello.

Instruções

  1. Abra o arquivo app.py em seu editor de texto.

  2. Adicione a seguinte função no arquivo app.py:

@app.route('/hello')
def hello_workshop():
    return {'hello': 'workshop'}

Seu arquivo app.py deve ficar como o código abaixo:

from chalice import Chalice

app = Chalice(app_name='workshop-intro')

@app.route('/')
def index():
    return {'hello': 'world'}

@app.route('/hello')
def hello_workshop():
    return {'hello': 'workshop'}
  1. Usando o comando chalice deploy, faça o deploy da aplicação.

Validação

Usando o httpie, confirme que a nova rota foi implantada corretamente.

http https://wn0qx6ivs7.execute-api.us-east-1.amazonaws.com/api/hello/
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 20
Content-Type: application/json
Date: Mon, 23 Nov 2020 11:19:37 GMT
Via: 1.1 481877d3842ccab02c4abf89cff39c94.cloudfront.net (CloudFront)
X-Amz-Cf-Id: 9jE90EWnwcfzhoyzlvfMQ7JPQbICdgaiI5dHcNmNg7cimR25Zw_nDw==
X-Amz-Cf-Pop: BOG50-C1
X-Amzn-Trace-Id: Root=1-5fbb9ac9-48c6c9f03e5bfa023bdd98db;Sampled=0
X-Cache: Miss from cloudfront
x-amz-apigw-id: WdUfbETKoAMFlSw=
x-amzn-RequestId: 149d416c-c019-47c8-99b3-8e7e6227df28

{
    "hello": "workshop"
}

Adicionar um evento que escuta objetos criados no S3


Nesta parte do tutorial faremos com que a função seja executada toda vez que um novo objeto for criado em um determinado bucket do S3, ou seja, a lambda funcionará orientada a eventos gerados pelo S3.

Altere a função Lambda a ser invocada sempre que um objeto for criado em um bucket no S3 através do decorator on_s3_event.

Instruções

No arquivo app.py, adicione uma função chamada handle_object_created que aceita um argumento event:

def handle_object_created(event):
    pass

Agora, adicione o decorator app.on_s3_event na função criada. Dessa forma, a função será acordada sempre que um objeto for criado no bucket especificado.

@app.on_s3_event(bucket='bucket-name',
                 events=['s3:ObjectCreated:*'])
def handle_object_created(event):
    pass

Atualize a função handle_object_created para que faça uso do argumento event, que é do tipo S3Event.

Delete sua aplicação Chalice


Para excluir sua aplicação e todos os recursos associados, apenas execute chalice delete.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment