私の戦闘力は53万です

awsとgcpについて書きます

Amazon CodeGuruハンズオン(JAWS-UG千葉)に参加しました

f:id:remmemento:20211112004547p:plain Amazon CodeGuruハンズオン(JAWS-UG千葉)に参加しました。
千葉と言いつつも、オンライン開催をされていて全国から参加し放題です。
今回はCodeGuruのハンズオンがあり、
なんとAWS所属の方々もスピーカー参加されておりました。
(しかもBlackbeltと同じkanasugiさん!)
またハンズオンのシナリオが公式のworkshopかと思うほど
きれいで学びになったのでブログでシェアできればと思い書いてみます。

jawsug-chiba.connpass.com

参考資料

ハンズオンの資料公開OKをもらったので
資料のリンクを貼っておきます。 この資料があればハンズオンできますので興味ある人はぜひ。 drive.google.com ハンズオン内で、コピペしたい箇所のテキストはこちら drive.google.com

資料前半の説明部分はBlackbeltに似た説明があるので
併せて聴くと良いと思います。 www.youtube.com

CodeGuru機能概要

今回のハンズオンではCodeGuruの下記2つの機能を使いました。

CodeGuru Reviewer

f:id:remmemento:20211111232449p:plain こちらはソースのレビューを実施し、改善箇所を指摘してくれる機能です。
今回のシナリオではCodeCommitでPRをして、
その際にCodeGuruがレビューをしてくれる流れになっています。
また、今回のハンズオンでは実施していませんが、
既存のGithub等のリポジトリをレビューをかけるようなこともできます。

CodeGuru Profiler

f:id:remmemento:20211111232617p:plain こちらは実稼働しているアプリケーションの実績をもとに、
どのコード部分がリソース消費に影響を与えているかを解析する機能です。
本ハンズオンでは、EC2上でAgentが動作し、 EC2の稼働状況のデータがCodeGuru Profilerに送られ、 その結果を見るシナリオがあります。

ハンズオンの概要

ハンズオンは2部構成で、Part1はCICDのパイプラインを作成します。
cloud9からcode系サービスを利用し、EC2にdeployできる環境を作ります。
こちらは前準備のようなもので、cfnを使って展開します。 f:id:remmemento:20211111230705p:plain

Part2で主役のCodeGuruを利用します。
初期のサンプルソースではCodeGuruから指摘が出るのですが、
その指摘部分を改善修正することで、
より指摘が少なくなる、といった具合で
ハンズオンのシナリオが組まれています。 f:id:remmemento:20211111230733p:plain

CodeGuru Reviewerを使ってみて

ハンズオン用のサンプルソースでは予め指摘が出るようになっていました。
例えば、AWSのベストプラクティスに反する箇所の指摘
(アクセスキー使わないでRole使って)だったり、
f:id:remmemento:20211111233815p:plain

一般的なJavaの指摘をしてくれます。
f:id:remmemento:20211111233843p:plain

指摘内容は理解しやすいよう
ほぼ全てリンクが付与されていました。
AWSの使い方に関する指摘は、AWSの公式ページのリンクが付与されています。

CodeGuru Profilerを使ってみて

Profilerは動作すると、下記のようなステータスが見れます。

f:id:remmemento:20211111234338p:plain リソースの利用状況を可視化でき、
例えば上記でVisualize CPUを押すと下記のような画面に遷移します。

f:id:remmemento:20211111234648p:plain 情報てんこ盛りですが、
libraryのコード(緑色)と自分のコード(青色)をひとめで区別できたり、
推奨事項を確認できたりと
実際の稼働状況から得られる情報が良い感じで集約されています。
便利ですね。

PythonでもCodeGuru Reviewerを使ってみた

ハンズオンは上記のような流れですが、
pythonでもやってみたかったので
ハンズオン終わった後に、CodeGuru Reviewerで
自分のgithub上のpythonのソースをレビューしてみました。

温度感を表すために、下記1個だけ指摘のケースを書きます。 f:id:remmemento:20211112000546p:plain learn moreのリンク先はpythonの公式ドキュメントで下記でした。 docs.python.org 指摘内容としてはget()の第二引数にNoneをわざわざ指定する必要ないよ、といった指摘でした。 修正してPRすると、指摘が解消されていることが確認できました。 このように一般的なベストプラクティスのような部分を指摘してくれるので良いですね。
これに慣れると、人間は業務ロジックのような
本来の部分に集中できるのかなと思います。

修正前

 eventArn = event.get('arn', None)

修正後

 eventArn = event.get('arn')

さいごに

今回ハンズオン実施頂いた主催者の方々、ありがとうございました!

JAWS-UG千葉支部のハンズオン、
いつも細部まで綺麗で、よく勉強させてもらっています、ありがとうございます。
今後も参加させてもらいます!