Aller au contenu

aws-sdk: Effectuer un appel API aux services AWS

Installation

Si vous n'avez pas encore configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.

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

Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que le nginx-module-lua est installé.

Ce document décrit lua-resty-aws-sdk v0.1.0 publié le 22 novembre 2016.


Cette bibliothèque Lua fournit des fonctionnalités de signature de requêtes AWS et de création de requêtes. Vous pouvez utiliser ce module avec proxy_pass, ou lua-resty-http ou toute autre bibliothèque que vous souhaitez.

Synopsis

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)

-- do something with req

Structure de la requête

La variable req dans le code ci-dessus est simplement un objet de données qui inclut les informations suivantes :

  • headers - en-têtes sous forme de liste { { k, v } }
  • hostname - le nom d'hôte auquel vous pouvez envoyer la requête API
  • port - le port, uniquement 443
  • pathname - le chemin pour l'API
  • method - la méthode de requête que vous pouvez utiliser pour envoyer la requête API
  • query - la chaîne de requête sous forme de chaîne
  • body - le corps de la requête

Parce que l'API SDK AWS ne vous fournit que des données. Vous pouvez construire vos propres API par-dessus. Elle ne se préoccupe pas de la bibliothèque http que vous utilisez.

Identifiants

Les identifiants AWS sont très importants dans la requête API. Assurez-vous donc de choisir la bonne méthode pour lire et transmettre vos identifiants à la requête.

Dans cette bibliothèque, elle fournit un module appelé resty.aws.cred. Ce qui vous permet d'obtenir vos identifiants à partir de différents endroits.

La table des identifiants aura une structure de données qui ressemble à ceci :

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

Le token de session est largement utilisé à différents endroits iam/sts. Mais ce n'est pas un champ requis.

from_env

Cette fonction vous aidera à créer une nouvelle table d'identifiants en utilisant les variables d'environnement liées à AWS_, les noms des variables sont conformes à 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

Cette fonction vous aidera à créer une nouvelle table d'identifiants en utilisant le rôle iam qui est lié à la ressource (ec2/ecs/..) que vous utilisez. Elle envoie simplement une requête http à 169.254.169.254 pour obtenir les informations de métadonnées. Pour plus d'informations sur le rôle iam et les métadonnées, vous devez consulter la documentation AWS à ce sujet.

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

Contribuer

Les fichiers source du service sont générés à l'aide du fichier codegen/main.lua pour créer. Tous les fichiers de service partagent le même format. Et botocore en tant que sous-module fournit une belle spécification API. Nous n'avons pas besoin de faire le travail fastidieux de créer manuellement une API Lua pour chaque service. Au lieu de cela, une fois que nous avons terminé le script de génération de code, le api-spec + codegen générera le code pour nous. Donc, ne modifiez pas le code manuellement dans le répertoire lib/resty/aws.

Méthodes de signature prises en charge

Services implémentés

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

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-aws-sdk.