19
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

Amazon CodeGuruを試してみた

re:Invent 2019のKeynoteにて、続々新しいサービスが発表されていますが、自動コードレビュー/アプリケーション動作モニタリングのサービスが紹介されました。

スクリーンショット 2019-12-04 3.12.19.png

大きく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アプリケーションを対象としてかけてみたいと思います。

スクリーンショット 2019-12-04 8.59.02.png

非常に簡単にGitHubと連携することができます。で、登録後しばらく待ちましたが特に通知などは来ず。FAQによると「指摘するものがないと通知もない」らしいです。使い方を誤ったのか指摘項目がなかったのかはわからず。。。

スクリーンショット 2019-12-04 8.59.11.png

CodeGuru Profiler

スクリーンショット 2019-12-04 8.58.22.png

こんな感じのDynamoDBをスキャンしてくれるWebアプリケーションを対象にプロファイリングしてみました。

pom.xmlとgradleファイルどちらかに追記が必要になりますが、上記のアプリはMavenでビルドしていたため、以下の項目追記が必要になりました。

repositoriesの定義
```xml

codeguru-profiler
codeguru-profiler
https://d1osg35nybn3tt.cloudfront.net


dependenciesの定義追加
```xml
        <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を見に行くと、分析が始まっているようでした。

スクリーンショット 2019-12-04 8.59.29.png

ほとんどがorg.apacheなどのフレームワーク部分なので、これらを除外しないと実際の実装部分が見えないですね。

スクリーンショット 2019-12-04 8.59.34.png

いったん「org.apache.*」を除外設定すると、Spring Frameworkの内容は残っているものの、ある程度見える形にはなってきました。CPU使用率や遅延に関する情報が乗るようなので、これを確認しながらプロファイリングするようです。

スクリーンショット 2019-12-04 9.00.00.png

まとめ

大したアプリケーションではないので、AWSが載せているようなきちんとした分析はできませんでしたが、それでも簡単にProfilingの可視化やレビューをしてもらえるのはありがたいサービスです。とはいえ、料金も料金なので、ご利用は計画的に、ですね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
19
Help us understand the problem. What are the problem?