この記事の目次
AWS SDK for Rubyとは?
AWSには、豊富なサービスを操作するためのAPIが用意されており、そのAPIを簡単に利用するために様々なプログラミング言語ごとにSDKが提供されています。
AWS SDK for Rubyもその内の一つで、Ruby言語を用いてAPIを操作し、AWSのサービスへのアクセスが可能になります。因みにこのSDKは他に、C++、Go、Java、JavaScript、.NET、Node.js、PHP、Pythonのものが提供されています。
AWS SDK for Rubyで何ができるのか?
具体的に、AWS SDK for Rubyを使ってどのようなことができるのか、例を挙げてご紹介します。
例えば、仮想サーバサービスのEC2について言うと、インスタンスの作成・起動・削除などを行ったり、セキュリティグループを管理したりできます。
また、オンラインストレージサービスのS3では、バケットに対する様々な操作が可能です。こちらについては、後ほど手順を詳しく見ていきます。
更には、データベースサービスのRDSにおいてスナップショットを取得したり、システム監視サービスのCloudWatchでアラームを作成したり、といった操作も可能です。
AWS SDK for Rubyのセットアップ
AWS SDK for Rubyを利用するためのセットアップを行っています。手順としては、AWS SDK for Rubyをインストールしたあと、各種設定という流れになります。
AWS SDK for Ruby のインストール
RubyのプロジェクトがBundlerを使用している場合は、Gemfileに「gem ‘aws-sdk’」の一行を追加し、Bundlerを使用していない場合は、次のコマンドを実行してAWS SDK for Rubyをインストールします。
sudo gem install aws-sdk
なお、SDKはAWSのサービスを網羅できるように100以上のGemが用意されており、通常はこれら全てがインストールされます。
利用したいサービスに絞ってインストールしたい場合、AWS SDK for Rubyの最新バージョンであるVersion3からは、SDKがモジュール化されており個別にインストールできるようになっています。
例えば、S3とEC2のみをインストールしたい場合は、Gemfileに以下のように記述します。
gem 'aws-sdk-s3' gem 'aws-sdk-ec2'
因みに、AWSのサービスとGemの名前の対応関係はこちらから確認できます。
AWS SDK for Ruby の設定
AWSのサービスやリソースにアクセスするためのクレデンシャル(認証)情報を設定します。
Linuxであれば「~/.aws/credentials」に、Windowsであれば「%HOMEPATH%\.aws\credentials」にあるAWS認証情報プロファイルに、以下のように設定します。
[default] aws_access_key_id = {アクセスキー} aws_secret_access_key = {シークレットアクセスキー}
AWS SDK for Rubyの実行
AWS SDK for Rubyの実行には、「Client API」と「Resource API」という2種類のインターフェイスが存在します。大まかには同じことができますが、以下のような違いがあります。
細かいことまで実行できるClient API
Client APIは、API単位でメソッドが提供されており、「Aws::XXX::Client(XXXは各サービス名)」という形で記述します。
例えば、S3のバケットを作成するコードは以下のようになります。
s3 = Aws::S3::Client.new(region: 'region', access_key_id: 'xxxxxx', secret_access_key: 'xxxxxx') s3.create_bucket(bucket: bucket)
作成したバケットにオブジェクト(ファイル)をアップロードします。put_objectメソッドを呼び出して、[bucket]にバケット名、[key]にファイル名を指定し、[body]にはFileクラスのインスタンスを指定するか、ファイルのデータを表す文字列を指定します。
s3.put_object(bucket: bucket, key: "file1.txt", body: File.open("file1.txt")
バケット内のオブジェクトを一覧表示します。list_objects_v2メソッドを呼び出すと、バケット内のオブジェクトを表すインスタンスが返されます。続けて、ListObjectsV2Outputクラスのcontentsメソッドを使用して、各オブジェクトのプロパティにアクセスします。
resp = s3.list_objects_v2(bucket: bucket) resp.contents.each do |obj| puts obj.key end
Client APIは、APIとメソッドが1対1で対応しているため、1処理ごとにコードを記述する必要があり、情報の取得も少し複雑ではあるものの、細かく柔軟な処理が記述できるというメリットがあります。
直感的に使えるResource API
Resource APIは、内部的にClientをラップしたもので、「Aws::XXX::Resource」という形で記述します。オブジェクト指向で処理を記述できます。
Client APIのコード例と同じように、S3バケットの作成から見ていきましょう。作成したS3リソースに対して、createメソッドを呼び出します。
s3 = Aws::S3::Resource.new(region: 'region', access_key_id: 'xxxxxx', secret_access_key: 'xxxxxx') my_bucket = s3.bucket('bucket').create
作成したバケットにオブジェクト(ファイル)をアップロードします。putメソッドを呼び出して、バケットにファイルを追加します。
S3.object('file1.txt').put(body: File.open('file1.txt'))
upload_fileメソッドを呼び出して、マルチアップロードも可能です。
S3.object('file1.txt').upload_file('file1.txt')
バケット内のオブジェクトを一覧表示します。Bucket:Objectメソッドを呼び出すと、バケット内のオブジェクトにアクセスできます。
my_bucket.objects.each do |obj| puts obj.key end
Resource APIは、Client APIに比べて細かな独自処理を記述することはできませんが、複数の処理をまとめて記述できたり、直感的に利用できるといったメリットがあります。
AWS SDK for Rubyを使ってみよう
この記事では、AWSのサービスやリソースを操作するためのAPIをRuby言語から利用する手段として、AWS SDK for Rubyについて解説しました。
AWS SDK for Rubyには、細かく柔軟な処理を記述できるClient APIと、直感的に処理を記述できるResource APIという2種類のインターフェイスが備わっており、S3のオブジェクト操作を例に取って、これらの違いについても解説しました。
最初のうちは、2つのインターフェイスの違いを意識するのは難しいかもしれませんが、徐々に両者を使い分けられるようになります。
今回はS3を例に解説しましたが、AWS SDK for RubyはEC2やRDSなどあらゆるサービス、リソースに対する操作が可能ですので、是非色々試してみてください。
この記事の監修者・著者

-
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
最新の投稿
- 2023年12月6日キャリア・転職システムエンジニアへのキャリアチェンジで必要な資格は?
- 2023年12月6日キャリア・転職キャリアチェンジでエージェントを活用するメリット
- 2023年12月6日キャリア・転職プログラマーへのキャリアチェンジに必要な資格は?
- 2023年12月6日キャリア・転職サーバーエンジニアへのキャリアチェンジで必要な資格は?