##やりたいこと
Lambdaで実行するJavaで、CloudWatchに登録してある引数を取得する。
###背景・経緯
前回の記事で作成したEC2の起動停止するLambdaファンクションを、
CloudWatchEventsのCronで、8時、9時、17時、18時など複数の時間帯で起動するようにしていた。
が、どのインスタンスをどの時間に起動するようにしたか忘れてしまい、
いちいちCloudWatchEventsに登録した引数を確認しなければならなかった。
面倒だったので、引数を取得するファンクションを作成した。
(メモを取ると、登録している引数とメモを同期させないといけないので、避けたかった。)
##AWS Lambda で Javaを使う 目次
・Eclipse準備編
・登録実行編(いつか)
・実装編 - EC2を止める/立ち上げる
・実装編 - CloudWatchの引数を確認する
・実装編Tips - ReagionとInstanceIDからInstance名を取得する
とりあえずクラス作成
CloudWatchEventsをごにょごにょする
###CloudWatchEventsオブジェクトを作成する
// CloudWatchEventsオブジェクトを作成
AmazonCloudWatchEvents event = AmazonCloudWatchEventsClientBuilder.defaultClient();
###CloudWatchEventsのルールを取得する
ListRulesResult retRule = event.listRules(new ListRulesRequest());
for(Rule rule : retRule.getRules()) {
// rule.getName()、rule.getDescription()
}
コンソールでいうところのこの部分
メソッド名通り、ルールの名前と説明を取得できる。
###CloudWatchEventsのルールからターゲットを取得する
// get target information from rule
ListTargetsByRuleRequest req = new ListTargetsByRuleRequest().withRule(rule.getName());
ListTargetsByRuleResult retTarget = event.listTargetsByRule(req);
List<Target> cloudWatchTargets = retTarget.getTargets();
for (Target target : cloudWatchTargets) {
// do loop each cloud watch rule's target
}
###CloudWatchEventsのルールからターゲットの中からファンクション名で絞り込む
target.getArn()
これで、各ターゲットが下記のような形で返却される
arn:aws:lambda:region:xxxxxx:function:functionName
なので、endWithで絞り込む
if (target.getArn().endsWith("絞り込みたいファンクション名")) {
//
}
コンソールでいうところのこの部分(このコンソール画面の場合だとそもそも一つしかないので、やってもやらなくてもどちらでもいいのだけども。)
###CloudWatchEventsのルールからターゲットの中から引数(入力)を取得する
target.getInput()
// cloudWatch のInputをjsonで記載しているので jsonからbeanに変換
SomethingBean cloudWatchInput = Jackson.fromJsonString(target.getInput(), SomethingBean.class);
あとは、今まで取得したCloudWatchEventsのルール名、説明、引数など出力したい形に整形して、outputに返してあげれば終了。
今回追加したPOM
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-cloudwatch</artifactId>
<version>1.11.99</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-events</artifactId>
<version>1.11.719</version>
<scope>compile</scope>
</dependency>