Top Banner
~ひけらかし会~ Google App Engine(for Java)について 200984日火曜日
51

ひけらかし会〜Google App Engine(for Java)について

Oct 21, 2014

Download

Technology

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: ひけらかし会〜Google App Engine(for Java)について

~ひけらかし会~Google App Engine(for Java)について

2009年8月4日火曜日

Page 2: ひけらかし会〜Google App Engine(for Java)について

Google App

Engine2009年8月4日火曜日

Page 3: ひけらかし会〜Google App Engine(for Java)について

Google App Engineとは

✓Google が提供するクラウド環境

2009年8月4日火曜日

Page 4: ひけらかし会〜Google App Engine(for Java)について

クラウドって言うけど・・

✓Amazon EC2

- 仮想サーバ環境を丸ごと提供。

- EC2 ≒ VPS(Virtual Parallel Server)

- OSのインストール(OSイメージの選択)から実施

✓Google App Engine

- アプリケーション実行環境

- GAEの仕様に則ったアプリケーションのデプロイのみ可能(Python、Java)

2009年8月4日火曜日

Page 5: ひけらかし会〜Google App Engine(for Java)について

Google App Engineの特徴

✓無償で使える

- 1アカウントあたり10アプリケーション登録可

- 使用可能なリソース(CPU、帯域等)の上限あり。

- お金を払えばリソースを拡張できる。

✓アプリケーション実行環境

- ミドルウェアのインストール不要

- Java/アプリケーションコンテナ/BigTable/memcached/メール/タスクキュー・・・

2009年8月4日火曜日

Page 6: ひけらかし会〜Google App Engine(for Java)について

Google App Engineの特徴

✓デプロイが簡単

- Eclipseのプラグインがある

- ワンタッチで本番にアプリリリース

✓負荷増大に応じてかってにスケールしてくれる(はず)

✓充実した監理画面

- リソース使用状況/ログ/データ閲覧・・・

2009年8月4日火曜日

Page 7: ひけらかし会〜Google App Engine(for Java)について

My Applications

2009年8月4日火曜日

Page 8: ひけらかし会〜Google App Engine(for Java)について

Dashboard

2009年8月4日火曜日

Page 9: ひけらかし会〜Google App Engine(for Java)について

Data Viewer

2009年8月4日火曜日

Page 10: ひけらかし会〜Google App Engine(for Java)について

無償で使用可能なリソース(抜粋)

http://itpro.nikkeibp.co.jp/article/COLUMN/20090518/330180/?ST=cloud&P=2から引用

詳細は資料末

無償提供分 有償提供分の単価

ストレージ容量 1Gバイト $0.005/1Gバイト×1日

ネットワーク帯域(上り) 10Gバイト/1日 $0.10/1Gバイト

ネットワーク帯域(下り) 10Gバイト/1日 $0.12/1Gバイト

CPU時間 6.5時間/1日 $0.10/1時間

メール受信件数 2000件/1日 $0.0001/1件

2009年8月4日火曜日

Page 11: ひけらかし会〜Google App Engine(for Java)について

GAE/Jの制約

2009年8月4日火曜日

Page 12: ひけらかし会〜Google App Engine(for Java)について

GAE/Jは制約の強いServlet✓Java 6/Servlet API 2.5上で動作

✓30秒内にレスポンスを返さないと処理がアボート(割り込み発生)

✓ローカルファイルの読み書き不可- ファイルアップロードもtmp書き込み方式では不可

✓外部接続ソケット使用不可- URL Fetch API経由でのみ外部接続可能

✓スレッド起動不可

✓ClassLoader使用不可- jar参照は可

2009年8月4日火曜日

Page 13: ひけらかし会〜Google App Engine(for Java)について

GAE/Jで使える・・・?

✓Struts- 使用可

✓Spring framwrodk- 無理っぽい

✓Seasar2- 無理っぽい

- Slim3はいける(DI機能は捨てたらしい)

✓ORマッパー系(Hibernateなど)- 無理っぽい

2009年8月4日火曜日

Page 14: ひけらかし会〜Google App Engine(for Java)について

GAE/JAPIの紹介

2009年8月4日火曜日

Page 15: ひけらかし会〜Google App Engine(for Java)について

便利なAPIが用意されている

✓Image API

✓Google Accounts API

✓URL Fetch API

✓Datastore API

