5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AppFlow を使って、Google Analytics 4 から S3 にデータを連携してみた

Last updated at Posted at 2023-01-02

はじめに

Amazon AppFlow では、2022 の re:Invent で 22 個の新しいコネクタが発表されました。この新しい 22 個のコネクタの中には、Google Analytics 4 も含まれています。Google Analytics 4 に蓄積されているデータを、データ分析に活かしていきたいと思われている方もいるのではないでしょか。

Amazon AppFlow を使って Google Analytics 4 のデータを、Amazon S3 といった他のデータストアに連携することが出来ます。今回は、Google Analytics 4 のデータを、Amazon S3 に定期的に csv で出力する方法を紹介します。

Google Cloud : API の有効化

Google Analytics 4 からデータを取得する API の有効化がまずは必要です。Google Cloud の画面を開きます。

この記事では、検証用に 新たな Project を作成します。

image-20221231144729669.png

適当に名前を付けて Project を作成します。

image-20221231144808738.png

作成した Project を選択します。

image-20221231145101797.png

Google Analytics の API を有効化するため、有効な API とサービス を選びます。

image-20221231145137990.png

API とサービスの有効化を選択します。

image-20221231145232380.png

検索ボックスで google analytics と入れて検索します。

image-20221231145338499.png

以下の 3 つを有効化します。

image-20221231145421647.png

各 3 つの API で、それぞれ有効にしていきます。

image-20221231145445001.png

Google Cloud : OAuth 同意

次に、Google Cloud の OAuth 同意画面で、Google Cloud 側で利用できる API スコープなどを定義していきます。

User Type で外部を選択して、作成を押します。

image-20221231145929746.png

適当に名前とメールアドレスを入れます。

image-20221231150118172.png

ドメインの追加を押します。

image-20221231150146561.png

amazon.com を入れて、次に進みます。

image-20221231150241345.png

スコープを追加または削除を押します。

image-20221231150345268.png

Google Analytics API の readonly なスコープを指定します。

image-20221231150514010.png

次へを押します。

image-20221231150612172.png

テストユーザーの Add Users を押します。

image-20221231151718470.png

適当に追加します。

image-20221231151755319.png

次へを押します。

image-20221231150715864.png

これで、OAuth 同意ができました。

Google Cloud : OAuth 2.0 client ID を生成

AppFlow から Google Analytics の API を呼びだすために、認証情報の作成を押します。

image-20221231150936562.png

適当に名前を指定します。

image-20221231151017169.png

次の 2 つの URL を入力します

https://console.aws.amazon.com

https://ap-northeast-1.console.aws.amazon.com/appflow/oauth

image-20221231151116001.png

これで画面にクライアント ID とクライアントシークレットが表示されます。これは後で使うので、メモっておきます。

image-20221231151301249.png

AppFlow 作成

メインテーマの部分です。AWS のマネージメントコンソールで、Create Flow を押します。

image-20221231143412291.png

適当に Flow の名前を入力します。

image-20221231143447020.png

Next を押します。

image-20221231143503775.png

Source で Google Analytics 4 を選択します。

image-20221231143543191.png

Connect を押します。

image-20221231143606378.png

Google Cloud 側で生成した Client ID や Client Secret を入力して、Connect を押します。

image-20221231151852853.png

選択

image-20221231151624613.png

テスト用なので、このまま続行を押します。

image-20221231151951999.png

続行を押します。

image-20221231152022331.png

Connection が作成されました。

image-20221231152113949.png

Google Analytics では、2 つの Object からデータを取得する対象を選びます。使い方的に、Core Report の方が一般的な選択肢だと思います。

  • Real-Time Report : Google Analytics で直近 30 分のデータのみが保存されている。それ以前のデータは消える
  • Core Report : スタンダードな Google Analytics のデータを取得。リアルタイムなデータは含まれない

image-20221231154503494.png

今回は、Core Report の方を選択します。

image-20221231155339814.png

出力先の S3 バケットやファイル形式を指定します。

  • ファイル形式は、JSON, CSV, Parquet から指定可能

image-20221231155453480.png

Flow の実行タイミングを、以下の 2 種類から選択が出来ます。

  • Run on demand : 一回の実行
  • Run flow on schedule : 定期実行

image-20221231155734809.png

定期実行を選んだときに、カスタマイズ可能な項目を整理します。

  • Repeats : 毎週、毎日、毎月から選択できる。一番短い期間は 1 日。1 時間ごとに実行といったことは出来ない。
  • Transfer mode : Full transfer (全データを毎回転送する) もしくは、Incremental transfer (差分データの転送) を選択可能

image-20221231160140286.png

Incremental transfer (差分転送) を選択したときに、どのように差分か判断するかというと、start_end_date という項目を使って判断される (らしい)。このタイムスタンプフィールドを基に判断するとのこと。選択肢は start_end_date しかない。

image-20221231160615622.png

以下のように、1 日 1 回の定期実行、かつ、差分転送を選択してみます。

