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.
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
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.
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.
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
Clique em Criar Api Gateway e em seguida em criar novo REST API
Agora você deve criar um novo Resource clicando em Ações, este recurso você pode chamar de Bucket
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.
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.
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:
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:
Agora clique em URL Path Paremeters e coloque as informações abaixo:
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.
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:
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
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.
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.