7
7

More than 5 years have passed since last update.

Scala+PlayでRDSの文字化けに対処したりスワップ作ったりElastic BeanstalkにNew Relicを追加してデプロイしたりするメモ

Posted at

はじめに

自分用備忘録なので箇条書き。

この辺↓のつづき。
Scala+Play+SecureSocialでTwitterにログイン認証してユーザ名とアバターを表示するメモ
[Scala]SecureSocialで取得したTwitterアクセストークンでタイムラインを取得するメモ[Play]
[Scala]SecureSocialで取得したTwitterアクセストークンでタイムラインを取得するメモ[Play]
Docker初心者がimageファイルを開発してみる[Mac]
[Scala]Elastic Beanstalk(Docker)でevolutionが自動実行されないとデプロイに失敗する件[Play]
VPCを超えて、Elastic BeanstalkのMySQLサーバーに接続するメモ
[Scala]SecureSocialで、すべてのビューを独自のビューで置き換えるメモ[Play]

RDS(MySQL)の文字化けに対処するためにしたこと

t1.microだとParameter Groupを後から変更できないので、
Elastic Beanstalk作成時にt1.micro以外のインスタンスを選択しておく。

Parameter Groupの変更

参考: OSXでAWS Elastic BeanstalkにRailsアプリをデプロイした

・新規にparameter groupを作成し、"character_set"で検索して以下の値をutf8に変更する。

character_set_database
character_set_client
character_set_connection
character_set_results
character_set_server

・skip-character-set-client-handshakeを1に変更
・該当インスタンスのparameter groupを作成したものに変更。

Swap領域の確保

Elastic Beanstalkは .ebextensions ディレクトリに .config ファイルを含めておけば、初期設定をすることができる。
playアプリと同じディレクトリに.ebextensionsフォルダを作成し、フォルダ内にconfigファイルを置く。

参考: Elastic Beanstalk 環境カスタマイズメモ

.ebextensions/00_add_swap.config
commands:
  01_enable_sudo:
    command: "echo Defaults:root !requiretty >> /etc/sudoers"
    test: "test ! -e /home/ec2-user/swapdone"
  02_dd:
    command: "sudo dd if=/dev/zero of=/swapfile bs=1M count=1024"
    test: "test ! -e /home/ec2-user/swapdone"
  03_mkswap:
    command: "sudo mkswap /swapfile"
    test: "test ! -e /home/ec2-user/swapdone"
  04_swapon:
    command: "sudo swapon /swapfile"
    test: "test ! -e /home/ec2-user/swapdone"
  05_swapdone:
    command: "touch /home/ec2-user/swapdone"
    test: "test ! -e /home/ec2-user/swapdone"

New Relicの設定とか

DockerfileとDockerrun.aws.jsonファイルを用意しておく

Dockerfile
FROM junsuzuki/java8
MAINTAINER Jun Suzuki

# Copy the app into the image.
ADD ./target /opt/playapp

# Start app
EXPOSE     80
CMD /opt/playapp/universal/stage/bin/play221ss214snslogin -Dhttp.port=80  -J-javaagent:/opt/playapp/universal/newrelic/newrelic.jar

CMDのところでオプション -J-javaagent:/opt/playapp/universal/newrelic/newrelic.jarを指定するのがミソ。

Dockerrun.aws.json
{
  "AWSEBDockerrunVersion": "1",
  "Ports" : [
      {
      "ContainerPort": "2375"
      }
  ]
}

New Relicにアプリケーションを登録

手順:
1.New Relicに登録する。
2.New Relicのサイトで新規でアプリケーションを作成する。
  このとき、使用言語はJavaにする。
3.Javaを選択すると、作成したアプリケーション専用のzipファイルをダウンロードできるようになるのでダウンロードする。

このzipファイルには設定済みのnewrelic.ymlが入っているので便利。
自分でアプリケーションキーなどを設定する必要はない。

4.下記のように、ダウンロードしたzipファイルをplayのtarget/universalディレクトリに解凍する。
  (play clean compile stage を実行するたびに、解凍したファイルが消えるので毎回しなければならない。)
  shellスクリプトでも書いておくのが吉。

$ play clean compile stage
$ unzip -d target/universal/ newrelic-java-3.11.0.zip
$ zip -r app.zip Dockerfile Dockerrun.aws.json target/ .ebextensions/

newrelicも一緒にzipに固めてしまう。
.ebextensionsも固めておくことで初期設定が走る。

参考サイト:
https://docs.newrelic.com/docs/agents/java-agent/frameworks/play-installation-java#prod-mode

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7