✓Memcache API

✓Mail API

✓App Engine Cron Service2009年8月4日火曜日

Page 16: ひけらかし会〜Google App Engine(for Java)について

Image API

✓画像の操作を行うAPI

- サイズ変更

- 回転

- 切り出し

- 画質自動調整

2009年8月4日火曜日

Page 17: ひけらかし会〜Google App Engine(for Java)について

Image APIbyte[] data;

ImagesService service = ImagesServiceFactory.getImagesService(); //byte配列をImageインスタンスに変換Image img = ImagesServiceFactory.makeImage(data); //リサイズ用のインスタンスTransform resize = ImagesServiceFactory.makeResize(300, 50); //リサイズしてPNG形式に変換Image newImg =

service.applyTransform(resize, img, OutputEncoding.PNG);

//変換した画像データをbyte配列でbyte[] newData = newImg.getImageData();

2009年8月4日火曜日

Page 18: ひけらかし会〜Google App Engine(for Java)について

Google Accounts API

✓Google App Engineで用意しているユーザ認証のためのAPI

- 認証処理

- アクセスコントロール(管理者/一般/未認証)

✓Googleアカウントでの認証処理をサポート

- App Engineアプリケーション作成者のアカウントはadmin(追加も可)

- それ以外のユーザは一般ユーザ

2009年8月4日火曜日

Page 19: ひけらかし会〜Google App Engine(for Java)について

UserService service = UserServiceFactory.getUserService(); PrintWriter writer = response.getWriter();String url = request.getRequestURI();

//アクセスユーザの権限情報を取得Principal principal = request.getUserPrincipal();

