Zum Inhalt

aws-sdk: API-Aufruf zu AWS-Diensten

Installation

Wenn Sie das RPM-Repository-Abonnement noch nicht eingerichtet haben, melden Sie sich an. Dann können Sie mit den folgenden Schritten fortfahren.

CentOS/RHEL 7 oder 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

Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.

Dieses Dokument beschreibt lua-resty-aws-sdk v0.1.0, das am 22. November 2016 veröffentlicht wurde.


Diese Lua-Bibliothek bietet grundlegende Funktionen zum Signieren von AWS-Anfragen und zum Erstellen von Anfragen. Sie können dieses Modul mit proxy_pass, lua-resty-http oder jeder anderen Bibliothek verwenden, die Sie möchten.

Zusammenfassung

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

Anforderungsstruktur

Die req-Variable im obigen Code ist einfach ein Datenobjekt, das die folgenden Informationen enthält:

  • headers - Header als Liste { { k, v } }
  • hostname - der Hostname, an den Sie die API-Anfrage senden können
  • port - der Port, nur 443
  • pathname - der Pfadname für die API
  • method - die Anforderungsmethode, die Sie verwenden können, um die API-Anfrage zu senden
  • query - die Abfragezeichenfolge als Zeichenfolge
  • body - der Anforderungstext

Da die AWS SDK-API Ihnen nur Daten bereitstellt, können Sie Ihre eigenen APIs darauf aufbauen. Es spielt keine Rolle, welche http-Bibliothek Sie verwenden.

Anmeldeinformationen

AWS-Anmeldeinformationen sind sehr wichtig für die API-Anfrage. Stellen Sie daher sicher, dass Sie den richtigen Weg wählen, um Ihre Anmeldeinformationen zu lesen und an die Anfrage zu übergeben.

In dieser Bibliothek wird ein Modul namens resty.aws.cred bereitgestellt, das es Ihnen ermöglicht, Ihre Anmeldeinformationen aus verschiedenen Quellen zu beziehen.

Die Anmeldeinformationstabelle hat eine Datenstruktur, die folgendermaßen aussieht:

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

Das Sitzungstoken wird an verschiedenen Stellen iam/sts häufig verwendet, ist jedoch kein erforderliches Feld.

from_env

Diese Funktion hilft Ihnen, eine neue Anmeldeinformationstabelle unter Verwendung von AWS_-bezogenen Umgebungsvariablen zu erstellen. Die Namen der Variablen entsprechen denen von 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

Diese Funktion hilft Ihnen, eine neue Anmeldeinformationstabelle unter Verwendung der iam-Rolle zu erstellen, die mit der Ressource (ec2/ecs/..) verbunden ist, die Sie verwenden. Sie sendet einfach eine HTTP-Anfrage an 169.254.169.254, um die Metadateninformationen abzurufen. Für weitere Informationen über die iam-Rolle und Metadaten müssen Sie die AWS-Dokumentation dazu überprüfen.

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

Mitwirken

Die Quellcodedateien der Dienste werden mit der Datei codegen/main.lua erstellt. Alle Dienstdateien teilen dasselbe Format, und botocore als Submodul bietet eine schöne API-Spezifikation. Wir müssen nicht die mühsame Arbeit leisten, für jeden Dienst manuell eine Lua-API zu erstellen. Stattdessen generiert das api-spec + codegen den Code für uns, sobald wir das Skript zur Codegenerierung abgeschlossen haben. Ändern Sie daher den Code nicht manuell im Verzeichnis lib/resty/aws.

Unterstützte Signaturmethoden

Implementierte Dienste

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

GitHub

Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-aws-sdk.