Saltar a contenido

aws-sdk: Realizar llamadas a la API de servicios de AWS

Instalación

Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.

CentOS/RHEL 7 o 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 con NGINX, asegúrate de que el nginx-module-lua esté instalado.

Este documento describe lua-resty-aws-sdk v0.1.0 lanzado el 22 de noviembre de 2016.


Esta biblioteca Lua proporciona funciones básicas de firma de solicitudes AWS y creación de características. Puedes usar este módulo con proxy_pass, o lua-resty-http o cualquier otra biblioteca que desees.

Sinopsis

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)

-- hacer algo con req

Estructura de la Solicitud

La variable req en el código anterior es solo un objeto de datos que incluye la siguiente información:

  • headers - encabezados como una lista { { k, v } }
  • hostname - el nombre de host al que puedes enviar la solicitud API
  • port - el puerto, solo 443
  • pathname - la ruta para la API
  • method - el método de solicitud que puedes usar para enviar la solicitud API
  • query - la cadena de consulta como cadena
  • body - el cuerpo de la solicitud

Debido a que la API del SDK de AWS solo te proporciona datos. Puedes construir tus propias APIs sobre ellos. No le importa qué biblioteca http uses.

Credenciales

Las credenciales de AWS son muy importantes en la solicitud API. Así que asegúrate de elegir la forma correcta de leer y pasar tus credenciales a la solicitud.

En esta biblioteca, se proporciona un módulo llamado resty.aws.cred. Que te permite obtener tus credenciales de diferentes lugares.

La tabla de credenciales tendrá una estructura de datos que se verá así:

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

El token de sesión se utiliza ampliamente en diferentes lugares iam/sts. Pero no es un campo requerido.

from_env

Esta función te ayudará a crear una nueva tabla de credenciales utilizando variables de entorno relacionadas con AWS_, los nombres de las variables son consistentes con 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 función te ayudará a crear una nueva tabla de credenciales utilizando un rol de iam que esté relacionado con el recurso (ec2/ecs/..) que utilizas. Simplemente envía una solicitud http a 169.254.169.254 para obtener la información de metadatos. Para más información sobre el rol de iam y los metadatos, debes consultar el Documento de AWS al respecto.

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

Contribuir

Los archivos fuente del servicio se generan utilizando el archivo codegen/main.lua para crear. Todos los archivos de servicio comparten el mismo formato. Y botocore como submódulo proporciona una buena especificación de API. No necesitamos hacer el trabajo tedioso de crear manualmente la API de lua para cada servicio. En su lugar, una vez que terminemos el script de generación de código, el api-spec + codegen generará el código por nosotros. Así que, no cambies el código manualmente en el directorio lib/resty/aws.

Métodos de firma soportados

Servicios Implementados

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

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-aws-sdk.