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.lambdaresty.aws.sqsresty.aws.sns
GitHub
Вы можете найти дополнительные советы по настройке и документацию для этого модуля в репозитории GitHub для nginx-module-aws-sdk.