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 ...
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.
- Crie um novo virtualenv chamado
chalice-envexecutando o comando a seguir:
python3 -m venv chalice-env- Ative o virtualenv recém criado:
source chalice-env/bin/activateSe você está usando Windows, tente executar:
> .\chalice-env\Scripts\activate- Instalar
chaliceusuandopip:
pip3 install chaliceValidação
Para verificar que o chalice foi instalado, execute:
chalice --versionO comando acima deve imprimir a versão do chalice que está instalado eu seu virtualenv.
Com o chalice instalado, é possível criar a primeira aplicação.
Instruções
- Execute o comando
chalice new-projectpara criar um projeto chamadoworkshop-intro:
chalice new-project workshop-introValidaçã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.
O aplicativo Chalice criado no passado anterior pode ser implantado imediatamente.
Instruções
-
Entre no diretório
workshop-introrecém criado: -
Execute
chalice deploypara implantar sua aplicação Chalice:
$ chalice deployO 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 httpieObtenha 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"
}
Agora que a aplicação está implantada, vamos adicionar uma nova rota chamada /hello.
Instruções
-
Abra o arquivo
app.pyem seu editor de texto. -
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'}- 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"
}
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):
passAgora, 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):
passAtualize a função handle_object_created para que faça uso do argumento event, que é do tipo S3Event.
Para excluir sua aplicação e todos os recursos associados, apenas execute chalice delete.