lua-resty-s3

ngx_lua 的 AWS S3 客户端

$ opm get oooohhoo/lua-resty-s3

名称

ngx_lua 的 Amazon S3 客户端。

实现了 Amazon 签名 V4:http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/API/sig-v4-authenticating-requests.html。

用法

加载此库

您需要在 ngx_lua 的 lua_package_path 指令中指定此库的路径。例如

    http {
       lua_package_path '/path/to/lua-resty-s3/lib/?.lua;;';
    }

您可以使用 require 将库加载到一个本地 Lua 变量中

    local awss3 = require("resty.s3")

方法

    -- require package
    local awss3 = require "resty.s3"
    
    -- init instance.
    local s3 = awss3:new(AWSAccessKeyId, AWSSecretAccessKey, aws_bucket, {timeout=1000*10})
    
    -- get a object. http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html
    local ok, response = s3:get(key)
    
    -- get a object. http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html
    local ok, response = s3:head(key)
    
    -- put a object. http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html
    local ok, response = s3:put(key, value, headers)
    
    -- delete a object. http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html
    local ok, response = s3:delete(key)
    
    -- delete multi objects. http://docs.aws.amazon.com/AmazonS3/latest/API/multiobjectdeleteapi.html
    local ok, response = s3:deletes(keys, quiet)
    
    -- list files. http://docs.aws.amazon.com/AmazonS3/latest/API/v2-RESTBucketGET.html
    local ok, files = s3:list(prefix, delimiter, page_size, marker)
    
    -- copy files.  https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html
    local ok, response = s3:copy(key, source, headers)
    
    -- -- signature-v4. http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html
    local authorization, signature, extinfo = s3:authorization_v4(method, url, headers)
    

依赖

测试

安装测试依赖项

    opm get jie123108/lua-resty-test

运行签名-v4-测试套件

    cd path/to/lua-resty-s3
    resty -I lib test/aws-sig-v4-test-suite.lua

在 AWS 网站上运行签名示例。

AWS 网站上的签名示例

    resty -I lib test/test-s3-sign-examples.lua

运行 s3 测试

使用 Minio 进行测试

使用 docker 运行 minio

  • 1. 启动 minio 容器

    docker run -d -it --name s3 -p 9000:9000 \
    -e MINIO_ACCESS_KEY=THE_ACCESS_KEY_ID \
    -e MINIO_SECRET_KEY=THE_SECRET_ACCESS_KEY \
    minio/minio server /data/minio_data
  • 2. 访问 minio 控制台:http://127.0.0.1:9000/minio/

    • 访问密钥:THE_ACCESS_KEY_ID

    • 密钥:THE_SECRET_ACCESS_KEY

  • 3. 在控制台中添加一个名为“def”的存储桶

    • 登录后,点击右下角的+按钮,然后在弹出菜单中点击创建存储桶

运行测试

    resty -I lib test/test-s3.lua

使用 aws s3 进行测试

    S3_CONFIG="S3_ACCESS_ID:S3_ACCESS_SECERT_KEY:s3_bucket_name:s3_region" resty -I lib test/test-s3.lua

许可证

此模块根据 2 条款 BSD 许可证授权。

版权所有 (c) 2017,刘晓杰 <jie123108@163.com>

保留所有权利。

在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改:

  • 源代码的重新分发必须保留上述版权声明、此条件列表和以下免责声明。

  • 二进制形式的重新分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表和以下免责声明。

本软件由版权持有人和贡献者“按原样”提供,并且任何明示或暗示的保证,包括但不限于适销性和特定用途适用性的暗示保证,均被排除在外。在任何情况下,版权持有人或贡献者均不对任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润损失;或业务中断)负责,无论这些损害是如何造成的以及基于何种责任理论,无论是合同、严格责任还是侵权行为(包括疏忽或其他原因),即使已被告知此类损害的可能性。

POD 错误

您好!以上文档存在一些编码错误,解释如下:

大约在第 76 行

L<> 以空格开头或结尾

大约在第 95 行

L<> 以空格开头或结尾

作者

jie123108@163.com

许可证

2bsd

依赖项

billythedummy/SLAXML >= 0.8, jkeys089/lua-resty-hmac >= 0.01, ledgetech/lua-resty-http >= 0.01, openresty >= 1.9.3.1

版本