Exemplo de uma API Serverless usando Serverless Framework e deploy no AWS utilizando os serviços:
- AWS Lambda
- API Gateway
- DynamoDB
- https://un5zgcak12440.julianrbryant.com/blog/como-construir-sua-primeira-api-na-nuvem-com-o-serverless-framework
- https://un5zgcak12440.julianrbryant.com/blog/como-adicionar-uma-chave-de-autorizacao-de-api-com-o-serverless-framework
- https://un5zgcak12440.julianrbryant.com/blog/como-usar-variaveis-com-o-serverless-framework
- https://un5zgcak12440.julianrbryant.com/blog/integracao-de-api-com-dynamodb-utilizando-o-serverless-framework
serverless config credentials \
--provider aws \
--key apiKeyAqui \
--secret chaveSecretaAqui \
--profile my-aws-profile
npm install serverless-iam-roles-per-function
Para fazer deploy e manter o stage padrão: dev
serverless deploy --aws-profile my-aws-profile
Para fazer deploy e alterar o stage padrão: dev para prod
serverless deploy --aws-profile my-aws-profile --stage prod
O resultado do comando será algo parecido com
....
Serverless: Stack update finished...
Service Information
service: api-python-hello-world
stage: dev
region: us-east-1
stack: api-python-hello-world-dev
resources: 16
api keys:
myKey: CCJZsdfgzrbxi0shwR8e2Yasdfaz0bOG6A5hlJc7Ui
endpoints:
GET - https://un5my8tugjkmf0vuw0tdux021e59xt2qp5kegyy2a0ykh9bnfz1v6.julianrbryant.com/dev/api/python/hello-world
functions:
hello: api-python-hello-world-dev-hello
layers:
None
Chave da API se encontra na reposta
api keys:
myKey: CCJZsdfgzrbxi0shwR8e2Yasdfaz0bOG6A5hlJc7Ui
Chave da API deve ser passado no header da requisição:
x-api-key: CCJZsdfgzrbxi0shwR8e2Yasdfaz0bOG6A5hlJc7Ui
serverless remove --aws-profile my-aws-profile --stage dev
curl --request GET \
--url https://uhm6m4122pkwrv5hz80ep934cxu4vv2hf6q2mgp2y1e9qxxxr3w21gy2ftv741g1ng.julianrbryant.com/dev/api/python/hello-world \
--header 'x-api-key: CCJZsdfgzrbxi0shwR8e2Yasdfaz0bOG6A5hlJc7Ui'
curl -X GET
-H "x-api-key: CCJZsdfgzrbxi0shwR8e2Yasdfaz0bOG6A5hlJc7Ui" \
https://uhm6m7tq1u446vfz3k5ebdhz1e661zwqpxk14xn478u2zghwy8vqzabb12t6jguabf30.julianrbryant.com/dev/contact
curl -X POST
-H "x-api-key: CCJZsdfgzrbxi0shwR8e2Yasdfaz0bOG6A5hlJc7Ui" \
-H "Content-Type: application/json" \
-d '{"name":"Lina Nathan", "phone":"90000-0000"}' \
https://uhm6m7tq1u446vfz3k5ebdhz1e661zwqpxk14xn478u2zghwy8vqzabb12t6jguabf30.julianrbryant.com/dev/contact
curl -X DELETE
-H "x-api-key: CCJZsdfgzrbxi0shwR8e2Yasdfaz0bOG6A5hlJc7Ui" \
-H "Content-Type: application/json" \
-d '{"id":"29a64dab-b77a-4b5f-9e82-222950c3b5ff"}' \
https://uhm6m7tq1u446vfz3k5ebdhz1e661zwqpxk14xn478u2zghwy8vqzabb12t6jguabf30.julianrbryant.com/dev/contact