Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
A W S S D K f o r S m a l l t a l k
2 0 1 4 M E R RY C H R I S T ...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
S m a l l t a l k で の R D B 以 外 の 候 補
• OmniBase
• Magma
• GemSto...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
O m n i B a s e
• Smalltalkのオブジェクト指向データーベース
• GORISEK Ltd.の製品でDol...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
M a g m a
• Smalltalkのオブジェクト指向データーベース
• Squeakでもともと開発されいた
• Pharo...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
G e m S t o n e
• GemStone/S Smalltalkの歴史あるOODB
• SmalltalkとDB機能が...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
M o n g o D B
• ドキュメント指向データベース
• 非常に有名なNoSQL
• Smalltalk用ドライバーはKe...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
N e o 4 j
• グラフ指向データーベース
• 複雑なデータを扱うのに最適
• SmalltalkからはNeo4reStを使...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
どれも素敵だけど
クラウドサービスを作ろうと考えると・・・
Mikata
https://mikatacloud.com
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
ビ ジ ネ ス で 堅 牢 な N o S Q L を 運 用 す る に は
• 一人だと大変だったりする
• バックアップが難...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
も う 考 える の が 嫌 に な る
川に飛び込むしかない
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
2 0 1 4 年 0 4 月
あきらめず考えました
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
A m a z o n D y n a m o D B
• キー・バリュー型のNoSQLデータベースサービス
• 管理不要で信頼性...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
S m a l l t a l k e r が A W S を 使 う 際 の 問 題
nodeJS
iOS
iOS Java
J...
I love Smalltalk
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
A W S S D K f o r S m a l l t a l k
作 り ま し た
https://github.com/...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
今 回 公 開 す る も の
• Signature V4
• DynamoDBの接続クライアント(低レベル API、エ
ラー処...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
A W S S i g n a t u re Ve r s i o n 4
• 多くのAWSサービスとやり取りするとき必要
• S...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
D y n a m o D B H T T P A P I
• SSL接続
• URLは全て/。URLで処理内容を指定しない
• ...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
A W S S D K f o r S m a l l t a l k D y n a m o D B
AWS SDK for S...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
だ って 他 にや れ る こ と が な い か ら ね
ということで
DynamoDB使うしかない!
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
H o w t o i n s t a l l S t e p 1
Get started in minutes using Me...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
H o w t o i n s t a l l S t e p 2
Get started in minutes using Me...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
R A W A P I
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
S e t u p
awsConfig := AWSDynamoDBConfig default.
awsConfig acces...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
C re a t e Ta b l e
DynamoDB
DynamoDB
Table
C o l u m n Ty p e K ...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
C re a t e Ta b l e
dy := DynamoDBRawClient new.
operationName :=...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
L i s t Ta b l e s
dy := DynamoDBRawClient new.
operationName := ...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
P u t I t e m
DynamoDB
Item
C o l u m n Ty p e K e y S c h e m a
...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
P u t I t e m ( J a v a )
client = new AmazonDynamoDBClient(crede...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
P u t I t e m
dy := DynamoDBRawClient new.
operationName := 'PutI...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
P u t I t e m
DynamoDBModelを継承したModelを作成
DynamoDBModelのDictionary...
P u t I t e m
dy := DynamoDBRawClient new.
operationName := 'PutItem'.
json := JsonObject new at:'TableName' put:'dmodelte...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
G e t I t e m
DynamoDB
Item
C o l u m n Ty p e K e y S c h e m a
...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
G e t I t e m
operationName := 'GetItem'.
json := JsonObject new ...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
Q u e r y
operationName := 'Query'.
json := JsonObject new at:'Ta...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
D e l e t e I t e m
operationName := 'DeleteItem'.
json := JsonOb...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
D e l e t e Ta b l e
operationName := #DeleteTable.
requestBody :...
簡 易 アク セ ス 版
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
P u t I t e m
uuid := UUID new primMakeUUID hex.
d:= DModelTest1 ...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
G e t I t e m
"検索キーを作成"
keyData := DModelTest1 new.
keyData id: u...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
そ の 他
• AWSDynamoDBConfigのendpoint:で接続するRegion
を変更可能
• DynamoDB L...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
エ ン ド ポイ ン ト の 変 更
http://docs.aws.amazon.com/general/latest/gr/r...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
D y n a m o D B L o c a l
http://docs.aws.amazon.com/amazondynamo...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
D y n a m o D B L o c a l 実 行 方 法
$ java -jar DynamoDBLocal.jar –...
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
今 後 対 応 の S m a l l t a l k
• Squeak
• VisualWorks
• GemStone
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
今 後
• DynamoDB改良版
• S3
• EC2
• Elastic Transcoder
2015年公開予定
ただし私の...
Upcoming SlideShare
Loading in …5
×

AWS SDK for Smalltalk

2,933 views

Published on

AWS SDK for Smalltalk https://github.com/newapplesho/aws-sdk-smalltalk

Published in: Engineering
  • Be the first to comment

AWS SDK for Smalltalk

  1. 1. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. A W S S D K f o r S m a l l t a l k 2 0 1 4 M E R RY C H R I S T M A S @newapplesho
  2. 2. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. S m a l l t a l k で の R D B 以 外 の 候 補 • OmniBase • Magma • GemStone • MongoDB • Neo4j
  3. 3. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. O m n i B a s e • Smalltalkのオブジェクト指向データーベース • GORISEK Ltd.の製品でDolphin Smalltalkで開発 • VisualWorks, Squeakにも移植されている • 2014年にGitHubにソースが移行? • MITライセンスになった https://github.com/sebastianconcept/OmniBase
  4. 4. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. M a g m a • Smalltalkのオブジェクト指向データーベース • Squeakでもともと開発されいた • Pharo, VisualWorksで動くか不明? http://wiki.squeak.org/squeak/2665
  5. 5. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. G e m S t o n e • GemStone/S Smalltalkの歴史あるOODB • SmalltalkとDB機能が一体化されたすごいSmalltalk • 商用利用でも一部フリーで使えるOODB • GLASSというWeb特化の製品もある https://github.com/GsDevKit/gsDevKitHome
  6. 6. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. M o n g o D B • ドキュメント指向データベース • 非常に有名なNoSQL • Smalltalk用ドライバーはKent Beckさんが作った http://smalltalkhub.com/#!/~francois/MongoTalk
  7. 7. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. N e o 4 j • グラフ指向データーベース • 複雑なデータを扱うのに最適 • SmalltalkからはNeo4reStを使って利用可能 http://smalltalkhub.com/#!/~MasashiUmezawa/Neo4reSt
  8. 8. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. どれも素敵だけど クラウドサービスを作ろうと考えると・・・ Mikata https://mikatacloud.com
  9. 9. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. ビ ジ ネ ス で 堅 牢 な N o S Q L を 運 用 す る に は • 一人だと大変だったりする • バックアップが難しいOODB • スタートアップには高い商用ライセンス • Replica Setsを構成するには最低各DCゾーンに1台ず つ、Arbiter1台、計3台マシンが必要だったり • メモリやディスクI/Oに左右されたりする
  10. 10. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. も う 考 える の が 嫌 に な る 川に飛び込むしかない
  11. 11. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. 2 0 1 4 年 0 4 月 あきらめず考えました
  12. 12. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. A m a z o n D y n a m o D B • キー・バリュー型のNoSQLデータベースサービス • 管理不要で信頼性が高いデータベース • データセンター間の自動同期レプリケーション • 高速なアクセスが可能 • SSDを利用している • ストレージ容量制限がない • プロビジョンスループットだけを指定するだけ • API(SDK)経由で利用できる
  13. 13. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. S m a l l t a l k e r が A W S を 使 う 際 の 問 題 nodeJS iOS iOS Java Javascript Net nodeJS Android PHP Python Ruby Ruby SDKがない
  14. 14. I love Smalltalk
  15. 15. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. A W S S D K f o r S m a l l t a l k 作 り ま し た https://github.com/newapplesho/aws-sdk-smalltalk
  16. 16. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. 今 回 公 開 す る も の • Signature V4 • DynamoDBの接続クライアント(低レベル API、エ ラー処理は未実装) • DynamoDBの簡易アクセス版(未完成) いずれはすべてのSDKを公開する予定 DynamoDB
  17. 17. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. A W S S i g n a t u re Ve r s i o n 4 • 多くのAWSサービスとやり取りするとき必要 • Signature version 4 signing process http://docs.aws.amazon.com/general/latest/gr/signature-version-4.html
  18. 18. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. D y n a m o D B H T T P A P I • SSL接続 • URLは全て/。URLで処理内容を指定しない • ヘッダーのx-amz-targetで処理内容を指定する • エンドポイントはデーターセンターの場所を指定 • JSON形式で送信、JSON形式で受信 • ヘッダーにx-amz-dateというISO 8601形式(例: 20130315T092054Z) の日付を入れなければならない http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/MakingHTTPRequests.html
  19. 19. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. A W S S D K f o r S m a l l t a l k D y n a m o D B AWS SDK for Smalltalk DynamoDBで対応するデーター型 * スカラーデータ型 - 文字列、数値 * 多値型 - 文字列セット、数値セット。 Amazon DynamoDB for Smalltalk supports the following data types: * Scalar types – Number, String. * Multi-valued types – String Set, Number Set. その他も実装中
  20. 20. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. だ って 他 にや れ る こ と が な い か ら ね ということで DynamoDB使うしかない!
  21. 21. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. H o w t o i n s t a l l S t e p 1 Get started in minutes using Metacello and FileTree. $ git clone https://github.com/newapplesho/aws-sdk-smalltalk
  22. 22. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. H o w t o i n s t a l l S t e p 2 Get started in minutes using Metacello and FileTree. | pathToPackageDirectory | "edit to match the path to your chosen package directory" pathToPackageDirectory := ‘/YOUR-GIT-DIRECTORY-PATH/aws-sdk-smalltalk/pharo- repository/‘. Metacello new baseline: 'AWS'; repository: 'filetree://', pathToPackageDirectory; load.
  23. 23. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
  24. 24. R A W A P I
  25. 25. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. S e t u p awsConfig := AWSDynamoDBConfig default. awsConfig accessKeyId:'YOURACCESSKEY'. awsConfig secretKey:'YOURSECRETKEY'. dy := DynamoDBRawClient new. dy awsConfig accessKeyId:'YOURACCESSKEY'. dy awsConfig secretKey:'YOURSECRETKEY'. or
  26. 26. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. C re a t e Ta b l e DynamoDB DynamoDB Table C o l u m n Ty p e K e y S c h e m a i d S t r i n g H A S H { "AttributeDefinitions": [ { "AttributeName": "id", "AttributeType": "S"} ], "TableName": "dmodeltest1", "KeySchema": [ { "AttributeName": "id", "KeyType": "HASH"}], "ProvisionedThroughput": { "ReadCapacityUnits": 10, "WriteCapacityUnits": 10} } dmodeltest1
  27. 27. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. C re a t e Ta b l e dy := DynamoDBRawClient new. operationName := #CreateTable. requestBody := '{ "AttributeDefinitions": [ { "AttributeName": "id", "AttributeType": "S"} ], "TableName": "dmodeltest1", "KeySchema": [ { "AttributeName": "id", "KeyType": "HASH"}], "ProvisionedThroughput": { "ReadCapacityUnits": 10, "WriteCapacityUnits": 10} }'. resp := dy operationName: operationName entityContents: requestBody.
  28. 28. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. L i s t Ta b l e s dy := DynamoDBRawClient new. operationName := #ListTables. requestBody := '{}'. resp := dy operationName: operationName entityContents: requestBody. Json readFrom: (resp contents) readStream.
  29. 29. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. P u t I t e m DynamoDB Item C o l u m n Ty p e K e y S c h e m a i d S t r i n g H A S H {"TableName":"dmodeltest1", "Item": {"id": {"S":"af2d4b16147f45fea3753cc9c0a3f739"} } } DynamoDB Table UUID new primMakeUUID hex.
  30. 30. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. P u t I t e m ( J a v a ) client = new AmazonDynamoDBClient(credentials); String tableName = "dmodeltest1"; Map<String, AttributeValue> item = new HashMap<String, AttributeValue>(); item.put("id", new AttributeValue().withS("babe2d60c42a45fca9120d1c111d8844")); PutItemRequest putItemRequest = new PutItemRequest() .withTableName(tableName) .withItem(item); PutItemResult result = client.putItem(putItemRequest);
  31. 31. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. P u t I t e m dy := DynamoDBRawClient new. operationName := 'PutItem'. requestBody := '{"TableName":"dmodeltest1","Item":{"id": {"S":"af2d4b16147f45fea3753cc9c0a3f739"}}}' resp := dy operationName: operationName entityContents: requestBody.
  32. 32. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. P u t I t e m DynamoDBModelを継承したModelを作成 DynamoDBModelのDictionaryのインスタンス変数dataに アクセスしてModelを作成するだけ
  33. 33. P u t I t e m dy := DynamoDBRawClient new. operationName := 'PutItem'. json := JsonObject new at:'TableName' put:'dmodeltest1';yourself. d:= DModelTest1 new. d at: ‘id’ put:‘af2d4b16147f45fea3753cc9c0a3f739’. mapper := DynamoDBMapper new. c := (mapper convertItem:d). json at:'Item' put: c . requestBody := json asJsonString . resp := dy operationName: operationName entityContents: requestBody. Json is generated in Smalltalk.
  34. 34. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. G e t I t e m DynamoDB Item C o l u m n Ty p e K e y S c h e m a i d S t r i n g H A S H {"TableName":"dmodeltest1", "Key": {"id": {"S":"af2d4b16147f45fea3753cc9c0a3f739"} } } DynamoDB Table
  35. 35. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. G e t I t e m operationName := 'GetItem'. json := JsonObject new at:'TableName' put:'dmodeltest1';yourself. d:= DModelTest1 new. d at: ‘id’ put:‘af2d4b16147f45fea3753cc9c0a3f739’. mapper := DynamoDBMapper new. c := (mapper convertItem:d). json at:'Key' put: c . requestBody := json asJsonString . resp := dy operationName: operationName entityContents: requestBody. result := Json readFrom: (resp contents) readStream. mapper loadItem: (result at:'Item') .
  36. 36. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. Q u e r y operationName := 'Query'. json := JsonObject new at:'TableName' put:'dmodeltest1';yourself. d:= DModelTest1 new. d data at:#id put:uuid. mapper := DynamoDBMapper new. c := (mapper convertItem:d). c := JsonObject new at: (c keys first) put: ((JsonObject new at:'AttributeValueList' put: (Array with: c anyOne); yourself ) at:'ComparisonOperator' put:'EQ'; yourself); yourself. json at:'KeyConditions' put: c . json at:'Select' put: 'ALL_ATTRIBUTES'. requestBody := json asJsonString . resp := dy operationName: operationName entityContents: requestBody. result := Json readFrom: (resp contents) readStream. (result at:'Count') > 0 ifTrue:[ ^ (result at:'Items') collect:[:v | mapper loadItem:v ]. ] .
  37. 37. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. D e l e t e I t e m operationName := 'DeleteItem'. json := JsonObject new at:'TableName' put:'dmodeltest1';yourself. d:= DModelTest1 new. d id:uuid. mapper := DynamoDBMapper new. c := (mapper convertItem:d). json at:'Key' put: c . requestBody := json asJsonString. resp := dy operationName: operationName entityContents: requestBody. result := Json readFrom: (resp contents) readStream.
  38. 38. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. D e l e t e Ta b l e operationName := #DeleteTable. requestBody := JsonObject new at:'TableName' put:'dmodeltest1'; asJsonString . resp := dy operationName: operationName entityContents: requestBody. Json readFrom: (resp contents) readStream.
  39. 39. 簡 易 アク セ ス 版
  40. 40. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. P u t I t e m uuid := UUID new primMakeUUID hex. d:= DModelTest1 new. d id: uuid. d save. DynamoDBModelを継承したModelを作成
  41. 41. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. G e t I t e m "検索キーを作成" keyData := DModelTest1 new. keyData id: uuid. result := d getItem: keyData.
  42. 42. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. そ の 他 • AWSDynamoDBConfigのendpoint:で接続するRegion を変更可能 • DynamoDB Localにも対応 • 英語が苦手なのでドキュメントの翻訳してくれる方募 集
  43. 43. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. エ ン ド ポイ ン ト の 変 更 http://docs.aws.amazon.com/general/latest/gr/rande.html Default AWSDynamoDBConfig initialize. AWSDynamoDBConfig default endpoint. 'dynamodb.ap-northeast-1.amazonaws.com' change endpoint AWSDynamoDBConfig initialize. AWSDynamoDBConfig default regionName:'us-west-2'. AWSDynamoDBConfig default endpoint. 'dynamodb.us-west-2.amazonaws.com' Regions and Endpoints Asia Pacific (Tokyo)
  44. 44. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. D y n a m o D B L o c a l http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.DynamoDBLocal.html とりあえず試したい人はDynamoDB Local
  45. 45. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. D y n a m o D B L o c a l 実 行 方 法 $ java -jar DynamoDBLocal.jar –Djava.library.path=. AWSDynamoDBConfig initialize. AWSDynamoDBConfig developmentDynamoDBSetting. Set up
  46. 46. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. 今 後 対 応 の S m a l l t a l k • Squeak • VisualWorks • GemStone
  47. 47. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. 今 後 • DynamoDB改良版 • S3 • EC2 • Elastic Transcoder 2015年公開予定 ただし私のポケットマネーと 相談だったりする Amazon EC2 DynamoDB Amazon Elastic Transcoder S3 Bucket

×