API Gateway com S3

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
Figura 1 – AWS API Gateway

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
Figura 2 – 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.

Figura 3 - IAM Role Criada
Figura 3 – 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.

Figura 4 - Trust Relationships
Figura 4 – Trust Relationships

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
Figura 5 – Api Gateway

Clique em Criar Api Gateway e em seguida em criar novo REST API

Figura 6 - Novo REST API
Figura 6 – Novo REST API

Agora você deve criar um novo Resource clicando em Ações, este recurso você pode chamar de Bucket

Figura 7 - Criando um novo Recurso
Figura 7 – Criando um novo Recurso

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
Figura 8 – Criando um novo recursos Item

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
Figura 9 – Criando um método GET

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
Figura 10 – AWS Services API

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
Figura 11 – Integration Requests

Agora clique em URL Path Paremeters e coloque as informações abaixo:

Figura 12 - URL Path Parameters
Figura 12 – URL Path Parameters

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
Figura 13 – Testando um API 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:

Figura 14 - Retorno do Método GET
Figura 14 – Retorno do Método GET

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
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.

Figura 15 - Novo Arquivo no Bucket
Figura 15 – Novo Arquivo no Bucket

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.