AWS SDK for Rubyを使用して、S3上に特定のファイルが存在するかどうかチェックする方法をまとめました。
前提
AWS SDK for Ruby Version 3のaws-sdk-s3を使用します。
実装
# 事前に初期化しておく @s3_client = Aws::S3::Client.new def exists?(key) @s3_client.head_object(key) true rescue StandardError false end
Aws::S3::Client#head_objectというメソッドを使用します。 head_objectとはオブジェクトのメタ情報のみを取得するメソッドです。 get_objectだとオブジェクト自体を取得してしまいますが、head_objectだと取得するのはファイルのメタ情報のみですので軽量でオススメです。
rescue StandardError
しているのは、ファイルが存在しない場合にAws::S3::Errors::NotFound
が発生するためです。権限エラー時は別の例外クラスが発生したりしますので、一律StandardErrorとしてキャッチしています。
迷ったら公式リファレンスをチェックしよう
「Aws::S3::Clientを使用して他のことをやりたいんだけど、サンプルソースが見つからない」という場合は公式リファレンスをチェックすると良いでしょう。
https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html にアクセスすると、使用できるメソッドの一覧が表示されます。単語でページ内検索をして、やりたいことに近いメソッドを検索しましょう。
AWS SDKはS3:Client以外のもさまざまなクラスが存在します。他のクラスの仕様を確認したい場合は、URLのAws/S3/Client.html
のところを該当のクラスに変更すればAPIリファレンスが確認できます。