Soto for AWS

sswg:incubating|104x20 Swift 5.4

Soto 是适用于 Amazon Web Services (AWS) 的 Swift 语言 SDK,可在 Linux、macOS 和 iOS 上运行。此库提供对所有 AWS 服务的访问。它提供的服务 API 是 Amazon 为其每项服务发布的 REST API 的直接映射。Soto 是一个社区支持的项目,与 AWS 没有任何关联。

目录

结构

该库由三个部分组成

  1. soto-core,它处理所有核心请求编码和签名、响应解码和错误处理。
  2. 服务 api 文件,其中定义了各个 AWS 服务及其命令以及它们的输入和输出结构。
  3. CodeGenerator,它从 Amazon 提供的 JSON 模型 文件构建服务 api 文件。

Swift Package Manager

Soto 使用 Swift Package Manager 来管理其代码依赖项。为了在您的代码库中使用 Soto,建议您也这样做。在您自己的 Package.swift 依赖项中添加对该软件包的依赖。

    dependencies: [
        .package(url: "https://github.com/soto-project/soto.git", from: "6.0.0")
    ],

然后为您要使用的每个 Soto 目标添加目标依赖项。

    targets: [
        .target(name: "MyApp", dependencies: [
            .product(name: "SotoS3", package: "soto"),
            .product(name: "SotoSES", package: "soto"),
            .product(name: "SotoIAM", package: "soto")
        ]),
    ]
)

或者,如果您使用的是 Xcode 11 或更高版本,则可以使用 Swift Package Manager 集成,并通过它添加对 Soto 的依赖。

兼容性

Soto 可在 Linux、macOS 和 iOS 上运行。它需要 v2.0 版本的 Swift NIO。以下是不同 Soto 版本的兼容性表。

版本 Swift MacOS iOS Linux Vapor
6.x 5.4 - 12.0 - Ubuntu 18.04-22.04 4.0
5.x 5.2 - 12.0 - Ubuntu 18.04-20.04 4.0

配置凭证

在使用 SDK 之前,您需要 AWS 凭证来签署您的所有请求。可以通过以下方式向库提供凭证。

您可以在此处找到有关凭证提供程序的更多信息

使用 Soto

要使用 Soto,您需要创建一个 AWSClient 和一个要使用的 AWS 服务的服务对象。AWSClient 提供与 AWS 的所有通信,而服务对象提供与特定 AWS 服务通信的配置和 API。可以在此处找到有关 AWSClient 的更多信息,在此处找到有关 AWS 服务对象的更多信息。

import SotoS3 //ensure this module is specified as a dependency in your package.swift

let bucket = "my-bucket"

let client = AWSClient(
    credentialProvider: .static(accessKeyId: "Your-Access-Key", secretAccessKey: "Your-Secret-Key"),
    httpClientProvider: .createNew
)
let s3 = S3(client: client, region: .uswest2)

func createBucketPutGetObject() async throws -> S3.GetObjectOutput {
    // Create Bucket, Put an Object, Get the Object
    let createBucketRequest = S3.CreateBucketRequest(bucket: bucket)
    _ = try await s3.createBucket(createBucketRequest)
    // Upload text file to the s3
    let bodyData = "hello world"
    let putObjectRequest = S3.PutObjectRequest(
        acl: .publicRead,
        body: .string(bodyData),
        bucket: bucket,
        key: "hello.txt"
    )
    _ = try await s3.putObject(putObjectRequest)
    // download text file just uploaded to S3
    let getObjectRequest = S3.GetObjectRequest(bucket: bucket, key: "hello.txt")
    let response = try await s3.getObject(getObjectRequest)
    // print contents of response
    if let body = response.body?.asString() {
        print(body)
    }
    return response
}

构建插件

Soto 是一个非常大的软件包。如果您不想将其包含在您的软件包依赖项中,您可以改为使用 SotoCodeGenerator Swift Package Manager 构建插件来仅为您实际需要的服务/操作生成 Swift 源代码。在此处了解更多信息。

文档

API 参考

访问 soto.codes 以浏览用户指南和 API 参考。由于 AWS REST api 调用与 Soto api 调用之间存在一一对应的关系,您还可以使用官方 AWS 文档 来获取有关 AWS 命令的更详细信息。

用户指南

以下是 Soto 特定元素的其他用户指南

贡献

我们欢迎并鼓励所有开发人员做出贡献。请阅读 CONTRIBUTING.md 以获取我们的贡献指南。

许可证

Soto 在 Apache License, Version 2.0 下发布。有关详细信息,请参阅 LICENSE。

赞助者

成为 赞助者 以支持 Soto 的开发