image-20221231160749024.png

どんなデータを取得対象にするか選択できます。Map all fields directly の選択肢がありますが、2022年12 月現在選択するとエラーになります。Service Quota に引っかかりエラーになります。

image-20221231162849433.png

Service Quota について、次の Document で記載されています。

上記の Document に書かれている通り、dimensions や metrics についての同時取得可能な上限が記載されています。1 個の flow run あたり、9 個の dimensions、10 個の metrics が上限です。Map all fields directly を選択するとエラーになります。(複数の flow を定義することで、上限を超えた取得は出来そう・・・?未確認)

ということで、Quota に収まるように、Metric と Dimension を選びます。

image-20221231170549295.png

S3 に格納するときに、パーティショニングを意識した格納パスを指定可能です。Daily の指定ででやってみます。

image-20221231163002476.png

フィルター設定もありますが、何も設定を入れずに Next を押します。

image-20221231163046917.png

Create flow を押して、flow を作成します。

image-20221231163131778.png

Activate Flow

image-20221231163148033.png

Status が Active になりました。Last run は空白です。

image-20221231163340827.png

実行内容確認

スケジュールが来た後に確認すると、Last run に日付が表示されています。

image-20221231174055589.png

Run history の画面を開くと、正常に実行が出来ていることがわかります。

image-20221231174119949.png

実際に、S3 Bucket にファイルが生成されています。

image-20221231171303107.png

このファイルの中身は、指定したとおり csv ファイルになっています。

"totalUsers","newUsers","itemViewEvents","activeUsers","date"
"221","129","0","177","20221221"
"183","85","0","139","20221215"
"182","81","0","132","20221222"
"174","55","0","126","20221206"
"174","67","0","124","20221216"
"172","58","0","114","20221214"
"167","69","0","127","20221209"
"162","39","0","95","20221205"
"162","64","0","115","20221220"
"160","52","0","111","20221208"
"156","53","0","103","20221223"
"153","39","0","92","20221213"
"152","47","0","106","20221207"
"151","43","0","105","20221202"
"149","44","0","92","20221219"
"139","39","0","98","20221212"
"139","62","0","102","20221227"
"137","68","0","100","20221228"
"136","61","0","100","20221226"
"133","35","0","85","20221201"
"80","43","0","63","20221229"
"61","22","0","39","20221211"
"58","32","0","47","20221225"
"57","18","0","36","20221218"
"52","23","0","33","20221204"
"51","13","0","35","20221217"
"51","26","0","37","20221224"
"49","22","0","40","20221230"
"48","21","0","33","20221203"
"31","9","0","17","20221210"
"8","3","0","6","20221231"

付録1 : GA4 から取得可能な項目について

GA4 では、Real-Time Report と、Core Report の 2 つの Object からデータ転送が可能です。それぞれの項目について調査してみます。

image-20221231161149363.png

Core Report を選んだときの取得可能な項目

Core Report は、Google Analytics 4 上のデータを取得する、スタンダード?な選択肢です。Real-Time Report は直近のデータを取得可能なメリットがある反面、直近 30 分を超えたデータは取得できません。Core Report は、それを超えた範囲でデータが含まれています。

AppFlow では、1日1回のスケジュール実行しかできないので、基本的には Core Report の方を利用するのではないかと思います。

Core Report を選んだときに取得可能な項目は、マネージメントコンソールで確認ができます。

image-20221231162638192.png

 

この一覧は、次の Google Cloud の Document に公開されている、API Dimensions & Metrics の 項目と一致しています。項目の意味を調べたいときには、次の Document の Description を見るといいでしょう。

image-20221231162736544.png

Real-Time Report を選んだときの取得可能な項目

Real-Time Report は、Google Analytics 4 上で、直近 30 分のリアルタイムデータを取得できるものです (時間を延ばす方法はあるみたいですが)。

Reat-Time Report を選んだときに取得可能な項目は、マネージメントコンソールで確認ができます。

image-20221231161040334.png

 

この一覧は、次の Google Cloud の Document に公開されている、Realtime Dimensions & Metrics の 項目と一致しています。項目の意味を調べたいときには、次の Document の Description を見るといいでしょう。

image-20221231161540532.png

付録2 : エラー発生

AppFlow を実行したときに、次のエラーが発生しました。

The request failed because the service Source Google Analytics 4 returned the following error: Details: Google Analytics 4 returned error message - Request failed with Status Code: 400, Error Reason: Bad Request, ErrorCode: ClientError.

image-20221231165013904.png

AppFlow で取得する項目を、Service Quota の範囲より少なくすると、正常に実行できました。

image-20221231165434412.png

付録3 : AppFlow で出来るデータ加工

Modify values という項目があります。

image-20221231165501394.png

どんなデータ加工が出来るか見てみると、Mask と Truncate の 2 種類です。データ加工は AppFlow の外側で、Lambda や Glue などで検討するのが良さそうです。

image-20221231165536983.png

検証を通じてわかったこと

参考 URL

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?