Soto 是适用于 Amazon Web Services (AWS) 的 Swift 语言 SDK,可在 Linux、macOS 和 iOS 上运行。此库提供对所有 AWS 服务的访问。它提供的服务 API 是 Amazon 为其每项服务发布的 REST API 的直接映射。Soto 是一个社区支持的项目,与 AWS 没有任何关联。
该库由三个部分组成
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 凭证来签署您的所有请求。可以通过以下方式向库提供凭证。
AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
您可以在此处找到有关凭证提供程序的更多信息
要使用 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 源代码。在此处了解更多信息。
访问 soto.codes 以浏览用户指南和 API 参考。由于 AWS REST api 调用与 Soto api 调用之间存在一一对应的关系,您还可以使用官方 AWS 文档 来获取有关 AWS 命令的更详细信息。
以下是 Soto 特定元素的其他用户指南
我们欢迎并鼓励所有开发人员做出贡献。请阅读 CONTRIBUTING.md 以获取我们的贡献指南。
Soto 在 Apache License, Version 2.0 下发布。有关详细信息,请参阅 LICENSE。
成为 赞助者 以支持 Soto 的开发