SlideShare a Scribd company logo
1 of 47
Download to read offline
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
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
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
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
M a g m a
• Smalltalkのオブジェクト指向データーベース
• Squeakでもともと開発されいた
• Pharo, VisualWorksで動くか不明?
http://wiki.squeak.org/squeak/2665
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
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
M o n g o D B
• ドキュメント指向データベース
• 非常に有名なNoSQL
• Smalltalk用ドライバーはKent Beckさんが作った
http://smalltalkhub.com/#!/~francois/MongoTalk
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
N e o 4 j
• グラフ指向データーベース
• 複雑なデータを扱うのに最適
• SmalltalkからはNeo4reStを使って利用可能
http://smalltalkhub.com/#!/~MasashiUmezawa/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 を 運 用 す る に は
• 一人だと大変だったりする
• バックアップが難しいOODB
• スタートアップには高い商用ライセンス
• Replica Setsを構成するには最低各DCゾーンに1台ず
つ、Arbiter1台、計3台マシンが必要だったり
• メモリやディスクI/Oに左右されたりする
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データベースサービス
• 管理不要で信頼性が高いデータベース
• データセンター間の自動同期レプリケーション
• 高速なアクセスが可能
• SSDを利用している
• ストレージ容量制限がない
• プロビジョンスループットだけを指定するだけ
• API(SDK)経由で利用できる
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がない
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/newapplesho/aws-sdk-smalltalk
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
今 回 公 開 す る も の
• Signature V4
• DynamoDBの接続クライアント(低レベル API、エ
ラー処理は未実装)
• DynamoDBの簡易アクセス版(未完成)
いずれはすべてのSDKを公開する予定
DynamoDB
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
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
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.
その他も実装中
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 Metacello and FileTree.
$ git clone https://github.com/newapplesho/aws-sdk-smalltalk
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.
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 accessKeyId:'YOURACCESSKEY'.
awsConfig secretKey:'YOURSECRETKEY'.
dy := DynamoDBRawClient new.
dy awsConfig accessKeyId:'YOURACCESSKEY'.
dy awsConfig secretKey:'YOURSECRETKEY'.
or
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
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.
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.
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.
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);
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.
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
P u t I t e m
DynamoDBModelを継承したModelを作成
DynamoDBModelのDictionaryのインスタンス変数dataに
アクセスしてModelを作成するだけ
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.
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
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') .
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 ].
] .
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.
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.
簡 易 アク セ ス 版
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を作成
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.
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
そ の 他
• AWSDynamoDBConfigのendpoint:で接続するRegion
を変更可能
• DynamoDB Localにも対応
• 英語が苦手なのでドキュメントの翻訳してくれる方募
集
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)
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
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
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年公開予定
ただし私のポケットマネーと
相談だったりする
Amazon
EC2
DynamoDB
Amazon Elastic
Transcoder
S3 Bucket

More Related Content

What's hot

ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたNarami Kiyokura
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium MobileNaoya Ito
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようMasashi Shinbara
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringYahoo!デベロッパーネットワーク
 
Serf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraSerf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraNaotoshi Seo
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りKouhei Sutou
 
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)nabe-abk
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでKouhei Sutou
 
Spring Framework / Boot / Data 徹底活用 〜Spring Data Redis 編〜
Spring Framework / Boot / Data 徹底活用  〜Spring Data Redis 編〜Spring Framework / Boot / Data 徹底活用  〜Spring Data Redis 編〜
Spring Framework / Boot / Data 徹底活用 〜Spring Data Redis 編〜Naohiro Yoshida
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
InfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbInfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbNaotoshi Seo
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方kwatch
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンMasashi Shinbara
 
Heroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションHeroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションMasashi Shinbara
 

What's hot (20)

ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみよう
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
 
Zabbix API
Zabbix APIZabbix API
Zabbix API
 
Serf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraSerf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfra
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入り
 
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject Introspectionで
 
Spring Framework / Boot / Data 徹底活用 〜Spring Data Redis 編〜
Spring Framework / Boot / Data 徹底活用  〜Spring Data Redis 編〜Spring Framework / Boot / Data 徹底活用  〜Spring Data Redis 編〜
Spring Framework / Boot / Data 徹底活用 〜Spring Data Redis 編〜
 
