Este repositório contém o código fonte do Bootcamp Cloud AWS. Neste projeto criamos uma infraestrutra em nuvem AWS com API Gateway, DynamoDB, AWS Lambda e AWS CloudFormation utilizando o framework Serverless para o desenvolvimento baseada em Infraestrutura as a Code.
Pré requisitos:
- possuir uma conta na AWS e instalar Node.js na máquina.
- Instalar o AWS CLI: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html
- Criar usuário: AWS Management Console -> IAM Dashboard -> Create New User -> <nome do usuário> -> Permissions "Administrator Access" -> Programmatic Access -> Dowload Keys
- No terminal:
$ serverless config credentiaals --provide aws --key<sua-key> --secret<sua-secret>
-> colar as credenciais geradas anteriormente
$ npm i -g serverless
$ serverless
Login/Register: No
Update: No
Type: Node.js REST API
Name: dio-live
$ cd dio-live
$ code .
- No arquivo
serverless.yml
adicionar a regiãoregion: us-east-2
dentro do escopo deprovider:
- Salvar e realizar o deploy
$ serverless deploy -v
Atualizar o arquivo serverless.yml
resources:
Resources:
ItemTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ItemTable
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
- Pasta /src do repositório
- Obter arn da tabela no DynamoDB AWS Console -> DynamoDB -> Overview -> Amazon Resource Name (ARN)
- Atualizar arquivo serverless.yml com o código a seguir, abaixo do ```region:```
iam:
role:
statements:
- Effect: Allow
Action:
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:GetItem
- dynamodb:Scan
Resource:
- arn:aws:dynamodb:us-east-1:167880115321:table/ItemTable
- Instalar dependências
npm init
npm i uuid aws-sdk
- Atualizar lista de funções no arquivo serverless.yml
functions:
hello:
handler: src/hello.handler
events:
- http:
path: /
method: get
insertItem:
handler: src/insertItem.handler
events:
- http:
path: /item
method: post
fetchItems:
handler: src/fetchItems.handler
events:
- http:
path: /items
method: get
fetchItem:
handler: src/fetchItem.handler
events:
- http:
path: /items/{id}
method: get
updateItem:
handler: src/updateItem.handler
events:
- http:
path: /items/{id}
method: put