メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

AWS アカウントまたは IAM ユーザーの認証情報を使用したリクエストの実行 – AWS SDK for Ruby

AWS SDK for Ruby のバージョン 2 を使用して Amazon S3 を呼び出す前に、SDK がバケットやオブジェクトへのアクセスを確認するために使用する AWS アクセス認証情報を設定する必要があります。ローカルシステムの AWS 認証情報プロファイルで設定した認証情報を共有している場合、Ruby の SDK のバージョン 2 では、コード内で宣言することなく、これらの認証情報を使用できます。共有認証情報の設定の詳細については、AWS アカウントまたは IAM ユーザーの認証情報を使用したリクエストの実行 を参照してください。

次の Ruby コードスニペットは、ローカルコンピュータ上の共有 AWS 認証情報ファイルの認証情報を使用して、特定のバケット内のすべてのオブジェクトキー名を取得するリクエストを認証し、以下を実行します。

  1. Aws::S3::Resource クラスのインスタンスを作成します。

  2. bucketAws::S3::Resource メソッドを使用してバケット内のオブジェクトを列挙することで、Amazon S3 に対するリクエストを実行します。クライアントは、コンピュータ上の AWS 認証情報ファイルの認証情報から必要な署名値を生成し、それを Amazon S3 に送信するリクエストに含めます。

  3. オブジェクトキー名の配列をターミナルに出力します。

Copy
# Use the Version 2 AWS Ruby SDK require 'aws-sdk' # Get an Amazon S3 resource s3 = Aws::S3::Resource.new(region: 'us-west-2') # Create an array of the object keynames in the bucket, up to the first 100 bucket = s3.bucket('example_bucket').objects.collect(&:key) # Print the array to the terminal puts bucket

ローカルの AWS 認証情報ファイルがない場合でも、Aws::S3::Resource リソースを作成し、Amazon S3 のバケットとオブジェクトに対してコードを実行できます。Ruby の SDK のバージョン 2 を使用して送信されるリクエストは、匿名リクエストであり、デフォルトでは署名はありません。一般に公開されていないリソースに対して匿名リクエストを送信すると、Amazon S3 はエラーを返します。

次のより堅牢な例のように、Ruby の SDK アプリケーション用の前述のコードスニペットを使用して展開することができます。このコードスニペットは、ユーザー生成の引数を使用してバケットを作成したり、バケットのコンテンツをリストしたり、オブジェクトをバケットにアップロードしたりします。

注記

この例で使用されている認証情報は、このアプリケーションを実行しているコンピュータのローカル AWS 認証情報ファイルから取得したものです。ユーザーがアプリケーションを実行するときに指定するバケット内のオブジェクトを一覧表示できる IAM ユーザーの認証情報です。

Copy
# Use the Version 2 AWS Ruby SDK require 'aws-sdk' # Set the name of the bucket on which the operations are performed # This argument is required bucket_name = nil # The operation to perform on the bucket operation = 'list' # default operation = ARGV[0] if (ARGV.length > 0) if ARGV.length > 1 bucket_name = ARGV[1] else exit 1 end # Get an Amazon S3 resource s3 = Aws::S3::Resource.new(region: 'us-west-2') # Get the bucket by name bucket = s3.bucket(bucket_name) case operation when 'list' if bucket.exists? # Enumerate the bucket contents and object etags puts "Contents of '%s':" % bucket_name puts ' Name => GUID' bucket.objects.limit(50).each do |obj| puts " #{obj.key} => #{obj.etag}" end else puts ""The bucket '%s' does not exist!" % bucket_name end else puts "Unknown operation: '%s'! Only list is supported." % operation end