AmazonのCloudWatchを利用してみようと思い、CloudWatchのコマンドラインツールをインストールしてみた。
今まで、クライアント側の環境はCygwinを利用してて、EC2のコマンドラインツールもCygwin上から利用してた。今回も同様にCygwin上で展開しようとしたが、そのためには少々手を加える必要がある。
まず、mon-cmdファイル。
#!/usr/bin/env bash
先頭のこの宣言のbashの後ろに半角スペースがあり、実行すると
/usr/bin/env: bash : No such file or directory
というエラーが発生する。なので、まずこの半角スペースを削除する。
このエラーがなくなると今度は、
Exception in thread "main" java.lang.NoClassDefFoundError: com/amazon/webservices/Cli
と、com.amazon.webservices.Cliというクラスが見つからないと怒られる。このクラス自体は、CloudWatchのコマンドラインツールのlibフォルダ内のCliCommando-1.0.jarに含まれる。
Javaコマンドの実行時にクラスパスとして渡されているのだが、書式がまずいためNoClassDefFoundErrorが発生してしまう。
これについては同じくmon-cmdファイル内の
for jar in $(ls $LIBDIR/*.jar) ; do CP=${CP}:$jar done
の部分を
for jar in $(ls $LIBDIR/*.jar) ; do cygjar=$(cygpath -w -a $jar) CP="${CP};$cygjar" done
と修正する必要がある。(cygpathって各環境用にパスを変換するコマンドがあるのね。)
最後に、
この辺のCygwin環境の考慮はEC2側のec2-cmdとかではちゃんとされてるんだけど、どうもCloudWatchのコマンドラインツールでは対応されてない模様。