aws-sdk: 调用 AWS 服务的 API
安装
如果您尚未设置 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
要在 NGINX 中使用此 Lua 库,请确保已安装 nginx-module-lua。
本文档描述了 lua-resty-aws-sdk v0.1.0,于 2016 年 11 月 22 日发布。
此 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 - 请求体
因为 AWS SDK API 只提供数据。您可以在其上构建自己的 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
此函数将帮助您使用与您使用的资源(ec2/ecs 等)相关的 iam 角色创建一个新的凭证表。它简单地向 169.254.169.254 发送 HTTP 请求以获取元数据。有关 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
您可以在 nginx-module-aws-sdk 的 GitHub 仓库 中找到此模块的其他配置提示和文档。