okochangの馬鹿でありがとう

ふらふら適当に世間を生きる日々でございます

AWS SDK for RubyでSimpleDBを操作する

こんにちは@oko_changです。
自分ブログにもSimpleDBの爪痕を残しておこうと思ったので、AWS SDK for RubyでのSimpleDBの使い方をまとめておきます。
SimpleDBとは?というのは以下の記事などが参考になると思います。

環境

使い方

以下のような感じDomainを作ったりItemを追加したり削除したりが出来ました。
スクリプトとかではありません

# -*- coding: utf-8 -*-
require 'net/http'
require 'aws-sdk'
sdb_region  = 'sdb.' + Net::HTTP.get('169.254.169.254', '/latest/meta-data/placement/availability-zone').chop + '.amazonaws.com'
domain_name = "milan_no_10"

@sdb = AWS::SimpleDB.new(:simple_db_endpoint => sdb_region).client

## Domainを作成する
@sdb.create_domain(:domain_name => domain_name)

## 作成されているDomainの一覧を見る
@sdb.list_domains

## Domainのメタデータを確認する
@sdb.domain_metadata(:domain_name => domain_name)

## Itemを追加する
@sdb.put_attributes(
  :domain_name => domain_name,
  :item_name => "Keisuke Honda",
  :attributes => [{ :name => "Country", :value => "Japan"}, { :name => "Number", :value => "10"}]
  )

## 追加したItemを見る
@sdb.get_attributes(:domain_name => domain_name, :item_name => "Keisuke Honda")

## Attributeを削除する
@sdb.delete_attributes(:domain_name => domain_name, :item_name => "Keisuke Honda", :attributes => [{ :name => "Number", :value => "10" }])

## 追加したItemを削除する
@sdb.delete_attributes(:domain_name => domain_name, :item_name => "Keisuke Honda")

## 一度に複数のItemを追加する
@sdb.batch_put_attributes(:domain_name => domain_name,
  :items => [
    { :name => "Keisuke Honda", :attributes => [{ :name => "Country", :value => "Japan"}, { :name => "Number", :value => "10"}] },
    { :name => "Zvonimir Boban", :attributes => [{ :name => "Country", :value => "Croatia" }, { :name => "Number", :value => "10" }] },
    { :name => "Rui Costa", :attributes => [{ :name => "Country", :value => "Portugal" }, { :name => "Number", :value => "10" }] }
    ])

## ドメイン内のアイテムを取得する
@sdb.select(:select_expression => "select Country from #{domain_name}")

## 一度に複数のAttributeを削除する
@sdb.batch_delete_attributes(:domain_name => domain_name,
  :items => [
    { :name => "Keisuke Honda", :attributes => [{ :name => "Country", :value => "Japan" }] },
    { :name => "Rui Costa", :attributes => [{ :name => "Number", :value => "10" }] }
  ])

## 一度に複数のItemを削除する
@sdb.batch_delete_attributes(:domain_name => domain_name,
  :items => [
    { :name => "Keisuke Honda"},
    { :name => "Rui Costa"}
  ])

## Domainを削除する
@sdb.delete_domain(:domain_name => domain_name)

Clientクラスを使わずに以下のような感じもOKです。

# -*- coding: utf-8 -*-
require 'net/http'
require 'aws-sdk'
sdb_region  = 'sdb.' + Net::HTTP.get('169.254.169.254', '/latest/meta-data/placement/availability-zone').chop + '.amazonaws.com'
domain_name = "milan_no_10"

@sdb = AWS::SimpleDB.new(:simple_db_endpoint => sdb_region)
## ドメインを作成する
mydomain = @sdb.domains.create(domain_name)

## 作成したドメインを確認する
mydomain.exists?

## 作成したドメインにアイテムを登録する
mydomain.items.create("Keisuke Honda", {
  "Country" => "Japan",
  "Number" => "10"})

## 作成したドメインを削除する
mydomain.delete!

まとめ

僕が個人レベルでちょっとしたものを保存するにはお手軽でとてもイイ。