日々常々

ふつうのプログラマがあたりまえにしたいこと。

EC2のAmazonLinuxにPayaraを放流してみた

前置き

EC2さん。便利ですよね。使ってますか?私はあまり使ってないです。別にほかのサービス使ってるとかでもないです。(ドヤ顔で目線を逸らしながら

たまに思い出したように触っては、ある程度使えるつもりになって。 しばらくしたら使い方を綺麗さっぱり忘れて、AWS Consoleにログインするたびにいろいろ変わってて戸惑うってのを繰り返しています。 いい加減にしたい。いや、これがいい加減なのか。

ふとしたことから雑なJavaEEアプリケーションを突っ込んだPayara microをEC2で動かしたいなーと思って、また思い出したようにEC2を触るわけで、また一からあれこれやってました。

理想と現実

理想

  • EC2インスタンスを立ち上げて
  • Payaraダウンロードしてきて
  • war放り込んで
  • 起動したら完了

現実

  • EC2立ち上げるかー。microでいいか……ん、そいやnanoとかあったね。知ってる知ってる。聞いた事はある。
  • jdkのインストールとか要ったね。あったあった。
  • payaraさんダウンロード、短縮URLだけど……まあいけるか。
  • コマンドわからん。wgetわからん。yumもわからん。 ← いつものこと
  • さあ起動だ!……ん?……例外? ← new

Payaraさんを放り込んだら例外吐いて死んだ

jdkのインストール

まずはいつものアレ。

$ sudo yum install java-1.8.0-openjdk-devel
$ sudo alternatives --config java
(なんか出てくるので1.8.0を選択)

1.8.0_65だった。まあいいか。

参考: Amazon LinuxでJava8/Tomcat8の環境を構築する

payaraのインストール

次に http://www.payara.fish/downloads からリンクをコピーしてきてwgetする。

$ wget http://bit.ly/1W9d2Lb

ファイル名が 1W9d2Lb になるけど気にしない。 適当にmvした。

payaraの起動

まだwarとか放り込んでないのでそのまま起動する。

$ java -jar payara-micro-4.1.1.154.jar

……ふつうはこれでいいのだけれど、こんなエラーになっちゃって。

$ java -jar payara-micro-4.1.1.154.jar
1 24, 2016 10:33:44 午前 com.sun.enterprise.v3.server.SystemTasksImpl setSystemPropertiesFromEnv
重大: Cannot determine host name, will use localhost exclusively
java.net.UnknownHostException: ip-XXX-XXX-XXX-XXX: ip-XXX-XXX-XXX-XXX: unknown error
    at java.net.InetAddress.getLocalHost(InetAddress.java:1505)
(中略)
    at fish.payara.micro.PayaraMicro.main(PayaraMicro.java:105)
  Caused by: java.net.UnknownHostException: ip-XXX-XXX-XXX-XXX: unknown error
    at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
(中略)
    at java.net.InetAddress.getLocalHost(InetAddress.java:1500)
    ... 29 more

(中略)

[2016-01-24T10:33:55.956+0000] [Payara 4.1] [INFO] [NCLS-JMX-00006] [javax.enterprise.system.jmx] [tid: _ThreadID=87 _ThreadName=Thread-12] [timeMillis: 1453631635956] [levelValue: 800] JMXStartupService has disabled JMXConnector system

Exception in thread "main" java.lang.NullPointerException
  at fish.payara.micro.services.PayaraMicroInstance.setInstanceName(PayaraMicroInstance.java:95)
    at fish.payara.micro.PayaraMicroRuntime.<init>(PayaraMicroRuntime.java:64)
    at fish.payara.micro.PayaraMicro.bootStrap(PayaraMicro.java:710)
    at fish.payara.micro.PayaraMicro.main(PayaraMicro.java:105)

とても悲しい。 起動はしてるのでサーバーのエラーページを表示することはできるのだけれど、--deployでwarを放り込んでも動いてくれない状態だった。

ホスト名が見つからないって言ってて、出てるのはローカルのホスト名。なので /etc/hostslocalhostに足してあげる。

$ hostname
ip-XXX-XXX-XXX-XXX
$ sudo vi /etc/hosts
127.0.0.1   localhost localhost.localdomain ip-XXX-XXX-XXX-XXX

参考: EC2 インスタンス上に Cassandra クラスタを構成する〜 java.net.MalformedURLException の対処 〜

よくわからんけど 動くようになったからよし。

放流

  • scpとかでwarを放り込んで
  • java -jar payara-micro-4.1.1.154.jar --deploy hoge.war で起動

これで完了。やったね。