#amazon-s3 #s3 #aws #amazon #access-key #aws-access

app s3-concat

使用灵活的模式远程连接 Amazon S3 文件

2 个稳定版本

1.1.0 2019 年 8 月 28 日
1.0.0 2018 年 11 月 4 日

#1481 in 文件系统

MIT 许可证

25KB
386

S3 Concat

Crates.io Build Status

S3 Concat 是一个用于 AWS S3 中连接文件的轻量级工具。它通过 AWS 提供的 Multipart Upload API 连接文件,从而避免了将文件下载到本地机器的需要。S3 交互由 rusoto_s3 控制,因此请查看相关文档以了解授权实践。

安装

您可以从这个仓库或 Crates(一旦发布)安装 s3-concat

# install from Cargo
$ cargo install s3-concat

# install the latest from GitHub
$ cargo install --git https://github.com/whitfin/s3-concat.git

用法

您可以通过遵循 AWS 文档 中的说明来配置凭证,尽管示例将使用环境变量以提高清晰度。

您只需提供源模式和一个目标文件路径即可以基本方式连接文件。

$ AWS_ACCESS_KEY_ID=MY_ACCESS_KEY_ID \
    AWS_SECRET_ACCESS_KEY=MY_SECRET_ACCESS_KEY \
    AWS_DEFAULT_REGION=us-west-2 \
    s3-concat my.bucket.name 'archives/*.gz' 'archive.gz'

如果您正在处理较长的路径,可以在存储桶名称上添加一个前缀,以避免多次输入。在下面的示例中,*.gzarchive.gz 是相对于 my/annoyingly/nested/path/ 前缀的。

$ AWS_ACCESS_KEY_ID=MY_ACCESS_KEY_ID \
    AWS_SECRET_ACCESS_KEY=MY_SECRET_ACCESS_KEY \
    AWS_DEFAULT_REGION=us-west-2 \
    s3-concat my.bucket.name/my/annoyingly/nested/path/ '*.gz' 'archive.gz'

您还可以使用正则表达式(由官方 regex Crate 驱动)来在目标路径中使用源路径的部分。以下是一个将日期层次结构(YYYY/MM/DD)映射到平面结构(YYYY-MM-DD)的示例。

$ AWS_ACCESS_KEY_ID=MY_ACCESS_KEY_ID \
    AWS_SECRET_ACCESS_KEY=MY_SECRET_ACCESS_KEY \
    AWS_DEFAULT_REGION=us-west-2 \
    s3-concat my.bucket.name 'date-hierachy/(\d{4})/(\d{2})/(\d{2})/*.gz' 'flat-hierarchy/$1-$2-$3.gz'

在这种情况下,所有在2018/01/01/*目录下的文件都会映射到2018-01-01.gz。别忘了在你的表达式周围加上单引号,以避免任何讨厌的shell展开!

对于其他任何功能,请查看帮助菜单(尽管下面的示例可能已经过时)

$ s3-concat -h
s3-concat 1.0.0
Isaac Whitfield <[email protected]>
Concatenate Amazon S3 files remotely using flexible patterns

USAGE:
    s3-concat [FLAGS] <bucket> <source> <target>

FLAGS:
    -c, --cleanup    Removes source files after concatenation
    -d, --dry-run    Only print out the calculated writes
    -h, --help       Prints help information
    -q, --quiet      Only prints errors during execution
    -V, --version    Prints version information

ARGS:
    <bucket>    An S3 bucket prefix to work within
    <source>    A source pattern to use to locate files
    <target>    A target pattern to use to concatenate files into

限制

为了远程连接文件(即不将它们拉到你的机器上),此工具使用了S3的多部分上传API。这意味着该API的所有限制都被此工具继承。通常,这不是问题,但一个更加明显的问题是,小于5MB的文件无法连接。为了避免浪费AWS调用,目前这在客户端层被捕获,并会导致客户端错误。由于解决这个问题比较复杂,目前不支持连接小于5MB的文件。

依赖

~22MB
~397K SLoC