ヤマムギ

growing hard days.

*

Backlogの実績工数をAmazon QuickSightでの可視化 – 仕組み編

   

Backlogの実績工数をAmazon QuickSightで可視化してわかったことに書きましたように、Backlogの実績工数を作業種別か期日別に集計してAmazon QuickSightで円グラフ、棒グラフで見えるようにしました。

次のような設計です。

それぞれの設定内容を書き留めておきます。

SQSキューの作成

backlog_s3と、backlog_teamsという2つのSQS標準キューとそれぞれのデッドレターキュー用のキューを作成しました。

メッセージの保持期間を14日として、再処理ポリシーで最大受信数を10としてデッドレターキューを指定したくらいで他はデフォルトのまま作りました。
可視性タイムアウトも処理としては30秒あれば充分と思うのでデフォルトの30秒のままにしてます。

SNSトピックの作成

BacklogというSNSトピックを作成して、サブスクライバーにbacklog_s3と、backlog_teamsの2つのSQSキューを指定しました。

Backlogから更新情報をうけとって、SNSトピックへ通知するLambda関数

最初のLambdaはBacklogからWebhookで送信されたデータを受け取って、SNSトピックへメッセージとして送信しています。

API Gatewayをトリガーにして(これはAPI Gatewayを作るときに設定しました)、SNSとログを書き出すためにCloudWatch Logsへの権限をIAMロールにアタッチするIAMポリシーで定義しています。

Backlogでチケットが更新されたときに、このLambdaに更新データを渡したいので、BacklogのWebhookを受けて、Lambdaにイベントデータを渡すAPI Gatewayを設定します。

BacklogのWebhookを受けるAPI Gateway

POSTにLambdaを指定してデプロイしただけです。
デプロイしてできたステージのURL呼び出しのAPIエンドポイントをBacklogのWebhookに設定します。

Backlog側の設定

次にBacklogでWebhookの設定をします。
プロジェクト管理者権限が必要です。

[プロジェクト設定] – [インテグレーション]でWebhookを設定して、作成済のAPI GatewayエンドポイントをWebHook URLに指定します。
Webhook名と説明は任意で、見て分かるものにしておきます。

これで、Backlogでチケットが追加/更新されるごとに、SQSキューまでメッセージが届きます。

SQSのメッセージを受信してS3にデータを格納するLambda

コードはこちらです。

Lambdaで環境変数はS3のバケット名を設定しています。

Backlogのデータから必要なデータだけを取得してS3にjsonで書き出してます。
そのままでも良かったのですがデータ容量を抑えようというのと、扱いやすくするためです。

S3のオブジェクトキーは、BacklogのプロジェクトIDと課題チケットのキーにしてます。
こうすることで更新時に新しいデータを作るのではなく、S3側も更新してます。
いつ誰が何を更新したかという履歴は、今回はAWS側では要らないとしてます。

追加、更新された課題チケットのjsonデータはS3に格納されていきます。

S3のライフサイクルルールでは、頻繁に見ても直近月か先月ぐらいまでだろうなあということで、70日経過した課題を1ゾーンIAストレージに移動してます。
なぜ、標準IA(低頻度アクセス)ストレージではなく、1ゾーンIAにしているかというと、元データはBacklogにあるので、万が一S3に置いているデータにアクセスできなくなったとしても、Backlog側から復旧ができるからです。
1ゾーンな分コストも下がります。

これでS3バケットにデータが溜まっていくようになりました。
次は可視化です。

S3バケットのデータをAthenaでテーブル構造に

AthenaのCREATE TABLE文はこちらです。

これは、ゼロから書かなくても、マネジメントコンソールのAthenaで create tableメニューから、GUIで設定すれば、このCREATE TABLE文が生成されます。

途中でもしも、カラムとかをポチポチやってるのが辛くなったら、途中まで設定してCREATE TABLE文を生成して、続きを書いてもいいと思います。

できたテーブルのレコードを確認してみます。

SELECTが実行できました。

次はいよいよ最後の手順の可視化です。

QuickSightでAthenaデータセットを可視化する

New Datasetで、Athenaを選択しました。

今回はSPICEは使わずにダイレクト検索にしました。
理由は後述します。

ビジュアライズを作っていきますが、ここはドラッグ & ドロップで直感的に作成できます。

フィルターでは、日付と担当者のフィルターを追加しました。
この日付ですが、S3バケットでも、Athenaでも文字列として扱っていたのですね。
このままではQuickSightで文字列になってしまうので、範囲や大小で比較検索ができないです。
Athenaでビューを作って日付に変換してそれをQuickSightでデータセットにしても良さそうです。

今回はQuickSight側でCalculation Fieldを使いました。
このCalculation Fieldの関数がSPICEでは使えないものがあって、今回のparseDateがそうです。
ですので、ダイレクト検索にしています。

文字列の日付を parseDate(日付フィールド, ‘フォーマット’)で変換しています。

これで可視化ができました〜。

分析して仕事の効率化を進めます!

(長くなりましたのでTeamsへの通知は別エントリに書きます)


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第2版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS, ProjectManagement ,

ad

ad

  関連記事

EC2インスタンスが到達不能になって復旧してMackerelで監視し始めた

きっとばりばり使っておられる方ならよくある事なんだろうけど、はじめて体験したので …

「JAWS-UG in AWS Cloud Roadshow 2017 大阪」で運営をしました

AWS Cloud Roadshow 2017 大阪のナイトイベントで、「JAW …

EC2 VyOSで/etc/resolv.confを設定しました

EC2でVyOSを起動してSSHで接続して確認していたところ、どうもVyOSから …

re:Invent 徒歩記(シアトルも)

このブログは、AWS re:invent 2018 Advent Calenda …

Amazon S3オブエジェクトへのリクエストをCloudTrail, Athenaで識別

こちらCloudTrail を使用した Amazon S3 リクエストの識別に書 …

AWS Well-Architected フレームワークによるクラウド ベスト プラクティスのセッションを聞いたので自アカウントの環境を確認してみる

AWS Summit Tokyo 2017で「AWS Well-Architec …

Redmine 3.0.0 のメールサーバーでGoogleApps SMTPサーバーを利用する

Redmineのメール通知サーバーとしてGoogleAppsを使用する方法です。 …

WordPressのwp-login.php , xmlrpc.phpへのアクセスをAWS WAFで接続元IPアドレスを制限する

AWS CloudWatch LogsエージェントでAmazon EC2上のNg …

AWS Lambda(Python)からZoom投票作成

以前、Zoomの投票(アンケート)をAPI経由で作成するというブログで書きました …

AWS Certificate Manager(ACM)メール検証をDNS検証の証明書に差し替えました

ブログの証明書 このブログの証明書の有効期限があと1週間です。 証明書はAWS …