if (principal != null) { //権限情報がある=ログイン状態 //ログアウト画面を表示 String urlLogout = service.createLogoutURL(url); out.println("<p>" + principal.getName() + "<a href=\"" + urlLogout + "\">logout</a></p>");

} else { //権限情報が無い=未ログイン状態 //ログイン画面を表示 String urlLogin = service.createLoginURL(url); out.println("<p><a href=\"" + urlLogin + "\">login</a></p>");}

Google Accounts API

2009年8月4日火曜日

Page 20: ひけらかし会〜Google App Engine(for Java)について

Google Accounts API

ログイン画面(ローカルテスト環境)

ログイン画面(本番環境)

2009年8月4日火曜日

Page 21: ひけらかし会〜Google App Engine(for Java)について

URL Fetch API

✓他サーバへ接続するためのAPI

- HTTP/HTTPSコネクション作成

- GET/POST/PUT/HEAD/DELETEメソッド

- HTTPリクエスト/レスポンス ハンドリング

✓これ以外の手段では外部接続は不可

✓java標準API(java.net.URLConnection)とgoogle独自API(com.google.appengine.api.urlfetch)が用意されている

2009年8月4日火曜日

Page 22: ひけらかし会〜Google App Engine(for Java)について

PrintWriter writer = response.getWriter();BufferedReader reader = null;try { //接続先URLを開く URL url = new URL("http://hogehoge/"); reader = new BufferedReader(new InputStreamReader(url.openStream()));

//レスポンス内容を1行づつ出力 while (reader.ready()) { String line = reader.readLine(); writer.println(line); }} finally { reader.close();}

URL Fetch API(URLConnection)

2009年8月4日火曜日

Page 23: ひけらかし会〜Google App Engine(for Java)について

URLFetchService fetch = URLFetchServiceFactory.getURLFetchService();

//リクエスト用のインスタンス生成HTTPRequest httpreq =

new HTTPRequest("http://hogehoge/", HTTPMethod.GET);//HTTP接続処理HTTPResponse httpresp = fetch.fetch(httpreq);//ステータスコードの確認if(httpresp.getResponseCode() >= 400){ throw new IOException();}//レスポンスデータの取得byte[] data = httpresp.getContent();return data;

URL Fetch API(com.google.appengine.api.urlfetch)

2009年8月4日火曜日

Page 24: ひけらかし会〜Google App Engine(for Java)について

Datastore API

✓Google App Engine上のBigTableデータの操作を行うためのAPI

- CRUD

- データ取得時のソート

- トランザクション処理

✓JDO、JPA経由でのアクセスが可能

2009年8月4日火曜日

Page 25: ひけらかし会〜Google App Engine(for Java)について

Datastore API(JDO)~Persistence~

//データの一意性の設定。APPLICATION/DATASTORE/UNSPECIFIED@PersistenceCapable(identityType = IdentityType.APPLICATION)public class Movie implements Comparable<Movie>{

@PrimaryKey //主キーとなるカラム @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)//自動採番 private Long id; @Persistent private String title; @Persistent private Integer point;

public Movie(String title, Date update){ this.title = title; this.update = update; }}

2009年8月4日火曜日

Page 26: ひけらかし会〜Google App Engine(for Java)について

Datastore API(JDO)~PersistenceManager~

public class MyPersistenceManagerFactory { //jdoconfigの設定内容を読み込み private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional");

private MyPersistenceManagerFactory() { }

public static PersistenceManagerFactory get() { return pmfInstance; }}

PersistenceManagerの生成はコストが高いのでsingleton監理に。

2009年8月4日火曜日

Page 27: ひけらかし会〜Google App Engine(for Java)について

Datastore API(JDO)~データ取得~

//PersistenceManager取得PersistenceManager pm =

MyPersistenceManagerFactory.get().getPersistenceManager();try{   //GQL生成 String query = "select from " + Movie.class.getName() + " where title == " + title;  //データ取得 List<Movie> result = (List<Movie>)pm.newQuery(query).execute(); if(result == null || result.size() == 0) return null; return result.get(0); }finally{ pm.close();}

2009年8月4日火曜日

Page 28: ひけらかし会〜Google App Engine(for Java)について

Datastore API(JDO)~データ更新~

PersistenceManager pm = MyPersistenceManagerFactory.get().getPersistenceManager();

try{  //データ作成 pm.makePersistent(movie);}finally{ pm.close();

PersistenceManager pm = MyPersistenceManagerFactory.get().getPersistenceManager();try{  //データ削除 pm.deletePersistent(movie);}finally{ pm.close();

2009年8月4日火曜日

Page 29: ひけらかし会〜Google App Engine(for Java)について

Memcache API

✓Memcachedのデータ操作を行うためのAPI

✓Java標準仕様に則ったAPI(JCache)とgoogleの独自API(com.google.appengine.api.memcache)が用意されている。

- データの有効期限設定はgoogle独自APIじゃないとできない

2009年8月4日火曜日

Page 30: ひけらかし会〜Google App Engine(for Java)について

Memcache API(com.google.appengine.api.memcache)MemcacheService memcache = null;try {//memcaehに接続するサービスインスタンス取得memcache = MemcacheServiceFactory.getMemcacheService(); if(memcache != null){

//データ有効期限設定 Expiration expires = Expiration.onDate( new Date(Calendar.getInstance().getTimeInMillis() + 86400000));

//put memcache.put("hogehoge","hogehoge", expires);

//get Object data = memcache.get("hogehoge"); }} catch (Exception e) { ;}

2009年8月4日火曜日

Page 31: ひけらかし会〜Google App Engine(for Java)について

Memcache API(JCache)

Cache cache;try { //memcaehに接続するサービスインスタンス取得 cache =

CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());

} catch (CacheException e) {}

// putcache.put(“hogehoge”, “hogehoge”.getBytes());

// getbyte[] value = (byte[]) cache.get(“hogehoge”);

2009年8月4日火曜日

Page 32: ひけらかし会〜Google App Engine(for Java)について

Mail API

✓メールの送信を行うAPI

✓JavaMail(javax.mail)仕様を踏襲

- 添付ファイル付きのメールも送信可

- 添付可能なファイル拡張子http://code.google.com/intl/ja/appengine/docs/python/mail/overview.html#Attachments

✓メールの受信はできない

✓Transport/SessionにSMTP設定を追加しても無視される。

2009年8月4日火曜日

Page 33: ひけらかし会〜Google App Engine(for Java)について

Mail APIProperties props = new Properties();//Session取得Session session = Session.getDefaultInstance(props, null);

//FROM/TOアドレスの設定InternetAddress address = new InternetAddress("[email protected]", "[email protected]", "ISO-2022-JP");

//メッセージ作成MimeMessage message = new MimeMessage(session);message.setFrom(address); message.addRecipient(Message.RecipientType.TO, address); message.setSubject("hogehogehogehoge", "ISO-2022-JP"); message.setText("hogehogehogehoge");

//送信Transport.send(message);

2009年8月4日火曜日

Page 34: ひけらかし会〜Google App Engine(for Java)について

App Engine Cron Service

✓App EngineのServletを定期実行することができる機能

✓WEB-INF/cron.xml にcron定義を書いてdeployするとGAE上に設定が反映される。

✓「1時間ごと」実行の設定にした場合、毎時何分に実行されるかは指定できない。(0分に実行されるかもしれないし、59分に実行されるかもしれない)

2009年8月4日火曜日

Page 35: ひけらかし会〜Google App Engine(for Java)について

#5分ごとに実行every 5 minutes#12時間ごとに実行every 12 hours#3月の第二、第三 月・水・木 17:00に実行2nd,third mon,wed,thu of march 17:00#毎週月曜日 9:00に実行every monday of month 09:00#9~11月の第一月曜日 17:00に実行1st monday of sep,oct,nov 17:00

App Engine Cron Service

<?xml version="1.0" encoding="UTF-8"?><cronentries> <cron> <url>/hogehoge</url> <description>every 1 hours</description> <schedule>every 1 hours</schedule> </cron></cronentries>

2009年8月4日火曜日

Page 36: ひけらかし会〜Google App Engine(for Java)について

サンプル

2009年8月4日火曜日

Page 37: ひけらかし会〜Google App Engine(for Java)について

favicon proxy

- http://faviconproxy.appspot.com/

- 指定したドメインのfaviconを返すproxy

- URL Fetch API、Memcache API

2009年8月4日火曜日

Page 38: ひけらかし会〜Google App Engine(for Java)について

twitter bot

- http://just-do-twitterbot.appspot.com/

- 定期的にtwitterにつぶやくbot

- URL Fetch API、Memcache API、Datastore API、Cron Service

2009年8月4日火曜日

Page 39: ひけらかし会〜Google App Engine(for Java)について

splog api

- http://splogapi.appspot.com/

- 渡されたURLがsplogかどうかを判定するAPI

- Memcache API、Datastore API

2009年8月4日火曜日

Page 40: ひけらかし会〜Google App Engine(for Java)について

他有名アプリ

2009年8月4日火曜日

Page 41: ひけらかし会〜Google App Engine(for Java)について

hookhub

- http://www.hookhub.com/

- GAE/J + Scale

- webhookからのフック内容をJSで加工するサービス

2009年8月4日火曜日

Page 42: ひけらかし会〜Google App Engine(for Java)について

ご都合.com

- http://www.gotsugo.com/

- GAE/J + BlazeDS + Flex

- 共有カレンダーサービス

2009年8月4日火曜日

Page 43: ひけらかし会〜Google App Engine(for Java)について

まとめ

2009年8月4日火曜日

Page 44: ひけらかし会〜Google App Engine(for Java)について

まとめ

✓GAE/Jは無料で便利で手軽だから四の五の言わずに作りたいものがあったら作った方が良いよ。

2009年8月4日火曜日

Page 45: ひけらかし会〜Google App Engine(for Java)について

ご清聴ありがとうございました。

2009年8月4日火曜日

Page 46: ひけらかし会〜Google App Engine(for Java)について

無償で使用可能なリソース(リクエスト)

リソース無料のデフォルト割り当て無料のデフォルト割り当て 課金が有効な割り当て課金が有効な割り当て

リソース1 日当たりの限度 最大レート 1 日当たりの限度 最大レート

リクエストリクエスト 1,300,000 件

リクエスト 7,400 件/分

リクエスト 43,000,000 件

リクエスト 30,000 件/分

発信帯域幅(課金対象、HTTPS を含む)

10 GB 56 MB/分10 GB 無料、最大 1,046 GB

740 MB/分

受信帯域幅(課金対象、HTTPS を含む)

10 GB 56 MB/分10 GB 無料、最大 1,046 GB

740 MB/分

CPU 時間(課金対象)

46 CPU 時間 15 CPU 分/分46 CPU 時間無料、最大 1,729 CPU 時間

72 CPU 分/分

http://code.google.com/intl/ja/appengine/docs/quotas.htmlから引用

2009年8月4日火曜日

Page 47: ひけらかし会〜Google App Engine(for Java)について

無償で使用可能なリソース(データストア)

リソース無料のデフォルト割り当て無料のデフォルト割り当て 課金が有効な割り当て課金が有効な割り当て

リソース1 日当たりの限度 最大レート 1 日当たりの限度 最大レート

Datastore API 呼び出し

10,000,000 呼び出し 57,000 呼び出し/分 140,000,000 呼び出し

129,000 呼び出し/分

保存データ(課金対象)

1 GB なし 1 GB 無料、最大値なし

なし

API に送信されたデータ

12 GB 68 MB/分 72 GB 153 MB/分

API から受信したデータ

115 GB 659 MB/分 695 GB 1,484 MB/分

データストア CPU 時間

60 CPU 時間 20 CPU 分/分 1,200 CPU 時間 50 CPU 分/分

http://code.google.com/intl/ja/appengine/docs/quotas.htmlから引用

2009年8月4日火曜日

Page 48: ひけらかし会〜Google App Engine(for Java)について

無償で使用可能なリソース(メール)

リソース無料のデフォルト割り当て無料のデフォルト割り当て 課金が有効な割り当て課金が有効な割り当て

リソース1 日当たりの限度 最大レート 1 日当たりの限度 最大レート

Mail API 呼び出し 7,000 呼び出し 32 呼び出し/分 1,700,000 呼び出し 4,900 呼び出し/分

メール受信者(課金対象)

受信者 2,000 人 受信者 8 人/分 無料受信者 2,000 人、受信者最大 7,400,000 人

受信者 5,100 人/分

メールの送信先の管理者

メール 5,000 通 メール 24 通/分 メール 3,000,000 通 メール 9,700 通/分

送信されたメッセージ本文のデータ

60 MB 340 KB/分 29 GB 84 MB/分

送信された添付ファイル

添付ファイル 2,000 通

添付ファイル 8 通/分 添付ファイル 2,900,000 通

添付ファイル 8,100 通/分

送信された添付ファイル データ

100 MB 560 KB/分 100 GB 300 MB/分

http://code.google.com/intl/ja/appengine/docs/quotas.htmlから引用

2009年8月4日火曜日

Page 49: ひけらかし会〜Google App Engine(for Java)について

無償で使用可能なリソース(URLフェッチ)

リソース

無料のデフォルト割り当て無料のデフォルト割り当て 課金が有効な割り当て課金が有効な割り当て

リソース

1 日当たりの限度 最大レート 1 日当たりの限度 最大レート

UrlFetch API 呼び出し

657,000 呼び出し 3,000 呼び出し/分 46,000,000 呼び出し 32,000 呼び出し/分

送信された UrlFetch データ

4 GB 22 MB/分 1,046 GB 740 MB/分

受信した UrlFetch データ

4 GB 22 MB/分 1,046 GB 740 MB/分

http://code.google.com/intl/ja/appengine/docs/quotas.htmlから引用

2009年8月4日火曜日

Page 50: ひけらかし会〜Google App Engine(for Java)について

無償で使用可能なリソース(画像操作)

リソース無料のデフォルト割り当て無料のデフォルト割り当て 課金が有効な割り当て課金が有効な割り当て

リソース1 日当たりの限度 最大レート 1 日当たりの限度 最大レート

Image Manipulation API 呼び出し 864,000 呼び出し 4,800 呼び出し/分 45,000,000 呼び出し 31,000 呼び出し/分

API に送信されたデータ

1 GB 5 MB/分 560 GB 400 MB/分

API から受信したデータ

5 GB 28 MB/分 427 GB 300 MB/分

実行された変換 変換 2,500,000 回 変換 14,000 回/分 変換 47,000,000 回 変換 32,000 回/分

http://code.google.com/intl/ja/appengine/docs/quotas.htmlから引用

2009年8月4日火曜日

Page 51: ひけらかし会〜Google App Engine(for Java)について

無償で使用可能なリソース(Memcache)

リソース

無料のデフォルト割り当て無料のデフォルト割り当て 課金が有効な割り当て課金が有効な割り当て

リソース

1 日当たりの限度 最大レート 1 日当たりの限度 最大レート

Memcache API 呼び出し

8,600,000 48,000 呼び出し/分 96,000,000 108,000 呼び出し/分

API に送信されたデータ

10 GB 56 MB/分 60 GB 128 MB/分

API から受信したデータ

50 GB 284 MB/分 315 GB 640 MB/分

http://code.google.com/intl/ja/appengine/docs/quotas.htmlから引用

2009年8月4日火曜日