2018/1/30 Django勉強会
2018/1/30 Django勉強会2018/1/30 Django勉強会
2018/1/30 Django勉強会
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
いまどきのPHP
いまどきのPHPいまどきのPHP
いまどきのPHP
 
オタク×Node.js勉強会
オタク×Node.js勉強会オタク×Node.js勉強会
オタク×Node.js勉強会
 
InfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbInfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdb
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオン
 
Heroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションHeroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーション
 

Similar to AWS SDK for Smalltalk

マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpMasahito Zembutsu
 
Cloud Foundry: Open Platform as a Service
Cloud Foundry: Open Platform as a ServiceCloud Foundry: Open Platform as a Service
Cloud Foundry: Open Platform as a ServiceShunsuke Kurumatani
 
9/16 Tokyo Apache Drill Meetup - drill vs sparksql
9/16 Tokyo Apache Drill Meetup - drill vs sparksql9/16 Tokyo Apache Drill Meetup - drill vs sparksql
9/16 Tokyo Apache Drill Meetup - drill vs sparksqlMitsutoshi Kiuchi
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
Ceph Loves OpenStack: Why and How
Ceph Loves OpenStack: Why and HowCeph Loves OpenStack: Why and How
Ceph Loves OpenStack: Why and HowEmma Haruka Iwao
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)崇之 清水
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)Takuya Kawabe
 
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成Tomoki Oyamatsu
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門じゅん なかざ
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎Insight Technology, Inc.
 
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方Fumihiko Shiroyama
 
Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013Yasuhiro Horiuchi
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoTreasure Data, Inc.
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Yohei Sasaki
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来Kazuto Kusama
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractTakeshi Ogawa
 

Similar to AWS SDK for Smalltalk (20)

マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
 
Cloud Foundry: Open Platform as a Service
Cloud Foundry: Open Platform as a ServiceCloud Foundry: Open Platform as a Service
Cloud Foundry: Open Platform as a Service
 
9/16 Tokyo Apache Drill Meetup - drill vs sparksql
9/16 Tokyo Apache Drill Meetup - drill vs sparksql9/16 Tokyo Apache Drill Meetup - drill vs sparksql
9/16 Tokyo Apache Drill Meetup - drill vs sparksql
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
Ceph Loves OpenStack: Why and How
Ceph Loves OpenStack: Why and HowCeph Loves OpenStack: Why and How
Ceph Loves OpenStack: Why and How
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
 
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
 
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimuraAPIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
 
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
 
activerecord-turntable
activerecord-turntableactiverecord-turntable
activerecord-turntable
 
Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
 

More from Sho Yoshida

OpenRestyを用いてイケイケなサービスを作る方法
OpenRestyを用いてイケイケなサービスを作る方法OpenRestyを用いてイケイケなサービスを作る方法
OpenRestyを用いてイケイケなサービスを作る方法Sho Yoshida
 
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)Sho Yoshida
 
今時なウェブ開発をSmalltalkでやってみる?
今時なウェブ開発をSmalltalkでやってみる?今時なウェブ開発をSmalltalkでやってみる?
今時なウェブ開発をSmalltalkでやってみる?Sho Yoshida
 
Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーション
Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーションContinuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーション
Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーションSho Yoshida
 
Elasticsearch for Pharo Smalltalk
Elasticsearch for Pharo Smalltalk Elasticsearch for Pharo Smalltalk
Elasticsearch for Pharo Smalltalk Sho Yoshida
 
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法Sho Yoshida
 
RUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践SmalltalkRUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践SmalltalkSho Yoshida
 
Smaltalk驚異の開発(私が使い続ける2012年の話)
Smaltalk驚異の開発(私が使い続ける2012年の話)Smaltalk驚異の開発(私が使い続ける2012年の話)
Smaltalk驚異の開発(私が使い続ける2012年の話)Sho Yoshida
 
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦Sho Yoshida
 
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたらもしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたらSho Yoshida
 
今日から使おうSmalltalk
今日から使おうSmalltalk今日から使おうSmalltalk
今日から使おうSmalltalkSho Yoshida
 
Iliad or Seaside
Iliad or SeasideIliad or Seaside
Iliad or SeasideSho Yoshida
 
Pharo(Smalltalk)でAPI作りをはじめよう
Pharo(Smalltalk)でAPI作りをはじめようPharo(Smalltalk)でAPI作りをはじめよう
Pharo(Smalltalk)でAPI作りをはじめようSho Yoshida
 

