跳转至

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_passlua-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.lambda
  • resty.aws.sqs
  • resty.aws.sns

GitHub

您可以在 nginx-module-aws-sdk 的 GitHub 仓库 中找到此模块的其他配置提示和文档。