Provisionar uma infraestrutura na AWS, em que se tenha uma lambda que seja capaz de registrar em um banco de dados relacional ou não relacional, dados sobre funcionários de uma empresa.
-
Utilizar Clean Architecture
-
O funcionário deve possuir como atributos: Id, Idade, Nome e Cargo
-
Salvar as informações necessárias em um banco de dados relacional ou não relacional, dentro de uma infraestrutura AWS
-
Será necessário que a Lambda venha conseguir conseguir consultar, deletar e atualizar um funcionário, e que esteja acessível via internet.
-
Realizar testes unitários com JEST.
Para resolver o problema proposto, foi utilizado o framework chamado serverless. Este framework vem a permitir a criação de infraestrutura em CloudProviders através de arquivos de configuração.
Sua instalação pode ser feita através do comando
npm install -g serverless
O projeto levará em conta que AWS-CLI está configurada, utilizando um usuário que possui permissão de administrador. Caso não venha estar configurado, você pode acessar este link, para realizar a instalação e para a criação do usuário neste link.
Inicialmente, para baixar as dependências do projeto, execute:
npm install
Para iniciar o deploy da aplicação, execute:
npm run deploy
Ao executar este comando, o framework irá verificar o arquivo serverless.yml e irá configurar um bucket no AWS S3 com o template da infraestrutura desejada. Assim através do AWS Cloud Formation, irá realizar a instanciação e configuração dos serviços.
Neste arquivo, foi definido que será utilizado o serviço AWS API Gateway associando as Lambdas functions que serão executadas quando for realizado uma requisição REST para determinada rota. Além disso também vem a criar uma tabela no banco de dados DynamoDB para salvar as informações.
Ao finalizar a execução do deploy da infraestrutura, será exibido no terminal o link para os endpoints e métodos que a API vem oferecer, como no exemplo abaixo:
Serverless: Stack update finished...
Service Information
service: serverless
stage: dev
region: us-east-2
stack: serverless-dev
resources: 30
api keys:
None
endpoints:
POST - https://e7av0vz39e.execute-api.us-east-2.amazonaws.com/dev/employee
GET - https://e7av0vz39e.execute-api.us-east-2.amazonaws.com/dev/employee/{id}
PUT - https://e7av0vz39e.execute-api.us-east-2.amazonaws.com/dev/employee/{id}
DELETE - https://e7av0vz39e.execute-api.us-east-2.amazonaws.com/dev/employee/{id}
functions:
create: serverless-dev-create
list: serverless-dev-list
update: serverless-dev-update
delete: serverless-dev-delete
layers:
None
Propriedade | Significado |
---|---|
id | Número único identificador do Funcionário |
nome | Nome do funcionário |
idade | Idade do Funcionário |
cargo | Cargo ocupado pelo funcionário |
Retorna o funcionário com a id informada
HTTP/1.1 200 OK
{
"id": "ad8ecede-ddc5-4f50-980a-2f55cb0bc42e",
"nome": "João",
"idade": "26",
"cargo": "Mecânico"
}
Cria um novo funcionário
{
"nome": "João",
"idade": "26",
"cargo": "Mecânico"
}
HTTP/1.1 200 Created
{
"id": "ad8ecede-ddc5-4f50-980a-2f55cb0bc42e",
"nome": "João",
"idade": "26",
"cargo": "Mecânico"
}
Modifica um funcionário existente
{
"nome": "João Silva",
"idade": "26",
"cargo": "Mecânico"
}
HTTP/1.1 200 OK
{
"id": "ad8ecede-ddc5-4f50-980a-2f55cb0bc42e",
"nome": "João Silva",
"idade": "26",
"cargo": "Mecânico"
}
Remove um funcionário
HTTP/1.1 200 OK
{}