Pular para conteúdo

aws-sdk: Faça chamadas de API para serviços da AWS

Instalação

Se você ainda não configurou a assinatura do repositório RPM, inscreva-se. Em seguida, você pode prosseguir com os seguintes passos.

CentOS/RHEL 7 ou Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-aws-sdk

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-aws-sdk

Para usar esta biblioteca Lua com NGINX, certifique-se de que o nginx-module-lua esteja instalado.

Este documento descreve o lua-resty-aws-sdk v0.1.0 lançado em 22 de novembro de 2016.


Esta biblioteca Lua fornece recursos básicos de assinatura de solicitações AWS e criação de funções. Você pode usar este módulo com proxy_pass, ou lua-resty-http ou qualquer outra biblioteca que desejar.

Sinopse

local lambda = require 'resty.aws.lambda'
local cred = requrie 'resty.aws.cred'
local json = require 'cjson'

local c = cred.from_env()
local l = lambda:new()
local body = json.encode({
  foo = 'bar'
})

local req = l:Invoke(c, {
    FunctionName = 'test' 
    ['X-Amz-Client-Context'] = '<some_base64_json_context>'
}, body)

-- faça algo com req

Estrutura da Solicitação

A variável req no código acima é apenas um objeto de dados que inclui as seguintes informações:

  • headers - cabeçalhos como uma lista { { k, v } }
  • hostname - o hostname para o qual você pode enviar a solicitação da API
  • port - a porta, apenas 443
  • pathname - o caminho para a API
  • method - o método de solicitação que você pode usar para enviar a solicitação da API
  • query - a string de consulta como string
  • body - o corpo da solicitação

Como a API do SDK da AWS fornece apenas dados, você pode construir suas próprias APIs em cima deles. Não se importa com qual biblioteca http você usa.

Credenciais

As credenciais da AWS são muito importantes na solicitação da API. Portanto, certifique-se de escolher a maneira certa de ler e passar suas credenciais para a solicitação.

Nesta biblioteca, ela fornece um módulo chamado resty.aws.cred. Que permite que você obtenha suas credenciais de diferentes lugares.

A tabela de credenciais terá uma estrutura de dados que se parece com isto:

{
  key = String,
  secret = String,
  session_token = ?String
}

O token de sessão é amplamente utilizado em diferentes lugares iam/sts. Mas não é um campo obrigatório.

from_env

Esta função ajudará você a criar uma nova tabela de credenciais usando variáveis de ambiente relacionadas a AWS_, os nomes das variáveis são consistentes com aws-cli.

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN
local c = require 'resty.aws.cred'
local credential = c.from_env()

from_iam

Esta função ajudará você a criar uma nova tabela de credenciais usando a função iam que está relacionada ao recurso (ec2/ecs/..) que você usa. Ela simplesmente envia uma solicitação http para 169.254.169.254 para obter as informações de metadados. Para mais informações sobre a função iam e metadados, você precisa verificar a Documentação da AWS sobre isso.

local c = require 'resty.aws.cred'
local credential = c.from_iam('lambdainvoke')

Contribuir

Os arquivos de origem do serviço são gerados usando o arquivo codegen/main.lua para criar. Todos os arquivos de serviço compartilham o mesmo formato. E botocore como um submódulo fornece uma boa especificação da API. Não precisamos fazer o trabalho maçante de criar a API lua para cada serviço manualmente. Em vez disso, uma vez que terminamos o script de geração de código, o api-spec + codegen gerará o código para nós. Portanto, não altere o código manualmente no diretório lib/resty/aws.

Métodos de assinatura suportados

Serviços Implementados

  • resty.aws.lambda
  • resty.aws.sqs
  • resty.aws.sns

GitHub

Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-aws-sdk.