はじめに
Google App Engineを試して見ようと思い、Google App Engine for Java実践クラウド・プログラミングを購入して、ちょっと触って見ました。一通りできることは解説してあるので、とりあえずGoogle App Engineで動くサイトを作りたい人にはいい本かもしれません。2012年7月8日追記:リンク先をチェックしたら絶版になってしまったようです。。。
必要なもの
- Java SDK: 私はJava SE Development Kit 7u3をインストールしました
- Eclipse: 私はEclipse IndigoのJava EE IDE for Web Developersをインストールしました
- Google App Engine Eclipse Plugin:私は以下の画像のものをとりあえずチェックしてインストールしました
Bigtable
Google App EngineのデータストアサービスであるBigtableのクエリに関しては、以下のリンクが参考になります。Datastore Queries - Google App Engine — Google Developers
以下のコードでローカル環境に仮想のデータストアサービスがセットアップされます。
package com.dukesoftware.gaej.dao;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig;
import com.google.appengine.tools.development.testing.LocalServiceTestHelper;
public class DaoTest {
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());
@Before
public void setUp() {
helper.setUp();
}
@After
public void tearDown() {
helper.tearDown();
}
@Test
public void test() throws Exception {
// something you would like to test :D
}
}
Unit Testing
特にBigtableにアクセスするようなテストをローカル環境で実行したい場合は、以下のページを参考にしてください。Local Unit Testing for Java - Google App Engine — Google Developers
Httpsの設定
web.xmlに以下の要素を追加すると、設定したパス(以下の例では/hogehoge/*)のみhttpsになります。 <security-constraint>
<web-resource-collection>
<url-pattern>/hogehoge/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
StaticファイルのExpiration設定
appengine-web.xmlのstatic-filesで設定します。 オフィシャルドキュメントを参考にしてください。最も単純なアクセスパーミッションの掛け方
管理者のみアクセスできるパスを設定するには、以下のように設定するのが手っ取り早いです。小規模なサイトやテストサイトではこれで十分でしょう。
<security-constraint>
<web-resource-collection>
<url-pattern>/hogegoge/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
もっと複雑なユーザ管理をしたい場合は、Spring Securityなどを試すといいかもしれません。Spring Securityを使ってGoogle AccountのUser管理を行う方法についてはSpring Security in Google App Engineが大変参考になります。
実際に自分で設定して気がついたこと
どうも上記のHttpsの設定とアクセスパーミッションの設定を別々に分けて設定すると、うまく動かない(httpsがかからないパスが出たり、admin以外でもアクセスできるパスが出る)場合があるので、同一パスの場合は、上記の設定を1つのセクションにまとめて設定してください。つまり以下のようになります。 <security-constraint>
<web-resource-collection>
<url-pattern>/hogegoge/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
ローカルの開発環境でのBigtableのデータのストア先
(project root)/war/WEB-INF/appengine-generated\local_db.bin

コメント