ElasticBeanstalkは、ミドルウエアまで組んだものを提供してくれる便利なサービスですが、それでもさらに追加したくなることがあります。ここでは、wkhtmltopdfを例として、rpm形式で配布されているソフトウェアをElasticBeanstalk(長いので、以下では「EB」と略します)に組み込む方法を考えていきます。
wkhtmltopdfって?
本題とはあまり関係ありませんが、wkhtmltopdfについても軽く触れておきます。
wkhtmltopdfは、WebKitのブラウザエンジンを使って、HTMLをPDFに変換するツールです。WebKitを利用していることもあって、JavaScriptまで実行できるなど、かなりの高性能を誇っています。もちろん、日本語もフォントがあれば表示できます。
事前調査
まずは、インストール条件をチェック
EBを作成した時に、サーバ接続用の秘密鍵を得ていると思いますので、それでSSH接続して、手作業でrpmのインストールを行い、動作するまで確認してみましょう。今回のwkhtmltopdfの場合、以下のようなことがわかりました。
- rpmとしては、CentOS6の64ビット用が適切1
-
xorg-x11-fonts-75dpi
に依存している(yumでインストール可能) - 日本語表示には日本語フォントが必要(AWSリポジトリに
ipa-mincho-fonts
、ipa-gothic-fonts
があるので利用可能)
設定手順
EBの設定には、eb init
したルートフォルダに.ebextensions
というサブディレクトリを掘って、そこにyaml形式の設定ファイルを入れます。シェルスクリプトを作るなど、およそ何でも実行可能なのですが、rpmを入れるくらいならそこまで複雑にしなくても実行はできます。
インストールの場合の書式
rpm、yum、rubygems、python(pipやeasy_install)のパッケージマネージャはEB標準で対応しているので、必要なパッケージさえ書けば動きます。
packages:
yum:
some-yum-package: []
rubygems:
some-gem: '1.2.3'
優先順位とファイル名
ファイル名が数字始まりになっていますが、これはファイル名順に処理されるので、その管理をしやすくするためです。また、同じファイルのpackages
内では、rpm、yum、(rubyとpython)という順で実行されます。ということで、同じ設定ファイル内でepelのrpmを入れて、その後にepel経由でyumを行うことはできますが、yumに依存するrpmを入れることはできません(一度これで失敗しました)。
ファイルを分ける
今回の場合、2ファイルに分けて、先にyumで依存関係を整えてからrpmを入れることにしました。
packages:
yum:
xorg-x11-fonts-75dpi: []
ipa-mincho-fonts: []
ipa-gothic-fonts: []
packages:
rpm:
wkhtmltox: http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm
なお、rpmはインターネット上からアドレスを拾ってきてこのように直接指定することもできますが、安定して置かれなさそうな場合には、自前サーバなりS3なりにコピーして、そちらを指定することも可能です。
動作確認
このように自動インストールを行うよう設定した場合、確認を兼ねてサーバの再構築をしておきましょう(再起動では不足です)。とりわけ、開発環境などでインスタンスが1台しかない場合、手動でインストールしたものが残っていて、自動インストールの失敗に気づかないこともありえます。
参考リンク
-
カーネルのバージョンなどを見てCentOS 7用を先に入れてみたら、ライブラリのバージョン不一致で失敗しました。 ↩