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.lambdaresty.aws.sqsresty.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.