なんか最近Elastic Beanstalkというのがあるそうで、ブラウザからボタンをぽちぽち(だけじゃないけど)押して行くだけでWarがデプロイできちゃったりいろいろ出来るらしい。
EBでの設定を元に、結局裏側ではEC2やらRDSが立ち上がってくれるので、まあ便利機能とでも思えば良いのかしら。
ってことで、タイトル通りAWS Elastic Beanstalkを使ってMySQLを利用したPlayを動かしてみた。
AWS Elastic Beanstalk 編
1.Key Pairsの作成
Elastic Beanstalk(以下EB)を始める前に、EC2でKey Pairsを作成しておくやりかたはノリですよね。
EC2 > KeyPairs > Create Key Pairs
勝手にダウンロードされる「*.pem」ファイルを、Macの~ディレクトリに配置。
ついでに、権限を600に変更しておく。
ログインする。
特にないけど、まあリージョンを「TOKYO」にするくらい。
「Create a New Application」を押下。
「Application Infomation」で、「Application name:」を記入。
ここでは「omiend-play-crud」とする。
「Create」ボタン押下。
「Environment Type」で、下記をそれぞれ選択。
「Continue」ボタン押下。
※ロードバランサー使う時は「Environment type」で「Load balancing, autoscaling」を選択すればいいと思うけど、ここではやらなーい。
「Environment Information」で、「Environment name:」にアプリケーション固有の名前を入力する。
「Continue」ボタン押下。
※「Environment URL:」に記載されるURLで、他に同じ物が無いか「Check availability」ボタンで確認するのをお忘れなく。
※ここでは「omiend-play-crud-java」とする。普段テストで使っているのでナメしちゃだめよん。
「Additional Resources」で、今回RDSを使うので、「Create an RDS DB Instance with this environment」を選択。
「Continue」ボタン押下。
「Configuration Details」で、下記の様に選択。これはEC2の設定かな。
※「EC2 key pair」は初めに作ったKeyPairsを選択する。
「RDS Configuration」で、下記の様に選択。
「Revew」画面で確認して「Create」ボタンで完了!
こんな感じになればOK。
EC2のコンソールを見てみると、インスタンスが立ち上がっているのが分かる。
同じく、RDSのコンソールを見てみると、インスタンスが立ち上がっている。
EC2 > Security Group > Inbound
試しに、EBから作成したEC2とRDSインスタンスにログインしてみる。
terminalを起動して下記のようにEC2へログイン。
-iに指定するファイルは、「1.Key Pairsの作成」でダウンロードしたファイル。
ユーザーはec2-userを指定。
ドメインはEC2インスタンスで参照する「Public IP」を指定。
RDSへのログイン
次に、RDSへのログイン。
僕は普段Sequel Proというクライアントを使っているのでこれで説明。
まあ、下記の様な感じに。
繋がったら、WebアプリのDBやらTableやらを設定しておく。
勝手にダウンロードされる「*.pem」ファイルを、Macの~ディレクトリに配置。
ついでに、権限を600に変更しておく。
$ ls -al -rw-r--r--@ 1 omiend staff 1696 1 13 15:49 omiend_play_crud.pem $ chmod 600 omiend_play_crud.pem $
2.EBでアプリケーションを作成
とりあえず空のアプリを作成する。Warはまだデプロイしない。ログインする。
特にないけど、まあリージョンを「TOKYO」にするくらい。
「Create a New Application」を押下。
ここでは「omiend-play-crud」とする。
「Create」ボタン押下。
「Environment Type」で、下記をそれぞれ選択。
「Continue」ボタン押下。
※ロードバランサー使う時は「Environment type」で「Load balancing, autoscaling」を選択すればいいと思うけど、ここではやらなーい。
- Environment tier: Web Server
- Predefined configuration: Tomcat
- Environment type: Single instance
※ここでWarをアップロードするんだけど、DBの設定とかあるので一回スキップ。
- Source: Sample application
「Environment Information」で、「Environment name:」にアプリケーション固有の名前を入力する。
「Continue」ボタン押下。
※「Environment URL:」に記載されるURLで、他に同じ物が無いか「Check availability」ボタンで確認するのをお忘れなく。
※ここでは「omiend-play-crud-java」とする。普段テストで使っているのでナメしちゃだめよん。
「Additional Resources」で、今回RDSを使うので、「Create an RDS DB Instance with this environment」を選択。
「Continue」ボタン押下。
「Configuration Details」で、下記の様に選択。これはEC2の設定かな。
※「EC2 key pair」は初めに作ったKeyPairsを選択する。
- Instance type: t1.micro
- EC2 key pair: {1.Key Pairsの作成}
「RDS Configuration」で、下記の様に選択。
- DB engine: mysql
- Instance class: db.t1.micro
- Allocated storage: 5 GB(最小値)
- Username: 好きなユーザー名
- Password: 好きなパスワード
「Revew」画面で確認して「Create」ボタンで完了!
すると、下記の様な画面が表示されるので、くるくる回っている矢印が緑色になるまで待つ(5分くらい?)
元気なtomcatちゃん。(関係ない
こんな感じになればOK。
EC2のコンソールを見てみると、インスタンスが立ち上がっているのが分かる。
同じく、RDSのコンソールを見てみると、インスタンスが立ち上がっている。
3.MySQLのポート解放
EC2からRDSのMySQLを利用するために、下記のようにポート解放を行う。EC2 > Security Group > Inbound
4.試しにログイン
EC2へのSSHログイン試しに、EBから作成したEC2とRDSインスタンスにログインしてみる。
terminalを起動して下記のようにEC2へログイン。
-iに指定するファイルは、「1.Key Pairsの作成」でダウンロードしたファイル。
ユーザーはec2-userを指定。
ドメインはEC2インスタンスで参照する「Public IP」を指定。
$ cd ~ $ ssh -i ~/omiend_play_crud.pem ec2-user@54.248.137.158 __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2013.09-release-notes/
RDSへのログイン
次に、RDSへのログイン。
僕は普段Sequel Proというクライアントを使っているのでこれで説明。
まあ、下記の様な感じに。
繋がったら、WebアプリのDBやらTableやらを設定しておく。
- 名前:任意
- MySQLホスト:RDSのインスタンスで参照出来るエンドポイントを指定
- ユーザ名:RDSのユーザー名
- パスワード:RDSのパスワード
- データベース:任意
- ポート:ブランク(3306)
- SSHホスト:EC2のPublic IPを指定
- SSHユーザ:ec2-userを指定
- SSH 鍵:「1.Key Pairsの作成」でダウンロードしたファイルを指定
- SSH ポート:ブランク
Playframwork 編
1.PlayframworkのWebアプリの用意
Play2.0とMySQLを使ったCRUDが実装されているWebアプリを作っておく。まあ、DB機能さえ使えれば良いと思うんだけどね。
2.AWS(EC2+RDS)を使う為に、色々設定する
conf/application.conf
# Database configuration # ~~~~~ # You can declare as many datasources as you want. # By convention, the default datasource is named `default` db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://RDSのエンドポイント:3306/データベース名" db.default.user=RDSのユーザー名 db.default.password="RDSのパスワード" # Evolutions # ~~~~~ # You can disable evolutions if needed evolutionplugin=disabled※Evolutionsの設定は切る。
project/build.properties
sbt.version=0.13.0※sbtのバージョンは0.13.0を使用
project/Build.scala
import sbt._ import Keys._ import play.Project._ import com.github.play2war.plugin._ object ApplicationBuild extends Build { val appName = "crud_java" val appVersion = "1.0-SNAPSHOT" val appDependencies = Seq( // Add your project dependencies here, "mysql" % "mysql-connector-java" % "5.1.20", javaCore, javaJdbc, javaEbean ) val main = play.Project(appName, appVersion, appDependencies) .settings(Play2WarPlugin.play2WarSettings: _*) .settings( // Add your own project settings here Play2WarKeys.servletVersion := "3.0" ) }
// Comment to get more information during initialization logLevel := Level.Warn // The Typesafe repository resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/" // Use the Play sbt plugin for Play projects addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.1") // Play war addSbtPlugin("com.github.play2war" % "play2-war-plugin" % "1.2-beta2")
3.PlayfraworkプロジェクトのWarを作成する
Build.scalaの
import com.github.play2war.plugin._ ・・・ val main = play.Project(appName, appVersion, appDependencies) .settings(Play2WarPlugin.play2WarSettings: _*) .settings( // Add your own project settings here Play2WarKeys.servletVersion := "3.0" )
と、plugins.sbtの
// Play war addSbtPlugin("com.github.play2war" % "play2-war-plugin" % "1.2-beta2")
は、PlayのプロジェクトからWarファイルを作成するためにプラグイン設定。
Warを作成するには下記コマンドを実行する。
$ play war
すると、target/にwarファイルが作成される。
デプロイ編
1.デプロイ
EBの「Running Version」の「Upload and Deploy」から、先ほど作成したwarファイルを選択する。
2.待つ!
EBでまたくるくる矢印が回るので、同じくグリーンになったらOK。
グリーンのちょっと上のURLにアクセスすると、アプリにアクセス出来る。
3.画面が真っ白になってアプリが見れないよ?
以下の事に注意
- Security Groupでポート解放しているか?(MySQL:3306の解放が必要)
- conf/application.confの設定が間違っていないか?
- create database 〜 を忘れていないか?
- Evolutionsが有効になっていないか?(これは有効にしていても大丈夫かも?)
とまあ、ざーっくりだけどこれで一応出来た。
ダブルバイト文字使うと文字化けしちゃったりDBにアクセス出来なかったりするので解決しようと思ったけど、RDS特有の問題(ってかMySQL使う時に良く有る問題を解決する為に、RDSで設定する必要があるだけ)だから、一旦放置。
これでやっとアプリ開発に専念出来る気がする。
今作っているやつの実際の運用はherokuを使うだろうから、ここで書いたのは本当に勉強だけかもめ〜。
0 件のコメント:
コメントを投稿