More from Sho Yoshida (14)

OpenRestyを用いてイケイケなサービスを作る方法
OpenRestyを用いてイケイケなサービスを作る方法OpenRestyを用いてイケイケなサービスを作る方法
OpenRestyを用いてイケイケなサービスを作る方法
 
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
 
今時なウェブ開発をSmalltalkでやってみる?
今時なウェブ開発をSmalltalkでやってみる?今時なウェブ開発をSmalltalkでやってみる?
今時なウェブ開発をSmalltalkでやってみる?
 
Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーション
Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーションContinuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーション
Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーション
 
Elasticsearch for Pharo Smalltalk
Elasticsearch for Pharo Smalltalk Elasticsearch for Pharo Smalltalk
Elasticsearch for Pharo Smalltalk
 
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
 
RUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践SmalltalkRUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践Smalltalk
 
Smaltalk驚異の開発(私が使い続ける2012年の話)
Smaltalk驚異の開発(私が使い続ける2012年の話)Smaltalk驚異の開発(私が使い続ける2012年の話)
Smaltalk驚異の開発(私が使い続ける2012年の話)
 
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
 
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたらもしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
 
エコSmalltalk
エコSmalltalkエコSmalltalk
エコSmalltalk
 
今日から使おうSmalltalk
今日から使おうSmalltalk今日から使おうSmalltalk
今日から使おうSmalltalk
 
Iliad or Seaside
Iliad or SeasideIliad or Seaside
Iliad or Seaside
 
Pharo(Smalltalk)でAPI作りをはじめよう
Pharo(Smalltalk)でAPI作りをはじめようPharo(Smalltalk)でAPI作りをはじめよう
Pharo(Smalltalk)でAPI作りをはじめよう
 

AWS SDK for Smalltalk

  • 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. 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. 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. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. M a g m a • Smalltalkのオブジェクト指向データーベース • Squeakでもともと開発されいた • Pharo, VisualWorksで動くか不明? http://wiki.squeak.org/squeak/2665
  • 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. 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. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. N e o 4 j • グラフ指向データーベース • 複雑なデータを扱うのに最適 • SmalltalkからはNeo4reStを使って利用可能 http://smalltalkhub.com/#!/~MasashiUmezawa/Neo4reSt
  • 8. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. どれも素敵だけど クラウドサービスを作ろうと考えると・・・ Mikata https://mikatacloud.com
  • 9. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. ビ ジ ネ ス で 堅 牢 な N o S Q L を 運 用 す る に は • 一人だと大変だったりする • バックアップが難しいOODB • スタートアップには高い商用ライセンス • Replica Setsを構成するには最低各DCゾーンに1台ず つ、Arbiter1台、計3台マシンが必要だったり • メモリやディスクI/Oに左右されたりする
  • 10. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. も う 考 える の が 嫌 に な る 川に飛び込むしかない
  • 11. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. 2 0 1 4 年 0 4 月 あきらめず考えました
  • 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. 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がない
  • 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. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. 今 回 公 開 す る も の • Signature V4 • DynamoDBの接続クライアント(低レベル API、エ ラー処理は未実装) • DynamoDBの簡易アクセス版(未完成) いずれはすべてのSDKを公開する予定 DynamoDB
  • 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. 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. 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. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. だ って 他 にや れ る こ と が な い か ら ね ということで DynamoDB使うしかない!
  • 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. 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. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.
  • 24. R A W A P I
  • 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. 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. 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. 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. 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. 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. 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. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. P u t I t e m DynamoDBModelを継承したModelを作成 DynamoDBModelのDictionaryのインスタンス変数dataに アクセスしてModelを作成するだけ
  • 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. 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. 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. 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. 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. 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. 簡 易 アク セ ス 版
  • 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. 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. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. そ の 他 • AWSDynamoDBConfigのendpoint:で接続するRegion を変更可能 • DynamoDB Localにも対応 • 英語が苦手なのでドキュメントの翻訳してくれる方募 集
  • 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. 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. 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. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. 今 後 対 応 の S m a l l t a l k • Squeak • VisualWorks • GemStone
  • 47. Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. 今 後 • DynamoDB改良版 • S3 • EC2 • Elastic Transcoder 2015年公開予定 ただし私のポケットマネーと 相談だったりする Amazon EC2 DynamoDB Amazon Elastic Transcoder S3 Bucket