Перейти к содержанию

aws-sdk: Выполнение API вызовов к сервисам AWS

Установка

Если вы еще не настроили подписку на репозиторий RPM, зарегистрируйтесь. Затем вы можете продолжить с следующими шагами.

CentOS/RHEL 7 или 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

Чтобы использовать эту библиотеку Lua с NGINX, убедитесь, что установлен nginx-module-lua.

Этот документ описывает lua-resty-aws-sdk v0.1.0, выпущенную 22 ноября 2016 года.


Эта библиотека Lua предоставляет основные функции для подписи запросов к AWS и их создания. Вы можете использовать этот модуль с proxy_pass, lua-resty-http или любой другой библиотекой, которую вы хотите.

Синопсис

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

Структура запроса

Переменная req в приведенном выше коде представляет собой объект данных, который включает в себя следующую информацию:

  • headers - заголовки в виде списка { { k, v } }
  • hostname - имя хоста, к которому вы можете отправить API-запрос
  • port - порт, только 443
  • pathname - путь для API
  • method - метод запроса, который вы можете использовать для отправки API-запроса
  • query - строка запроса в виде строки
  • body - тело запроса

Поскольку API SDK AWS предоставляет только данные, вы можете строить свои собственные API на их основе. Он не заботится о том, какую библиотеку http вы используете.

Учетные данные

Учетные данные AWS очень важны в API-запросе. Поэтому убедитесь, что вы выбрали правильный способ чтения и передачи ваших учетных данных в запрос.

В этой библиотеке предоставляется модуль под названием resty.aws.cred, который позволяет получать ваши учетные данные из различных источников.

Таблица учетных данных будет иметь структуру данных, которая выглядит следующим образом:

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

Сессионный токен широко используется в различных местах iam/sts, но не является обязательным полем.

from_env

Эта функция поможет вам создать новую таблицу учетных данных, используя переменные окружения, связанные с AWS_, имена переменных соответствуют 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

Эта функция поможет вам создать новую таблицу учетных данных, используя роль iam, связанную с ресурсом (ec2/ecs и т.д.), который вы используете. Она просто отправляет HTTP-запрос на 169.254.169.254, чтобы получить информацию о метаданных. Для получения дополнительной информации о роли iam и метаданных вам нужно ознакомиться с документацией AWS.

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

Вклад

Исходные файлы сервиса генерируются с помощью файла codegen/main.lua. Все файлы сервиса имеют одинаковый формат. А botocore в качестве подмодуля предоставляет хорошую спецификацию API. Нам не нужно вручную создавать Lua API для каждого сервиса. Вместо этого, как только мы завершим скрипт генерации кода, api-spec + codegen сгенерируют код для нас. Поэтому не изменяйте код вручную в директории lib/resty/aws.

Поддерживаемые методы подписи

Реализованные сервисы

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

GitHub

Вы можете найти дополнительные советы по настройке и документацию для этого модуля в репозитории GitHub для nginx-module-aws-sdk.