概要
APIサーバー上で、AWS SDK for Rustを使ってS3からオブジェクトの取得をする際に、細かいハンドリングをしたかったのですが、それらしい情報が見つからなかったので参考までに残しておきます。
環境
検証に用いた環境です。最低限の記載ですので、公式サイト等を参考に必要なパッケージは入れてください。(サービスごとのパッケージ)
aws-config = { version = "1.1.7", features = ["behavior-version-latest"] }
aws-sdk-s3 = "1.42.0"
エラーハンドリング
let object = match client
.get_object()
.bucket(bucket_name)
.key(key)
.send()
.await
{
Ok(v) => v,
// リクエストの構築に失敗したエラー
Err(SdkError::ConstructionFailure(e)) => todo!(),
// リクエストがタイムアウトしたエラー
Err(SdkError::TimeoutError(e)) => todo!(),
// ディスパッチ中にリクエストが失敗したエラー
Err(SdkError::DispatchFailure(e)) => todo!(),
// レスポンスを受け取ったが、データの破損等で解析不能なエラー
Err(SdkError::ResponseError(e)) => todo!(),
// AWS側からエラーレスポンスを受け取った
Err(SdkError::ServiceError(e)) => match e.err() {
// 取得対象のオブジェクトがアーカイブされているため取得できなかったエラー
GetObjectError::InvalidObjectState(_) => todo!()
// 指定したキーが存在しないため取得できなかったエラー
GetObjectError::NoSuchKey(_) => todo!(),
// その他
_ => return Err(e),
},
// その他
Err(e) => return Err(e), // 一応
}
まとめ
短いですが、以上になります。困っている人に届きますように
(Rust難し)