re:Invent 2019のKeynoteにて、続々新しいサービスが発表されていますが、自動コードレビュー/アプリケーション動作モニタリングのサービスが紹介されました。
大きく2つのサービスがあるようですが、現状はJavaアプリにのみ対応しているようです。
CodeGuru Reviewer
今までのAWSのベストプラクティスや知見をもとに、GitHubやCodeCommitに登録されているアプリケーションのソースコードをレビューし、結果をPullRequestとして通知してくれるようです。
CodeGuru Profiler
Agentを仕込んでアプリケーションを動作させることで、CPU使用率や遅延などいくつかの項目から分析/可視化してくれ、さらにパフォーマンス問題がある場合には自動的にそれを識別し、修正方法を提案してくれるサービスのようです。
料金はそれなり、ご利用は計画的に
料金は「$0.75 per 100 lines of code scanned per month」とのこと。100ラインをスキャンさせていたら月額0.75ドル。それなりにかかりますね。値下げを期待。
使ってみた
CodeGuru Reviewer
手元に大したコードがないので、以前作成したDynamoDB Viewer用Javaアプリケーションを対象としてかけてみたいと思います。
非常に簡単にGitHubと連携することができます。で、登録後しばらく待ちましたが特に通知などは来ず。FAQによると「指摘するものがないと通知もない」らしいです。使い方を誤ったのか指摘項目がなかったのかはわからず。。。
CodeGuru Profiler
こんな感じのDynamoDBをスキャンしてくれるWebアプリケーションを対象にプロファイリングしてみました。
pom.xmlとgradleファイルどちらかに追記が必要になりますが、上記のアプリはMavenでビルドしていたため、以下の項目追記が必要になりました。
repositoriesの定義
<repository>
<id>codeguru-profiler</id>
<name>codeguru-profiler</name>
<url>https://d1osg35nybn3tt.cloudfront.net</url>
</repository>
dependenciesの定義追加
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>codeguru-profiler-java-agent</artifactId>
<version>0.1.0</version>
</dependency>
また、Mainメソッドに実装も必要になります。公式ページに追加する内容が書いてありますが、今回は以下の内容を追記しました。
import software.amazon.codeguruprofilerjavaagent.Profiler;
new Profiler.Builder()
.profilingGroupName("sample-profiling-group")
.build().start();
この状態で実行してしばらく操作すると、以下のようなログが出力されました。
2019-12-04 08:48:25.781 INFO 38529 --- [Amazon-Profiler] s.a.c.ProfilingCommand : Attempting to report profile data: start=2019-12-03T23:43:24.789Z end=2019-12-03T23:48:25.781Z force=false memoryRefresh=false numberOfTimesSampled=301
2019-12-04 08:48:26.657 INFO 38529 --- [Amazon-Profiler] s.a.c.ProfilingCommand : Successfully reported profile
2019-12-04 08:53:28.626 INFO 38529 --- [Amazon-Profiler] s.a.c.ProfilingCommand : Attempting to report profile data: start=2019-12-03T23:48:28.300Z end=2019-12-03T23:53:28.625Z force=false memoryRefresh=false numberOfTimesSampled=300
2019-12-04 08:53:29.269 INFO 38529 --- [Amazon-Profiler] s.a.c.ProfilingCommand : Successfully reported profile
2019-12-04 08:58:31.283 INFO 38529 --- [Amazon-Profiler] s.a.c.ProfilingCommand : Attempting to report profile data: start=2019-12-03T23:53:31.011Z end=2019-12-03T23:58:31.283Z force=false memoryRefresh=false numberOfTimesSampled=300
2019-12-04 08:58:32.064 INFO 38529 --- [Amazon-Profiler] s.a.c.ProfilingCommand : Successfully reported profile
2019-12-04 09:03:33.529 INFO 38529 --- [Amazon-Profiler] s.a.c.ProfilingCommand : Attempting to report profile data: start=2019-12-03T23:58:33.396Z end=2019-12-04T00:03:33.528Z force=false memoryRefresh=false numberOfTimesSampled=300
2019-12-04 09:03:34.222 INFO 38529 --- [Amazon-Profiler] s.a.c.ProfilingCommand : Successfully reported profile
実際にCodeGuru Profilerを見に行くと、分析が始まっているようでした。
ほとんどがorg.apacheなどのフレームワーク部分なので、これらを除外しないと実際の実装部分が見えないですね。
いったん「org.apache.*」を除外設定すると、Spring Frameworkの内容は残っているものの、ある程度見える形にはなってきました。CPU使用率や遅延に関する情報が乗るようなので、これを確認しながらプロファイリングするようです。
まとめ
大したアプリケーションではないので、AWSが載せているようなきちんとした分析はできませんでしたが、それでも簡単にProfilingの可視化やレビューをしてもらえるのはありがたいサービスです。とはいえ、料金も料金なので、ご利用は計画的に、ですね。