16
ASW SimpleDBを使ってみる Cocoa勉強会#45 July 9, 2011 Masayuki Nii 1 1179日土曜日

Cocoa勉強会#45-AWS SimpleDBを使ってみる

Embed Size (px)

Citation preview

ASW SimpleDBを使ってみる

Cocoa勉強会#45July 9, 2011Masayuki Nii

111年7月9日土曜日

Agenda

SimpleDBの要点

APIのポイント

iOS対応ネイティブアプリケーションの作成

シェルスクリプトの作成

211年7月9日土曜日

Amazon Web Services

311年7月9日土曜日

AWS SimpleDB

いろんなサービスがある中でちょっとマイナーか

オンラインストレージ

スプレッドシートのようなデータベース• スキーマ定義不要• インデックス付けなどを自動化• SELECT文でのクエリー

完全従量制• 申し込み時にクレジットカードを記録する• 転送量やストレージ量で課金される• さんざん試してみたけど、請求は0円だった

411年7月9日土曜日

SimpleDBの値段の一部

511年7月9日土曜日

SimpleDBの概念

1つのテーブルは「ドメイン」• 複数のドメインを作ることができるが、ドメイン間での連携はクラ

ウド側からはできない

書き込み時に指定した「属性」が作られ「値」を持つ• レコードに相当するのは「アイテム」というもの• ItemNameというキーフィールドが作られる。そこに値を明示的に

一意に入れていく必要がある• 属性と値の設定を書き込むことで、アイテムにその属性の値が記録

される• 検索時には属性は「フィールド(カラム)」としての役割を持つ

611年7月9日土曜日

情報源?書籍があるが…

もちろん、AWSにはマニュアルもあるが…

書籍も翻訳されている• しかしながら、APIの生のたたき

方は書いていない• 概念とフレームワークの使い方が

中心の書籍

711年7月9日土曜日

API

いわゆるREST方式• 作る/更新する、削除する、読み出す~が主な仕組み

独特な認証方法• 秘密鍵でハッシュを作り、それをリクエストに含める• 従って、ハンドシェークはない

APIの詳細は今ひとつ• マニュアルの情報は十分ではない• 既存のフレームワークを解析する方が早いかも

言語ごとにフレークワークを用意• iOS対応のものもあり、これを使うのがもちろん単純

811年7月9日土曜日

リクエスト

URLのアドレスは指定されたものを使う• 処理は、?より後にパラメータとして指定する

認証のためのハッシュを除いたパラメータを作成• キーがアルファベット順になっていないといけない• field1、field10、field11、field2みたいになっていないといけない

base64にしたりなんたらとややこしい

レスポンスはエラーも正しい場合もどちらもXML• 普通にパースすればいいでしょう

911年7月9日土曜日

リクエスト例

https://sdb.ap-northeast-1.amazonaws.com/?AWSAccessKeyId=AKIAJZ6KBTPPRMGJA6VA&Action=Select&SelectExpression=select%20familyname%2Cgivenname%2Cfamilyname_yomi%2Cgivenname_yomi%2Ctelephone%2Ccellphone%2Cemail%2Cbirthday%2Czip%2Cpref%2Ccity%2Caddress%2Cblood%20from%20CloudAddressBook&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2011-07-08T16%3A59%3A51Z&Version=2009-04-15&Signature=L%2FTow6%2FUt%2BiUBAdBboHt6RGYiOlzLUkDksyuqDzJH8A%3D

1011年7月9日土曜日

リクエストの認証データの付加

GET[return]sdb.ap-northeast-1.amazonaws.com[return]AWSAccessKeyId=AKIAJZ6KBTPPRMGJA6VA&Action=Select&SelectExpression=select%20familyname%2Cgivenname%2Cfamilyname_yomi%2Cgivenname_yomi%2Ctelephone%2Ccellphone%2Cemail%2Cbirthday%2Czip%2Cpref%2Ccity%2Caddress%2Cblood%20from%20CloudAddressBook&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2011-07-08T16%3A59%3A51Z&Version=2009-04-15[return]

上記のデータに対して、秘密キーを指定したハッシュを作成して、最後に追加する

1111年7月9日土曜日

アクセスキー、秘密鍵

1211年7月9日土曜日

属性書き込みのリクエストhttps://sdb.ap-northeast-1.amazonaws.com/?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Action=PutAttributes&Attribute.1.Name=familyname&Attribute.1.Value=%E6%9D%BE%E5%B1%85%E4%B9%85&Attribute.10.Name=pref&Attribute.10.Value=%E9%95%B7%E9%87%8E%E7%9C%8C&Attribute.11.Name=city&Attribute.11.Value=%E9%95%B7%E9%87%8E%E5%B8%82&Attribute.12.Name=address&Attribute.12.Value=%E4%BF%A1%E5%B7%9E%E6%96%B0%E7%94%BA%E5%B7%A6%E5%8F%B399-99-13&Attribute.13.Name=blood&Attribute.13.Value=B&Attribute.2.Name=givenname&Attribute.2.Value=%E6%97%A9%E7%B4%80&Attribute.3.Name=familyname_yomi&Attribute.3.Value=%E3%81%BE%E3%81%A4%E3%81%84%E3%81%8F&Attribute.4.Name=givenname_yomi&Attribute.4.Value=%E3%81%95%E3%81%8D&Attribute.5.Name=telephone&Attribute.5.Value=031-9876-5432&Attribute.6.Name=cellphone&Attribute.6.Value=090-0000-0000&Attribute.7.Name=email&Attribute.7.Value=dummy_addr%40example.com&Attribute.8.Name=birthday&Attribute.8.Value=31316&Attribute.9.Name=zip&Attribute.9.Value=381-2424&DomainName=CloudAddressBook&ItemName=1004&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2011-07-08T17%3A25%3A21Z&Version=2009-04-15&Signature=0qrWuMKoIVzWBIWaG%2Bpuhz%2B97kIAf0UXmZHCuq9Vqow%3D

1311年7月9日土曜日

[作成物] Simple DBを使った住所録

初期データを入れるためのシェルスクリプト• 強引だが、どうやらできた模様

iOSネイティブアプリケーション• あえて、AWSが提供するフレームワークを使わないで作成• 通信部分はNSURLConnectionを使う手法• リクエストのパラメータの作り込みが難関• とは言え、意外に簡単

1411年7月9日土曜日

シェルスクリプト

timestamp=`date -u +%Y-%m-%dT%H%%3A%M%%3A%SZ`params="AWSAccessKeyId=${accessKeyId}&Action=CreateDomain&DomainName=${domain}&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=${timestamp}&Version=2009-04-15"sign=`echo -n -e "GET\n${endpoint}\n/\n${params}" | openssl dgst -sha256 -binary -hmac ${secretAccessKey} | openssl base64 | sed -e 's/+/%2B/g' | sed -e 's/=/%3D/g' `curl "https://${endpoint}/?${params}&Signature=${sign}"

ポイントは、opensslコマンドの使い方• ハッシュの求め方• base64の求め方

1511年7月9日土曜日

まとめ

SimpleDBは意外に手軽に使える

フレームワークもあるが、自分で作れる範囲

1611年7月9日土曜日