Develop with pleasure!

福岡でCloudとかBlockchainとか。

CloudWatchのコマンドラインツールのCygwin対応

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のコマンドラインツールでは対応されてない模様。