G*なクラウド ~雲のかなたに~
Post on 14-Jan-2015
2564 Views
Preview:
DESCRIPTION
Transcript
G*なクラウド─ 雲のかなたに ─
アスタ
2009/10/08 @JJUG CCC
def speaker = new Cast(name:”T.Yamamoto”,version:”G*C-2009-10-08”)
まえがき
まわりを見渡せば、クラウドの話で持ちきりです。様々なフレームワークがクラウドに対応するなか、もちろんG*なクラウド活用法も存在します。 今回は、Grails/Groovyでのクラウドを紹介・解説します。
名前:山本 剛 (やまもとつよし)
所属:株式会社ニューキャストDTP、組版屋、印刷業界向けWebアプリ開発など。案件は75%Grailsを使ってます。
JGGUG(じぇいがぐ) 名古屋支部長です。「Grails徹底入門」9-11章を書きました。 Grails Acegi Plugin の中の人だった。
http://d.hatena.ne.jp/mottsnite/twitter @tyama
自己紹介
※注意事項
本日ライブコーディングは行いません。まとめサイト的な内容です。EC2やGAE/Jの奥深い内容の質問は後日回答となる場合があります。
本日の議題G*(アスタ)ってなに?Groovy/Grails?Why?G*(アスタ)をクラウドへAWSベースMorph AppSpaceStaxCloud Foundry
GAE/JGrails+AppEngineプラグインGaelyk
まとめ・比較・利点・欠点
G*(アスタリスク)
JGGUGjapan grails/groovy user group
G*(アスタリスク)って何?JGGUGでは、Groovyに関連する技術、Groovyはもちろんのこと、Grails - JEEフレームワークGriffon - デスクトップアプリ用フレームワークGant、Gradle - ビルドツール等のことを、
G*(アスタリスク)とよびます。
JGGUGjapan grails/groovy user group
GroovyGroovyはJVM上で動作する動的スクリプト言語。簡潔で強力な表現力。DSLなどに適した高い柔軟性。Javaとの親和性の良さが特徴。JSR-241として標準化されてる。
何故Groovy?(個人的意見)Javaを楽しく簡潔にコーディングほぼJavaなのでJava開発者には入りやすい。GroovyはJava!(昔そんなことをロンドンで聞いた)わざわざ他の言語を覚えなくて良いよ!
深入りすると大変だよ!ケガするよ!
Grailsとは・・・JavaEEで実績のあるSpringフレームワークやHibernateをベースに、Groovyを活用して効率よくJavaEE開発を行うことのできる、フルスタックフレームワークです。
JVM
開発フレームワーク・DSL
Warファイルをデプロイ
Grails コア (Java+Groovyで実装)
Webコンテナ Testing コード生成
Grails プラグイン
プロダクション
何故Grails?利点DRY、CoC (この辺の話は詳しい人にお願いするとして・・・)
DSLでのわかりやすいコード豊富なプラグインでサクサク開発各種機能、Web開発に必要なパーツ認証、AJAX、Flex、JMS、AppEngine、UI関連等。
プラグイン独自に開発して、モジュラな開発。欠点ダイナミック過ぎて純粋なJEEアプリよりは・・・。IDE・・・・!?個人的には無問題。テキストエディタでOKSpringSourceの人がEclipse対応の開発を開始してるとか!?
Grailsプロジェクトがほぼそのままプラグイン化できるのでCMS
的な感覚も持ち合わせている。
JGGUG、G*にワークショップに参加してね!
詳しくは→ http://www.jggug.orgこんな方はとくに!!!動的だけど静的もほしい。柔軟な開発がしたい。技術の進歩の速度に疲れた方。もっと詳しい事を議論したい方。さみしがりや。変わり者。言語オタク。矛盾の狭間にいて苦しい人。
JGGUGjapan grails/groovy user group
G* と クラウド
G*(アスタ)をクラウドへ基本的にJEEの動くクラウドであれば動作可能。注目のポイントは、大きく分けると3種類AWS(EC2,S3)ベースMorph AppSpaceStaxCloud Foundry Cloud Foundry (EC2)Google App Engine for JavaGrails+app-engineプラグインGAE/Jでライトに開発 Gaelyk
GrailsにやさしいPaaS。
本家運営!
AWSベース
(EC2,S3)
Morph AppSpace概要 サイト http://www.mor.ph/PaaSです。キューブ(Cubes)という単位で管理。Cubes - (Webサーバとアプリケーションサーバを組み込んだ仮想マシン単位)インフラはAWS。(EC2,S3)料金:2 Cubes/ DB:10GB データ転送:30GB ストレージ:20GB $1/日 $31/月料金表 http://www.mor.ph/information_pricing2009年5月から有料契約をしていないと無料な開発版が使えない。
Morph AppSpaceツールなどWebベースのツールで管理がおこなえる。
Grailsをデプロイする公式サポートツールも存在する。現在 Grails-1.0.2 - v1.1.1に対応。
デプロイのサポートをするGrailsプラグイン。 http://grails.org/MorphDeploy+Plugin※たぶん古いのでメンテが必要。
Morph AppSpace新規 AppSpaceサブスクリプション登録画面サブドメイン、DB等を設定2キューブ 1クレジット/日
Morph AppSpaceツールのダウンロード
ツールの使い方ツール設定ダウンロードしたツールを解凍grails-svn-morph-deployerファイルをGRAILS_HOME/binにコピーGRAILS_HOME/libにgrails-morph-deployer.jarをコピーGRAILS_HOME/scriptsにMorphDeploy.groovyをコピーデプロイ管理画面よりダウンロードしたmorph_deploy.propertiesをGrailsプロジェクトの直下にコピーコマンド grails morph-deploy を実行自動的にコンパイルしてwarを作りデプロイしてくれます。
Morph AppSpace管理画面、DB管理 (phpPgAdmin)
Morph AppSpaceクラウドの構成設計ツール (Beta)
Staxhttp://www.stax.net/EC2をインフラにJEEの実行環境を提供。現在はベータ提供中なので無料。デプロイ用のSDKを提供している。Grails用の解説もある。http://wiki.stax.net/w/DBはStax MySQLデータベースを使用する。※MySQL 5.0.x (ローカルからもアクセス可能)
Stax管理コンソール
Staxアプリケーション作成管理画面 ↓
Staxデータベース作成情報入力 →管理画面 ↓
StaxSDKセットアップ公式ドキュメントより。http://wiki.stax.net/w/index.php/SDK
環境変数設定
Stax SDKのツールはgroovyで実装されています。※groovy-1.6.0
# curl -L http://stax-downloads.s3.amazonaws.com/sdk/stax-sdk-0.3.6-dist.zip > stax_sdk.zip
# unzip stax_sdk.zip
# rm stax_sdk.zip
# cd stax-sdk-0.3.6
export STAX_HOME=/opt/stax-sdk-0.3.6export PATH=$PATH:$STAX_HOME
StaxでGrailshttp://wiki.stax.net/w/index.php/GrailsGrailsのプロジェクト作成grails create-app myapp
DataSource.groovy編集
...省略...dataSource {dbCreate = "update"driverClassName = "com.staxnet.jdbc.Driver"url = "jdbc:stax://jggug"username = "tyama"password = "*****"
}
...省略...
StaxでGrailsConfig.groovyにstacktrace.logの無効指定追記
ライブラリをSTAX_HOME/libからコピーstax-appserver-[verson].jar,mysql-connector-java-5.1.6.jar, xstream-1.3.jar
warファイル書きだし # grails warstaxコマンドでデプロイ# stax app:deploy -a アプリID warファイル指定
... log4j = { appenders { null name:'stacktrace'...省略...
Stax動作確認!
Stax その他デプロイ履歴 開発メンバー追加
サーバゾーンの設定
クラスタサイズ
Cloud Foundry
Cloud FoundryとはURL http://www.cloudfoundry.comSpringSourceが提供する。EC2をインフラに使用したJEE用のPaaS。WebコンテナにSS社のtcサーバが使用されている。数クリックで簡単デプロイ+管理。Cloud ToolのWeb版!?
後で、少し歴史でも
Cloud FoundryとはAmazon Web Servicesのアカウント登録が必要AWSの課金がされます。
現在はベータなので、Cloud Foundry自体は無料正式サービスは有料化の予定らしいです。
Cloud Foundry 歴史 ①作者Chris Richardson (POJOs in Actionの著者さん)
2008/1 Cloud Tool の公開 EC2DeployフレームワークEC2にJEEアプリケーションを簡単にデプロイするためのGroovyベースのフレームワーク
Tomcatが動作して、EC2Deployで作業が行われるように設定されたAMIEC2Deployを使用してデプロイを行うMavenプラグイン
Cloud Tool MavenプラグインMaven Goalscloudtools:deploy アプリケーションをEC2にデプロイする。 cloudtools:redeploy 再デプロイ。cloudtools:jmeter jmeterを起動してテストをロードする。cloudtools:stop インスタンスを停止する。 cloudtools:dbsave データベーススナップショットを cloudtools.s3.path に指定したS3に保存する。cloudtools:dbrestore cloudtools.s3.pathに保存したデータベースをリストアする。cloudtools:clone クラスタのコピーを作成する。cloudtools:describe クラスタの情報表示cloudtools:list 使用可能なクラスタのリストを出す。cloudtools:stop クラスタの停止。EBS(Elastic Block Store)も操作可能
Cloud Foundry 歴史 ②2008/4 - 8:Grails用のプラグイン発表→公開 Cloud Tools Grails Plugin v0.1 - v0.4Grails用のコマンドが実装されるcloud-tools-deploy - EC2インスタンスを起動してWebアプリケーションを起動 (MySQLマスタ&スレーブ、Tomcat、Apache)cloud-tools-describe - インスタンスの情報を表示cloud-tools-redeploy - 再デプロイcloud-tools-stop⦆ - EC2インスタンスを停止
0.3、0.4で更にMySQLのバックアップ設定の実装やコマンドが追加
Cloud Tools Grails Pluginコマンド一覧
cloud-tools-deploy cloud-tools-describe cloud-tools-redeploy cloud-tools-stop cloud-tools-add-app-server cloud-tools-clone cloud-tools-create-snapshot cloud-tools-curl cloud-tools-db-recreate cloud-tools-db-restore cloud-tools-db-save cloud-tools-enable-brb cloud-tools-disable-brb
cloud-tools-enable-ebs cloud-tools-enable-master-backups cloud-tools-enable-slave-backups cloud-tools-init-lb-pool cloud-tools-jmeter cloud-tools-list cloud-tools-restart-apache cloud-tools-sql cloud-tools-stop-jmeter cloud-tools-stop-mysql-slave cloud-tools-update-war cloud-tools-verify
Cloud Foundry 歴史 ③2008/9:Elastic Block Store(EBS)対応2008/11:Clould Tools (Web版)のベータテスターをブログで募集2008/11 - 2009/1:Cloud Foundryベータ公開開始この辺りから、Dustin Whitney氏が参加して、多数のGrails用スクリプトを実装。v0.5-v0.7
2009/8/19:SpringSourceがSpring Source Cloud Foundryを発表
Cloud Toolのデモ動画作者のサイトにGrailsでの動画あります。http://tinyurl.com/y9hb2go
Cloud Tool手順grails create-app democd demograils install-plugin cloud-tool.zip
Config.groovy設定importの追加aws.propertiesの指定
デプロイgrails cloud-tools-deploy
インスタンス情報grails cloud-tools-describe
停止grails cloud-tools-stop
こんな手順でした。
Cloud Foundry 歴史 まとめCloud ToolからCloud Foundryへの歴史を見ることで、Cloud Foundryの中がどうなってるか分かったと思います。
中身は、もしかしてGrailsで実装されていたり!?
Cloud Foundry 構成図構成図
Clould FoundryApache HTTP Server
tc Server
MySQL
HypericHQ&SIGAR
Amazon Web Services EC2
Cloud Foundry デプロイ手順ログインすると、こんな画面。
Cloud Foundry デプロイ手順アプリケーションをアップロードする
warファイルをセット
コンテキストルート
DBの設定
アプリケーション名をセット
Cloud Foundry デプロイ手順アップロード完了
再生ボタンをクリック
Cloud Foundry デプロイ手順起動画面で詳細設定
デプロイ名をセット
インスタンス設定
パブリックIP設定
Cloud Foundry デプロイ手順起動画面で詳細設定
コンテナ設定
DB設定EBS設定
Cloud Foundry デプロイ手順設定のテンプレート保存ができるように!
Cloud Foundry デプロイ手順デプロイ!!起動完了!!
起動!
Cloud Foundry 管理デプロイメント詳細画面
詳細
UPTIME等
アプリケーション
Cloud Foundry 管理デプロイメント詳細画面
詳細へApache
tc Server
MySQL
Cloud Foundry 管理詳細画面。
基本情報
HTTPDサーバ
TCサーバ
Cloud Foundry動作確認。
Cloud Foundry 管理アカウント設定画面
AWSのACCESS KEY ID
KEY PAIRS
AWSで確認動いてます。 SSHでログイン
Cloud Foundry まとめSpringSourceが提供しているので、Grailsを使うのに何かと安心感がある。個人的には、管理画面からも良いのだが、GrailsのコマンドからデプロイするCloud Toolも魅力を感じる。今はCloud Tool更新が止まってるので、今後の対応に期待。利用料金はどうなるのだろ?今後のVMwareとの絡みは?VMware vCloud ?
GAE/J
GAE/J と G*
Grails + GAE/Jサポートプラグイン。または、Gaelyk
GrailsをGAE/Jに対応させるAppEngine プラグインGORM-JPA プラグインドメインクラスの調整 コントローラの調整 起動コマンド 微調整!
AppEngine PluginGrailsをGAE/Jに対応させるプラグイン機能インストール時にGAEに必要なファイル生成デプロイ用のコマンドスカッフォルドテンプレートJDOとJPAに対応認証設定 → Config.groovyに設定
AppEngine Pluginインストール前に必要な設定
Google App Engine SDK設定ダウンロード&解凍http://code.google.com/appengine/
AppEngineSDKの場所を指定。環境変数 APPENGINE_HOME 又は、config/BuildConfig.groovyにgoogle.appengine.sdkで指定
export APPENGINE_HOME=/opt/appengine-java-sdk-1.2.5
google.appengine.sdk='/opt/appengine-java-sdk-1.2.5'
インストールと設定インストール!$ grails install-plugin app-engine
インストール途中で質問に答えます。Do you want to use JPA or JDO for persistence? (jpa, jdo)jpa
インストールされるとgrails-app/conf/以下にそれぞれのファイルが追加されます。datastore-indexes.xmlpersistence.xml
★grails-app/conf/Config.groovyにGAEのアプリケーション名を記述google.appengine.application="jggugv4"
★Grailsプロジェクトのバージョンをセット
GORM-JPA PluginJPAプラグインは3種類ある…
Hibernate JPA Provider PluginJPA PluginGORM-JPA Plugin ← これを使います。
できることGORMと同じsave(),list()等のメソッドが利用できる。(※一部未対応、)
できないことドメインクラスと同じmapping定義ドメインの定義には、JPAアノテーションを利用Criteria (※JPA1.0で未対応なため)
GORM-JPAインストールインストール! $ grails install-plugin gorm-jpa
resources.groovyにentityManagerFactoryとtransactionManagerを追記entityManagerFactory(org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean) { beanClassLoader = ref("classLoader")}
transactionManager(org.springframework.orm.jpa.JpaTransactionManager) { entityManagerFactory = entityManagerFactory }
何故かdatanucleus-enhancer*.jarが入っていないのでコピーcp $APPENGINE_HOME/lib/tools/orm/datanucleus-enhancer-1.1.4.jar lib
ドメインクラスの調整通常のGrailsドメインクラスでは、JPAで使うことはできません。若干の修正が必要です。JPA用のアノテーションを追記import org.datanucleus.jpa.annotations.Extensionimport javax.persistence.*;
@Entityclass Event implements Serializable {
@Id @GeneratedValue (strategy = GenerationType.IDENTITY) @Extension (vendorName = "datanucleus",
key = "gae.encoded-pk", value = "true") String id /** イベントタイトル */ @Column //全てのフィールドに付加 String eventName
コントローラの調整これが正解なのかは検証中ですが。アクションクロージャsaveだけ編集。
def save = { def eventInstance = new Event(params) Event.withTransaction{ if(eventInstance.save(flush:true)) { flash.message = "Event ${eventInstance.id} created" redirect action:"show", id:eventInstance.id } else { render view:'create', model:[eventInstance:eventInstance] } }}
起動コマンドバージョンをセットしてローカルで起動
準備$ grails set-version 1
起動$ grails app-engine run
デプロイコマンドでデプロイ
appcfgコマンドでデプロイ
$ grails set-version 1$ grails app-engine deploy
$ grails app-engine package$ rm target/war/WEB-INF/lib/jul-to-slf4j-1.5.6.jar$ appcfg.sh update ./target/war
動作!
Grails+GAE/J まとめいろいろと記述をGAE/J用に書き直す手間がありますが、プラグインを活用して開発ができる等の利点があります。
現状バグがあり正常に動作しませんが、近々Fixされると思います。※1.2のリリースには安定するはず。
Gaelyk(ゲーリック)
GroovyでGAE/Jを簡単に。
GroovyでGAE/Jを簡単に。
GAE/Jをはじめるにあたって、最初からしっかりしたMVCなフレームワークも良いけど、柔軟なわかりやすい環境で試すことができたら良いなと思います。そんなサックリとGAE/Jを試したい人にはもの凄くお勧め。AppEngineのサービスを試してみるもよし、本気で開発するもよし。Gaelykも一応MVCな対応ができてたりします。ただし、IDEフレンドリーではない気がする。その辺はおいといて・・・・。
Gaelyk(ゲーリック)Gaelykとは、
GAE/J用の軽量Groovy開発ツールキットです。GroovyテンプレートとGroovletで構成されています。
ビューとコントローラGroovletsとTemplateServletを拡張したクラスで実現ビュー:GaelykTemplateServlet拡張子gtplのプレゼンテーション層
コントローラ:GaelykServletGaelykTemplateServletとGaelykServletにGAE/Jで使用するサービスなどがServletBindingにバインドされています。GAE/JのサービスにもCategoryを使用してメソッドが拡張追加されています。
Gaelyk(ゲーリック)
クイックスタート & 概要
セットアップGaelykテンプレートプロジェクトをダウンロードhttp://gaelyk.appspot.com/download/
テンプレートプロジェクトです。そのまま解凍して仕様します。gaelyk-template-project-0.2.zipを解凍。
テンプレートプロジェクト内容 build.groovy & src
AntBuilderで実装されてる簡単なビルド用プログラム。srcフォルダに配置した、GroovyとJavaのソースのコンパイルに使用。
warこのディレクトリがデプロイされます。
warディレクトリこのディレクトリに、ビューの*.gtplと、css、images等のファイルを配置します。WEB-INFappengine-web.xml GAEの定義ファイルweb.xml/groovy/ここに*.groovy配置
/includes/ - インクルードファイル//lib/ - *.jar/classes/
appengine-web.xml 設定<application>タグの中身を対象のアプリケーション名称に変更<version>を指定<static-files> リソース設定
起動には、GAE/Jのツールを使う
Eclipseで起動もOK
http://localhost:8080/をブラウザで表示
ローカルで起動テンプレートプロジェクトのルートで、$ dev_appserver.sh ./war
※Windowsでは、.sh→.cmd
Gaelyk(ゲーリック)
More Quick Start!
More Quick Start!.gtpl(テンプレート) GaelykTemplateServletGroovlets GaelykServletEager、Lazy変数バインドされたGAE/Jのサービス追加/拡張されたメソッドおまけ:簡単に始められるキット
.gtpl(テンプレート) GaelykTemplateServlet
JSPやGSPと同じようなもの。Groovyコードが書けます。<% /* some code */ %>${value}でGString書けます。<%=hoge %>も使えます。printとprintlnもOK。
GaelykTemplateServletソース
Groovlets GaelykServletGroovyServletを拡張したGroovyスクリプト
Viewテンプレートへのデリゲートrequest.setAttribute 'list', [1, 2, 3, 4]request.setAttribute 'date', new Date() forward 'display.gtpl'
GaelykServletソース
Eager変数request : HttpServletRequestresponse : HttpServletResponsecontext : ServletContextapplication : contextと同じsession : HttpSessionを返します。 request.getSession(false) と同じです。params : フォームパラメータのマップheaders : 全てのリクエストヘッダのマップ
Lazy変数out : PrintWriterを返す。 response.getWriter()への速記sout : ServletOutputStreamを返す。 response.getOutputStream() への速記html : MarkupBuilderを返す。 new MarkupBuilder(response.getWriter()) への速記
バインドされたGAE/JのサービスdatastoreService : DatastoreサービスmemcacheService : MemcacheサービスurlFetchService : URLFetchサービスmailService : メールサービスimagesService : ImagesサービスuserService : ユーザサービスuser : ログイン中のユーザ (ログインしていない場合は null )
追加/拡張されたメソッドGAE/Jのサービスやクラスがより便利に使えるように、メソッドが追加されています。(一部を紹介)
詳しくは http://gaelyk.appspot.com/tutorial/MailServiceのsend()を拡張
DatastoreServiceにwithTransactionを追加
low-levelデータストアAPIを使いやすく
mailService.send to: 'foobar@gmail.com', subject: 'Hello World', htmlBody: '<bold>Hello</bold>'
datastoreService.withTransaction { // your code}
low-levelデータストアAPIグルービーにEntityクラスを使ってデータストアimport com.google.appengine.api.datastore.Entity
def person = new Entity("person")
person['name'] = "やまもとつよし"println person['name']
person.age = 31println person.age
//保存person.save()
//削除person.delete()
//リストdef q = new Query('person')def list = datastoreService.prepare(q).asList(
Builder.withLimit(20).offset(0) )
注意点・ゲーリック*.gtplの文字化け回避
file.encodingのみではだめっぽい。groovy.source.encodingも指定してね。
<system-properties> <property name="file.encoding" value="UTF-8"/> <property name="groovy.source.encoding" value="UTF-8"/></system-properties>
おまけ荒っぽいですが、簡単に始められるキットここに http://grails.jp/sample/ に置いておきます。gaelyk-setup.sh をダウンロードそして実行!要 wget 。※好みな物に置き換えてね。注意:危険だと思ったら中身を見てから使ってね。超ザックリ適当に作ったので、シェルスクリプト詳しい人、拡張よろしくです。
Eclipseでインポート。GAE/JのプラグインとGroovyのプラグインが必要。
$ ./gaelyk-setup.sh myapp001
時間があればデモ
まとめG*なクラウド開発では、どれを選択するべき?ものすごく単純なJEEアプリを作る場合はGAE/J&Gaelyk でサックリ開発
Grailsプラグインを活用して若干高度なJEEアプリを作りたい場合で、GAE/J範囲で可能であれば、Grails/AppEngine がオススメ。
Grailsをそのままクラウドへ!の場合はCloudFoundry他のEC2ベース
まとめ小 Gaelyk
中Grails + GAE/J
大Grails + Cloud Foundry
AWS S3
AWS EC2
Clould FoundryGrails
PluginPluginPlugin
instanceinstanceinstance
ライトな部分Google AppEngine
Gaelyk
GrailsPluginPlugin
クライアントGriffon Adobe Air
連携
連携連携
top related