2
1

[AWS SDK for Rust] S3のget_object利用時のエラーハンドリング

Posted at

概要

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難し)

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1