本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「【Microsoft Fabric】Amazon S3 にある Amazon SES のメールログを可視化してみる」を再編集したものです。
こちらの記事の続編です。Amazon S3から直接データを参照してMicrosoft Fabricで可視化をしてみます。
はじめに
Microsoft Fabricというのは、Power BI、Azure Synapse、Azure Data Factoryなどを内包したオールインワン分析ソリューションのSaaSです。Azureで分析用のシステムを構築しなくても Microsoft Fabricを使えば割とすぐに分析が可能です。データの蓄積は従来通り実施し、分析だけSaaSとして切り離したイメージですかね(多分)。
イメージ図
今回やることのイメージ図です。
Fabric容量を作成
30日間の無償版は今回利用しない手順としてます。
AzureポータルからFabric容量を作成します。サイズに気を付けないととんでもない額を請求されるのでご注意ください。
今回はF4を選択しています。F2を過去に使っていた時期があるんですが、すぐに性能の制限に達して検証どころではなかったので。
作成した容量をFabricで指定する
Microsoft Fabricにアクセスして右上の歯車アイコンをクリックし、管理ポータルをクリックします。
ファブリック容量タブをクリックして移動し、先ほど作成したFabric容量をクリックします。
一番下にある「この容量に割り当てられているワークスペース」を開いてワークスペースを割り当てます。
Amazon S3のファイルをFabricで表示する
Microsoft OneLakeのショートカットを使います。ショートカットはAzureやAWSなどにあるデータソースに接続し、Fabric側で様々なデータを管理できるようにする仕組みです。
Amazon S3への接続
LakeHouseを作成します。
S3のショートカットを作成します。S3接続用のIAMの作成と必要な権限の付与をあらかじめ実施しておきます。
KQLデータベースの準備
データベースの作成
データベースを作成します。
テーブルの作成
イベントタイプがDelivary用のテーブルを作成します。
ソースではソースタイプをファイルに指定します。S3からイベントタイプがDeliveryのメールをエクスポートしてアップロードします。
OneLakeにショートカット作ったのでそこから参照すればいいじゃん?と思ったんですけど、ログファイルに拡張子が無いせいか参照できませんでした(僕が知らないだけでできるのかもしれませんが)。
ファイル内容の構成をもとにテーブル作るだけなので今回は特に気にせずやります。
データ形式をJsonに変更してNested levelsを深くします。ここでは特に削除してませんが、必要のないカラムは消した方がテーブルに取り込まれるデータ量が少なくなるのでなるべく実施した方がよいと思います。
部分的なデータのプレビューに出てきたカラムにいくつかdynamic型があるのでそれらを別のデータ型に変更します。PowerBIに取り込んだ時にdynamic型のままだとうまくできなかったので別のデータ型に変更しています。 テーブル作成後でも以下クエリで変更ができるのでそちらでも大丈夫です。
.alter column ['{テーブル名}'].['{カラム名}'] type=string
また、mail_headers(mail.headers)のカラムはそのままだとうまく値を取り出せないので工夫する必要があります。今回はとりあえず可視化できればいいので特に触れません。
データのコピー (OneLake ⇒ KQLデータベースの対象のテーブル)
Pipelineを作成してOneLakeにあるショートカットからKQLデータベースのテーブルにデータをコピーします。
データの確認
KQLデータベースにデータがコピーされたので確認します。シミュレーターで送ったメールは邪魔なのでWhere句で省いてます。Pipeline詳しくないんですが、Pipelineの中で省く処理を入れれるならそうした方がいいです。後述のPowerBIにて、データの取り込み時に必要のない値は除外できるので手間ですがこちらでも問題ないと思います。その場合はKQLデータベースに取り込まれるデータ量が多くなる点に注意です。
PowerBIで可視化
PowerBI DesktopにてMicrosoft Fabricに接続してKQLデータベースのテーブルデータをインポートします。
イベントタイプがDeliveryのものしか今回試してませんが、Deliveryと同じようにBounce用のテーブルを用意してあげればまとめてPowerBI上にインポートすることができるので、SESから送ったメールのイベントタイプの割合などの視覚化が可能です。
最後に
データ分析面白いです。
多田 祐一朗/FIXER
四日市所属のエンジニア。最近は名古屋でも働いてます。
基盤インフラ経験が少しある。
この連載の記事
-
TECH
責任ある生成AI利用のための「Guardrails for Amazon Bedrock」とは ― AWS re:Invent 2023 -
TECH
同世代エンジニアに刺激を受けた!JAWS-UG「若手エンジニア応援LT会」参加レポート -
TECH
AWS CDKでGuardDutyのRDS保護を有効化しよう(として詰みかけた話) -
TECH
ノーコードで生成AI連携! SlackからAmazon Bedrockのエージェントに質問 -
TECH
Terraform:変数の値が未代入でもインタラクティブな入力を回避する方法 -
TECH
Amazon SESでEメールの送信機能/受信機能を作る手順 -
TECH
Amazon BedrockからWeb上のコンテンツを参照する新機能「Web Crawler」 -
TECH
IAMユーザーのアクセスキーを使わず「IAMロール」を使うべき理由 -
TECH
CX視点で興味深かった「AWS Summit Japan 2024」のセッション -
TECH
AWS EC2でkubeadmを用いたKubernetesクラスターを作ってみたのでメモ -
TECH
AWSアカウントのサインインに「IAM Identity Center」をお勧めする理由 - この連載の一覧へ