Neste artigo vamos fazer um Walkthrough de uma solução onde iremos criar um novo API Gateway atrelado a um bucket s3 e nele faremos um endpoint de API que irá ler um arquivo existente no bucket e gravar um novo arquivo em branco diretamente no bucket.
![Figura 1 - AWS API Gateway](http://comunidadecloud.com/wp-content/uploads/2020/05/aws-api-gateway-logo-2018-11-11.png)
Primeiramente vamos configurar algumas coisas antes de iniciar o tutorial.
O primeiro recurso que vamos criar é o nosso IAM Role, que irá permitir que o Api Gateway se conecte ao bucket e faça as operações necessárias!
Neste artigo vamos ver apenas uma forma de ler arquivos texto e o método de criar novos arquivos, então antes de tudo vamos fazer uma IAM Role condizente com estas permissões.
Entre no IAM > Roles
![Figura 2 - IAM Roles](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_18-40.png)
O nome da nossa Role será api-role-s3e para que ela tenha exatamente as especificações de segurança que queremos, vamos também criar uma Policy.
O nome dessa policy será: api-policy-s3 e o json dela estará abaixo:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "*"
}
]
}
No final teremos a seguinte IAM Role criada.
![Figura 3 - IAM Role Criada](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_18-46.png)
Outro ponto importante desta nossa IAM Role é que devemos dar a possibilidade desta role ter relação com o Api Gateway, para isto basta entrar na aba de relacionamento e incluir o Api Gateway.
![Figura 4 - Trust Relationships](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_18-49.png)
Ao clicar em editar você deve editar o Json como o exemplo abaixo:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": ["apigateway.amazonaws.com","s3.amazonaws.com"]
},
"Action": "sts:AssumeRole"
}
]
}
Agora, crie um novo bucket simples, basta acessar no console bucket e criar novo, o nome deste bucket para o exemplo será image-buckets-2020.
A principal parte deste artigo será na criação e utilização do Api Gateway, ele terá as informações de entrada e a comunicação com o nosso S3 Bucket e fará o trabalho de envio de comandos para o S3 Api, criando e listando os arquivos conforme evoluimos aqui
![Figura 5 - Api Gateway](http://comunidadecloud.com/wp-content/uploads/2020/05/apigateway-console.png)
Clique em Criar Api Gateway e em seguida em criar novo REST API
![Figura 6 - Novo REST API](http://comunidadecloud.com/wp-content/uploads/2020/05/Screenshot-from-2020-05-15-23-05-18.png)
Agora você deve criar um novo Resource clicando em Ações, este recurso você pode chamar de Bucket
![Figura 7 - Criando um novo Recurso](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_18-55.png)
Clique sob o recurso criado, deixando ele selecionado e agora clique em Ações novamente e vamos criar um novo Resource chamado item, porém atente-se abaixo na declaração, pois este endpoint, será uma variável que será informada no futuro por um integrador externo.
![Figura 8 - Criando um novo recursos Item](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_19-23.png)
Este item como você deve ver irá receber um valor variável, este valor no nosso caso, será o nome do arquivo no bucket.
Agora vamos criar um novo Método GET para o Item que acabamos de criar, para isso selecione ele na lista de endpoints do API Gateway e clique em ações e depois Create Method.
![Figura 9 - Criando um método GET](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_19-27.png)
Selecione o método GET criado e agora vamos ligar as pontas entre o API Gateway e o nosso Bucket S3.
AWS Services
O API Gateway, permite ser utilizado de diversas formas internamente, e neste caso iremos usar a conexão de AWS Services que o painel nos fornece, esta conexão, irá abstrair toda a lógica de comandos internos para com o S3, sem nos preocuparmos de criar uma programação que faça o mesmo, já temos tudo in-box.
Para isso selecione na lista o AWS Services e informe as seguintes configurações:
![Figura 10 - AWS Services API](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_19-32.png)
Basta informar estes dados e pronto, estamos quase prontos para ler um arquivo diretamente pelo API Gateway
Para que ele funcione corretamente, devemos informar ao Api Gateway, que a variável Item, existe e ela tem uma origem, esta origem será passada no request, para isso o Api Gateway possuí uma nomenclatura própria que irá tratar isso internamente, são seus metadatas.
Para incluir isto, após a criação do recurso, selecione a Linha do Item e altere a seguinte área.
Selecione o GET criado e então selecione a área do endpoint:
![Figura 11 - Integration Requests](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_19-41.png)
Agora clique em URL Path Paremeters e coloque as informações abaixo:
![Figura 12 - URL Path Parameters](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_00-08.png)
Agora temos o método pronto para ser usado, o API Gateway, traz nas suas funções a possibilidade de testá-lo, você verá o botão de teste sempre que selecionar o método de um endpoint.
![Figura 13 - Testando um API Endpoint](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_19-54.png)
Clicando em testes, você tem a opção de incluir um parâmetro, este parâmetro é o valor para a nossa variável Item, que será o nome de um arquivo que está dentro do bucket, então criei um arquivo chamado teste.txt e escreva nele Olá Comunidade Cloud, ao passar o parâmetro (o nome do arquivo), devemos ver essa frase exposta no teste, como abaixo:
![Figura 14 - Retorno do Método GET](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_19-57.png)
Feito, com isso atingimos parte do resultado esperado deste artigo, estamos lendo um arquivo existente na raiz do Bucket que criamos a partir de um API Gateway, sem precisar digitar um linha de código.
Agora para fazer a criação de um arquivo exemplo, como foi proposto no começo do arquivo, basta criamos a baixo de Item o método POST, este novo método irá passar para o bucket as intruções de criação do arquivo, conforme vamos ver abaixo.
Método Post
Tudo o que aprendemos aqui vai agora acelerar as coisas, então selecione o endpoint Item e crie um novo método chamado POST e faça as configurações que fizemos anteriormente, porém ao selecionar o Http Method, atente-se em selecionar o tipo em questão que será o Post.
Figura 15 – Método POST API
![Figura 15 - Método POST API](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_20-09.png)
Antes de iniciar o teste, não se esqueça de incluir o URL Path Parameters, pois sem isso o API Gateway não saberá da existência deste parâmetro e nem da sua origem.
Pronto, agora ao clicar em Test do API Gateway e enviar um parâmetro, por exemplo, comunidadecloud.txt, o bucket agora terá o arquivo com este nome.
![Figura 15 - Novo Arquivo no Bucket](http://comunidadecloud.com/wp-content/uploads/2020/05/2020-05-16_20-13.png)
Então é isso, aqui conseguimos provar que com zero linha de código, nós podemos criar algumas funcionalidades que levariam certo tempo para serem criadas e disponibilizadas, muitas soluções simples de leitura de arquivos como esta já poderiam ser disponibilzadas para um serviço de integração e também nos mostra as possibilidades desse serviço, não sendo apenas o que o nome indica, API Gateway, mas ele é um enorme integrador de serviços e recursos.
Abraços.