AWS SDK for Smalltalk

47
Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved. AWS SDK for Smalltalk 2014 MERRY CHRISTMAS @newapplesho

Transcript of AWS SDK for Smalltalk

Page 1: AWS SDK for 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 k2 0 1 4 M E R R Y C H R I S T M A S

@newapplesho

Page 2: AWS SDK for Smalltalk

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

Page 3: AWS SDK for Smalltalk

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

Page 4: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

M a g m a

• Smalltalkのオブジェクト指向データーベース

• Squeakでもともと開発されいた

• Pharo, VisualWorksで動くか不明?

http://wiki.squeak.org/squeak/2665

Page 5: AWS SDK for Smalltalk

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

Page 6: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

M o n g o D B

• ドキュメント指向データベース

• 非常に有名なNoSQL

• Smalltalk用ドライバーはKent Beckさんが作った

http://smalltalkhub.com/#!/~francois/MongoTalk

Page 7: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

N e o 4 j

• グラフ指向データーベース

• 複雑なデータを扱うのに最適

• SmalltalkからはNeo4reStを使って利用可能

http://smalltalkhub.com/#!/~MasashiUmezawa/Neo4reSt

Page 8: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

どれも素敵だけど

クラウドサービスを作ろうと考えると・・・

Mikatahttps://mikatacloud.com

Page 9: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

ビジネスで堅牢なN o S Q Lを運用するには

• 一人だと大変だったりする

• バックアップが難しいOODB

• スタートアップには高い商用ライセンス

• Replica Setsを構成するには最低各DCゾーンに1台ずつ、Arbiter1台、計3台マシンが必要だったり

• メモリやディスクI/Oに左右されたりする

Page 10: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

もう考えるのが嫌になる

川に飛び込むしかない

Page 11: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

2 0 1 4年 0 4月

あきらめず考えました

Page 12: AWS SDK for Smalltalk

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)経由で利用できる

Page 13: AWS SDK for Smalltalk

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 JavaJavascript Net

nodeJS

Android

PHP Python

Ruby

Ruby

SDKがない

Page 14: AWS SDK for Smalltalk

I love Smalltalk

Page 15: AWS SDK for 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

Page 16: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

今回公開するもの

• Signature V4

• DynamoDBの接続クライアント(低レベル API、エラー処理は未実装)

• DynamoDBの簡易アクセス版(未完成)

いずれはすべてのSDKを公開する予定DynamoDB

Page 17: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

A W S S i g n a t u r e 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

Page 18: AWS SDK for Smalltalk

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

Page 19: AWS SDK for 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 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.

その他も実装中

Page 20: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

だって他にやれることがないからね

ということで

DynamoDB使うしかない!

Page 21: AWS SDK for 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 1

Get started in minutes using Metacello and FileTree.

$ git clone https://github.com/newapplesho/aws-sdk-smalltalk

Page 22: AWS SDK for 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.

Page 23: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

Page 24: AWS SDK for Smalltalk

R A W A P I

Page 25: AWS SDK for Smalltalk

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

Page 26: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

C r e a t e Ta b l e

DynamoDBDynamoDB

Table

C o l u m n Ty p e K e y S c h e ma

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

Page 27: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

C r e 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.

Page 28: AWS SDK for Smalltalk

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.

Page 29: AWS SDK for Smalltalk

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.

Page 30: AWS SDK for Smalltalk

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);

Page 31: AWS SDK for Smalltalk

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.

Page 32: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

P u t I t e m

DynamoDBModelを継承したModelを作成

DynamoDBModelのDictionaryのインスタンス変数dataにアクセスしてModelを作成するだけ

Page 33: AWS SDK for Smalltalk

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.

Page 34: AWS SDK for 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

Page 35: AWS SDK for Smalltalk

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') .

Page 36: AWS SDK for Smalltalk

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 ]. ] .

Page 37: AWS SDK for Smalltalk

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.

Page 38: AWS SDK for Smalltalk

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.

Page 39: AWS SDK for Smalltalk

簡易アクセス版

Page 40: AWS SDK for Smalltalk

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を作成

Page 41: AWS SDK for Smalltalk

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.

Page 42: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

その他

• AWSDynamoDBConfigのendpoint:で接続するRegion

を変更可能

• DynamoDB Localにも対応

• 英語が苦手なのでドキュメントの翻訳してくれる方募集

Page 43: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

エンドポイントの変更

http://docs.aws.amazon.com/general/latest/gr/rande.html

DefaultAWSDynamoDBConfig initialize. AWSDynamoDBConfig default endpoint.

'dynamodb.ap-northeast-1.amazonaws.com'

change endpointAWSDynamoDBConfig initialize. AWSDynamoDBConfig default regionName:'us-west-2'. AWSDynamoDBConfig default endpoint.

'dynamodb.us-west-2.amazonaws.com'

Regions and Endpoints

Asia Pacific (Tokyo)

Page 44: AWS SDK for Smalltalk

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

Page 45: AWS SDK for Smalltalk

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

Page 46: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

今後対応のS m a l l t a l k

• Squeak

• VisualWorks

• GemStone

Page 47: AWS SDK for Smalltalk

Copyright © 2014 SORABITO Co., Ltd. All Rights Reserved.

今後

• DynamoDB改良版

• S3

• EC2

• Elastic Transcoder

2015年公開予定

ただし私のポケットマネーと相談だったりする

Amazon EC2

DynamoDB

Amazon Elastic Transcoder

S3 Bucket