2013年1月6日日曜日

もくもくAWS:AWS SDK for Androidを触ってみた(SimpleDB編)

せっかくの冬季休みですが、紅白でモモクロ見たり(タカシーっ)、正月空けてドリームマッチ見たり(スギちゃんひどかった)、huluでプリズンブレイク延々みたり(シーズン1でやめとけばよかったのでは)、MHFで剛チケ・HC素材救済クエストしたり(桃と黒紫ってクエストは運営にモモクロ好きでもいるんですかね)とまぁ無駄に過ごしておりました。
で、わざわざ書くほどの内容でもないですが、冬休み中にAWS触るぞと言った手前、何かしとかないとなって内容が以下になります。

■AWS SDKとは?

とりあえず以下のスライドがあるのでそれで確認する。

AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!
http://www.slideshare.net/kentamagawa/aws-meets-android-aws-sdk-for-android

AWS SDK for Android and iOS
http://www.slideshare.net/AmazonWebServicesJapan/aws-sdk-for-android-and-ios

※最終的には2番目のスライドにあるTVMがらみをやりたい。

■どっからはじめるか

とりあえず目に付いた

スマホ×クラウドなアプリの新しい開発スタイル
http://www.atmarkit.co.jp/fsmart/articles/smaphocloud02/01.html

のとおり進めていきます。
ただ、この記事(2012年2月)から1年近くたってるせいかちょいちょい詰まったところもあるので、そのあたりを書いていきます。

■AWSアカウント作成

記事の中に、AWSの作成手順があるので記載どおり作成します。
といっても、公式に手順があるのでそっちを見たほうがいいかもしれません。

アカウント作成の流れ
http://aws.amazon.com/jp/register-flow/

氏名、住所記載必要、電話でのやり取りが必要(機械音声)、クレカ登録が必要なのでそのあたり注意。

サンプルの動作確認用に、アクセスキーIDと、シークレットアクセスキーを入手。

■AWS SDK for Androidのダウンロード、内容確認

AWS SDK for Androidが公開されているので入手します。
ファイルがaws-android-sdk-1.4.4.zipなので現在のバージョンは1.4.4なのですかね。

AWS SDK for Android
http://aws.amazon.com/jp/sdkforandroid/

解凍したフォルダ内の「aws-android-sdk-1.4.4\samples」を開くと以下のようになってます。

image

見たとおり、記事にあったAWSAndroidDemoなんつうプロジェクトがないですね。
各プロジェクトにReadmeファイルが入っていて、簡単な説明があったので抜き出してみます。

・DynamoDB_UserPreference
This sample demonstrates how Android can interact with Amazon DynamoDB to store user preferences. For a detailed description of the code, open and read the UserPreference.html file.
→ユーザー設定情報をDynamoDBに登録するサンプル

・DynamoDBMapper_UserPreference
This sample demonstrates how Android can interact with Amazon DynamoDB to store user preferences. For a detailed description of the code, open and read the UserPreference.html file.
→ユーザー設定情報をDynamoDBに登録するサンプル(マッピング版?)

・S3_SimpleDB_SNS_SQS_Demo
This sample demonstrates how Android can interact with Amazon AWS.
→AWSを利用したSNSデモサンプル(旧AWSAndroidDemo?)

・S3_SimpleDB_SNS_SQS_DemoTVM
This sample demonstrates interaction with the AnonymousTVM.  It is assumed that you were able to
previously run the AWSAndroidDemo sample.  Also, you need to be running an AnonymousTVM which this
sample App will connect to. 
→AWSを利用したSNSデモサンプル、AnonymousTVM版

・S3_SimpleDB_SNS_SQS_DemoTVMIdentity
This sample demonstrates interaction with the IdentityTVM.  The IdentityTVM requires the user to register with the
App by first connecting to an external website and provide a username and password.  The username and username will
then be required to log into the sample App.  In this sample the registration website is a specific page on the
IdentityTVM. 
→AWSを利用したSNSデモサンプル、IdentityTVM版(本命)

・S3_Uploader
This sample demonstrates how Android can interact with Amazon S3.  For a detailed description of the code, open and read the S3Uploader.html file.
→Amazon S3へのアップローダデモサンプル

・SES_FeedbackForm
This sample demonstrates how Android can interact with Amazon SES to record user feedback.  For a detailed description of the code, open and read the FeedbackForm.html file.
→ユーザフィードバックデモサンプル

・SimpleDB_HighScores
This sample demonstrates how Android can interact with Amazon SimpleDB to store a high score list.  For a detailed description of the code, open and read the HighScores.html file.
→SimpleDBを利用したハイスコアリスト管理デモサンプル

・SNS_SQS_MessageBoard
This sample demonstrates how Android can interact with Amazon SNS and Amazon SQS to create a message board.  For a detailed description of the code, open and read the MessageBoard.html file.
→Amazon SNSとAmazon SQSを利用したメッセージボードデモサンプル

どうもS3_SimpleDB_SNS_SQS_DemoTVMが以前のAWSAndroidDemoぽいのですが、SimpleDBが簡単そうかな。

■SimpleDBってどんなの

公式のドキュメント読んどけって話ですが。

Amazon SimpleDB(ベータ版)
http://aws.amazon.com/jp/simpledb/

SimpleDBで検索するとそれっぽい記事があったのでざっと読む。

SimpleDBを使ってみました
http://blog.serverworks.co.jp/tech/2012/03/01/simpledb/

AWS SDK for JavaでAmazon SimpleDBを使う
http://blog.flect.co.jp/cto/2010/12/aws-sdk-for-jav.html

Amazon SimpleDBについて調べたことをまとめました
http://blog.flect.co.jp/cto/2010/11/amazon-simpledb.html

