Re:inventでプレビューとなったRust、Kotlin、Swift向けの新たなAWS SDKでは、AWS APIの固有のラッパーが提供される。これにより、開発者がより使い慣れた一貫した方法でAWSサービスを操作できるようになる。
Amazonによると、各SDKは、各言語に共通のベストプラクティスを取り入れ、高度な言語構文を活用している。たとえば、Rust SDKでは、非同期/待機、ノンブロッキングIO、ビルダーなどの最近の機能が使用される。同じように、Swift SDKではSwift 5.5の同時実行機能が使用され、マルチプラットフォームがサポートされる。さらに、Rust SDKは高速シリアライザーとデシリアライザーによって、不要なコピーと割り当てを最小限に抑え、CPUとメモリの使用率を削減する。
各SDKは、個別のパッケージ群を通してほとんどのAWS APIをサポートする。サービスごとに1セットであり、その正確な数は、SDKごとにわずかに異なる。Amazon S3、Amazon EC2、DynamoDBなど数百ある、すべての主要なAPIが含まれる。この粒度のため、開発者は実際に必要なライブラリのみを使用でき、ビルドのサイズと時間を削減できる。
これは、Rustとその新たなAWS SDKを使って、すべてのDynamoDBテーブルを一覧表示する方法である。
async fn list_tables(client: &Client) -> Result<(), Error> {
let resp = client.list_tables().send().await?;
println!("Tables:");
let names = resp.table_names().unwrap_or_default();
let len = names.len();
for name in names {
println!(" {}", name);
}
println!("Found {} tables", len);
Ok(())
}
次のスニペットのように、同じタスクをSwiftで実行できる。
func listAllTables(ddb: DynamoDbClient) {
ddb.listTables(input: ListTablesInput()) { result in
switch(result) {
case .success(let response):
guard let namesOfTables = response.tableNames else {
return
}
for currName in namesOfTables {
print("Table name is \(currName)")
}
case .failure(let err):
print(err)
}
}
}
AWS公式のSDK for Rustの前は、Rust開発者は、RusotoのおかげでネイティブSDKを使用してAWSサービスにアクセスできた。Rusotoは最近メンテナンスモードに入っている。
Rust、Kotlin、Swiftは、JavaScript、Python、PHP、.NET (C#)、Ruby、Java、Go、Node.js、C++などサポートされている長い言語リストへの直近の追加にすぎない。すべての新しいSDKはまだ開発者向けプレビューであるため、開発者のフィードバックに基づいて、一般向け提供に至る前にAPIが変更される可能性がある。