#amazon-s3 #s3 #aws #env-var #json-xml #aws-access

aws-sdk-rust

重要更新:1) 支持 V2 和 V4 API 签名,适用于兼容Ceph等第三方S3产品 2) 支持通过代理服务器工作 3) 返回数据可以是Rust结构体、JSON或XML。仅适用于S3。其他AWS存储功能即将推出!

42个版本

使用旧的Rust 2015

0.1.42 2017年6月13日
0.1.41 2017年3月4日
0.1.40 2017年2月15日
0.1.39 2017年1月5日
0.1.8 2016年8月31日

#1531网络编程

40 次每月下载
用于 3 crates

Apache-2.0

1.5MB
13K SLoC

包含 (WOFF字体, 120KB) docs/Heuristica-Italic.woff, (WOFF字体, 90KB) docs/FiraSans-Medium.woff, (WOFF字体, 92KB) docs/FiraSans-Regular.woff, (WOFF字体, 56KB) docs/SourceCodePro-Regular.woff, (WOFF字体, 56KB) docs/SourceCodePro-Semibold.woff, (WOFF字体, 49KB) docs/SourceSerifPro-Bold.woff 及更多.

AWS SDK for Rust

aws-sdk-rust Crates.io Crates.io

文档

AWS SDK,最初专注于S3。支持V2和V4认证签名。允许自定义应用程序配置、环境变量、标准/.aws/credentials和未来的Iam凭证。不对如何处理您对AWS的访问做出任何环境假设或意见。

JSON和示例

见下...

S3

初始访问是为了支持AWS S3。SDK构建用于允许支持S3 API接口的非aws环境,如Ceph和其他对象存储库,可以从Rust访问。

代理

在许多企业环境中,使用代理是强制性的。代理通常通过设置以下环境变量来处理

http_proxy=<whatever your proxy url>:<whatever port if any>
https_proxy=<whatever your proxy url>:<whatever port if any>
no_proxy=<whatever IPs, domains, hosts, etc that should not go through a proxy (separate by commas)>

您还可以通过Url将代理设置传递给S3Client,或传递 None。这将允许您在需要时使用自己的配置文件,以便您可以读取代理设置并将其传递给S3Client。

配置凭证

在使用SDK之前,请确保您已配置凭证。在开发机器上配置凭证的最佳方式是使用~/.aws/credentials文件,它可能看起来像

[default]
aws_access_key_id = <whatever access_key_id>
aws_secret_access_key = <whatever secret_access_key>

您可以从这篇博客文章中了解更多关于凭证文件的信息。

或者,您可以设置以下环境变量

AWS_ACCESS_KEY_ID=<whatever access_key_id>
AWS_SECRET_ACCESS_KEY=<whatever secret_access_key>

使用Rust SDK

要在SDK中使用服务,通过调用 S3Client::new(...) 函数创建一个服务变量。一旦你有了服务客户端,你可以调用API操作,每个操作都会返回响应数据和可能的错误。

简单示例

要列出S3中的存储桶,你可以运行

// NOTE: See the src/main.rs for more examples...

extern crate aws_sdk_rust;
extern crate url;
extern crate hyper;

use aws_sdk_rust::aws::common::credentials::DefaultCredentialsProvider;
use aws_sdk_rust::aws::common::region::Region;
use aws_sdk_rust::aws::s3::endpoint::Endpoint;
use aws_sdk_rust::aws::s3::s3client::S3Client;

fn main() {
    // DefaultCredentialsProvider will end up cycling through the credentials provider list in
    // the following order:
    // 1. Environment - Checks the envrionment variables:
    //      AWS_ACCESS_KEY_ID
    //      AWS_SECRET_ACCESS_KEY
    //      AWS_SESSION_TOKEN
    // 2. Parameters passed in via ParametersProvider (see example below)
    // 3. Profile provider - ~/.aws/credentials
    // 4. IAM Provider

    // Option to initialize the ParametersProvider
    /* Example of using parameters for passing the credentials.
    use aws_sdk_rust::aws::common::credentials::{DefaultCredentialsProvider, ParametersProvider};

    let param_provider: Option<ParametersProvider>;
    param_provider = Some(
        ParametersProvider::with_params(
            "<whatever your access_key_id>",
            "<whatever your secret_access_key>",
            None).unwrap()
    );

    let provider = DefaultCredentialsProvider::new(param_provider).unwrap();
    */

    // Allow the defaults w/o ParametersProvider - pass in 'None' in ::new(None)
    let provider = DefaultCredentialsProvider::new(None).unwrap();

    // V4 is the default signature for AWS. However, other systems also use V2.
    let endpoint = Endpoint::new(Region::UsEast1, Signature::V4, None, None, None);
    let client = S3Client::new(provider, endpoint);

    match client.list_buckets() {
      Ok(output) => {
        println!("{:#?}", output);
      }
      Err(error) => {
        println!("Error: {:#?}", error);
      }
    }
}

健壮示例

查看 /examples/s3.rs。此示例用于测试所有功能,包括创建存储桶、加载对象(包括分片上传)、版本控制等,最后删除它创建的存储桶。然而,删除存储桶可能会出错,因为你可能有对象的版本。如果是这种情况,请直接登录到S3控制台并删除它们。我们还可以提供delete_all来清除具有版本控制的存储桶中的版本。

灵感

如果您需要访问S3以外的其他AWS系统,请查看rusoto (https://github.com/rusoto/rusoto)。最初的灵感来自那里,Python Boto3和aws-sdk-go。

库开发

路径

结构被分解为以下路径

common

errors

s3

XML

AWS S3使用XML进行传输和接收(包括头信息)。目前还没有好的XML序列化实现(serde适用于反序列化),因此必须为从S3发送和接收的每个XML构造定义解析器/写入器(rusoto项目在这个领域做了大量的艰苦工作)。

其他AWS服务主要使用JSON,并且可以进行De/序列化。

JSON

该库现在支持几乎所有结构的JSON。有一些结构使用[u8]切片,不易序列化或反序列化,因此这些结构将支持一个或另一个(序列化/反序列化),并在文档中注明。

依赖项

~14MB
~288K SLoC