Amazon Web Services 1ヶ月導入記 part 1 データベース編
http://tech.furyu.jp/blog/?p=188

Amazon Web Services 1ヶ月導入記 part 2 アーキテクチャ設計編
http://tech.furyu.jp/blog/?p=190

Amazon Web Services 1ヶ月導入記 part 3 SimpleDBの特徴と制限
http://tech.furyu.jp/blog/?p=516

Amazon Web Services 1ヶ月導入記 part 4 SimpleDBの制限を回避する
http://tech.furyu.jp/blog/?p=661

とか。

■サンプルプロジェクトをビルド

てことで、一番簡単そうなSimpleDB_HighScoresプロジェクトを動かしてみます。

EclipseのFile>New>ProjectでAndroid>Android Project From Existing Code
とかから取り込みます。

※関係ないかもですが、AWS関係のプロジェクトを投入したらeclipseのメモリがたらないよエラーだらけになったので、eclipse.iniのメモリ設定を変更しました。

■ソース修正箇所

ReadMeに書いてありますが、Constants.javaに

  1: public class Constants {
  2:     //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  3:     // This sample App is for demonstration purposes only.
  4:     // It is not secure to embed your credentials into source code.
  5:     // Please read the following article for getting credentials
  6:     // to devices securely.
  7:     // http://aws.amazon.com/articles/Mobile/4611615499399490
  8:     //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  9: 	public static final String ACCESS_KEY_ID = "CHANGE ME";
 10: 	public static final String SECRET_KEY = "CHANGE ME";
 11: 

とあるので、「CHANGE ME」とある箇所を取得しておいたアクセスキーに変更します。


■ビルド、起動、操作


これもReadMeにあるとおり、CleanなりBuild Allしてから実行します。


device-2013-01-06-011926


起動できました。
上のメニューからざっくりと説明すると、


Populate High Score List
→Domain作成して、サンプルItemを10件登録


Add Single Score
→任意のItemを登録


View Scores
→登録済みデータの表示(Sort指定有無)


Clear High Score List
→Domain削除


Domain作ってないとエラーになるので、一番上から操作するといいです。


device-2013-01-06-021149


上の画像は登録した結果を表示してみたところですが、簡単にクラウド経由で登録した情報が表示できたりと(アカウント管理をはしょってるとはいえ)こんなに簡単にできるんだーって感じですね。


■リソースどうなってんの?


記事の最後に、作成したリソースは削除しないと課金されるぞなってあったので、あわあわしてAWS Management Consoleを確認しましたが、どうもSimpleDBは対応してないらしい。ベータだから?



@ITスマホ×クラウド連載 第2回 AWS×Android:補足記事(1)S3、SimpleDBを試す
http://dev.classmethod.jp/cloud/atmarkit_smartphone_cloud_02_supplement/


そしたら補足記事があって、アクセス用のClientが提供されてるみたい。(非公式


無料だしChromeアプリだしってことで、SdbNavigatorを使ってみる。
アクセスキーとシークレットキー入力するのは仕方ないよなーと思いつつ、入力。
リージョンはデフォルトがUS-East見たいです。


image


それぽいのが登録されてましたね。
左のメニューからドメイン削除すれば無かったことにしてくれるのかなー。(なぞ


■それはそれとして重すぎる


目測で1アクセスに4秒ぐらいかかってるけどなんなの?っておもったので、簡単に計測してみました。


<リージョン:デフォルト(US-East)の場合:3G接続>
ドメイン作成=8697ミリ秒
アイテム10件作成=16337ミリ秒


何回かやってみたけど、ドメイン作成が6秒~8秒、アイテム10件作成(1件ずつループ)で10秒~20秒ぐらいでした。


これは遅い。ま、デフォルトがUSじゃしょうがないよなってことで、東京指定にしてみる。



Regions and Endpoints
http://docs.amazonwebservices.com/general/latest/gr/rande.html


上記に、各種Endpointが乗ってる。


image


SimpleDB、東京リージョンのEndpointがわかった。(sdb.ap-northeast-1.amazonaws.com)
ので、HighScoreList.javaを以下のとおり修正。

  1: 
  2: 	public HighScoreList(int sortMethod) {
  3: 		// Initial the SimpleDB Client.
  4: 		AWSCredentials credentials = new BasicAWSCredentials(Constants.ACCESS_KEY_ID, Constants.SECRET_KEY);
  5: 		this.sdbClient = new AmazonSimpleDBClient(credentials);
  6: 		this.sdbClient.setEndpoint("https://sdb.ap-northeast-1.amazonaws.com");
  7: 		this.nextToken = null;
  8: 		this.sortMethod = sortMethod;
  9: 		this.count = -1;
 10: 	}
 11: 

<リージョン:Asia Pacific (Tokyo) Region の場合:3G接続>


ドメイン作成=2037ミリ秒
アイテム10件作成=7308ミリ秒


だいぶ早くなりました。(遅い気もするけど。)
何回かやった結果は、ドメイン作成が1秒後半~2秒前半、アイテム10件作成(1件ずつループ)で5秒~10秒ぐらいでした。
あ、3G接続だからかな。ってことで、お次はWi-Fi


<リージョン:Asia Pacific (Tokyo) Region の場合:Wi-Fi接続>


ドメイン作成=1461ミリ秒
アイテム10件作成=3068ミリ秒


このあたりが限界っぽいですね。


■とりあえずまとめ


本来の目的(IdentityTVMのあたり?)には程遠いですが、触りとして面白かったです。
しかし、簡易データの登録でWi-Fiでも1件0.3秒ぐらいかかってるのでとにかくバックグラウンド処理であれこれするんでしょうねーって感触でした。

0 件のコメント:

コメントを投稿