Amazon AppFlowでGoogleAnalyticsのデータ連携に苦戦している話

GMSでインフラエンジニアないしデータエンジニアをやっているみゅーみくすです。
ちょうどアドベントカレンダーの時期になったのでマイナーですがタイトルについて書きます。
記載する内容は執筆時点となります。
[https://qiita.com/advent-calendar/2022/aws](https://qiita.com/advent-calendar/2022/aws)

## 結論：躓きポイント
まだ中途半端な状態ですがご了承下さい。
- マネジメントコンソールから作成するとエラーになるのでCLI等から作成する必要がある（解決）
- AppFlowをTerraformで記載するにはawsプロバイダのバージョンを4系にする必要がある（未実施）
- Google Analyticsのメトリクスについて理解が必要
- Goal周りにハマった（未解決）
- データ連携後jsonをフラット化する必要がある（未実施）
    - [https://aws.amazon.com/jp/blogs/news/analyzing-google-analytics-data-with-amazon-appflow-and-amazon-athena/](https://aws.amazon.com/jp/blogs/news/analyzing-google-analytics-data-with-amazon-appflow-and-amazon-athena/)

## 前置き
みなさんGoogle Analyticsの分析はどのように行っていますか。
Google Analytics内でしか行っていないケースもあるでしょうし、既にデータパイプラインを構築しているかもしれません。
GA4対応によってBigQueryとの連携がより楽になるのでそれでもいいかもしれません。

弊社はGA4は対応中でUAを使っており、データ基盤はAWS Athenaに寄せています。そろそろGoogle Analyticsのデータもデータ基盤で分析できるといいよねということで、タイトルの取り組みを始めました。

## AppFlowとは
> Amazon AppFlow は、Salesforce、SAP、Zendesk、Slack、および ServiceNow などの SaaS (Software-as-a-Service) アプリケーションと、Amazon S3 や Amazon Redshift などの AWS のサービスとの間で、たった数回のクリックでデータを安全に転送できるフルマネージド統合サービスです。
[サービスページ](https://aws.amazon.com/jp/appflow/)より

AppFlowを使うことで、お手製のプログラムを書かなくてもSaaS間のデータ連携がフルマネージドでできます。実際にSalesforceからのデータ取得で利用しており重宝しています。

実際にAppFlowを使ったGoogle Analytics→S3の連携は以下の記事が参考になるのですが、先述の通り躓きポイントもあるので紹介します。
- [https://dev.classmethod.jp/articles/googleanalytics-s3-appflow-tutorial/](https://dev.classmethod.jp/articles/googleanalytics-s3-appflow-tutorial/)
- [https://aws.amazon.com/jp/blogs/news/analyzing-google-analytics-data-with-amazon-appflow-and-amazon-athena/](https://aws.amazon.com/jp/blogs/news/analyzing-google-analytics-data-with-amazon-appflow-and-amazon-athena/)

## 躓きポイントの詳細

### マネジメントコンソールから作成するとエラーになる
UIでポチポチと選んでいくとこのようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692378/f11bc32d-e6ec-3ec4-a81c-4a5522a3165b.png)


確認画面での表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692378/84485cd1-ee9f-cecc-5c8f-821cc1a5f116.png)

作成されたフローを実行するとエラーになってしまいます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692378/a2ba294e-09a1-a65e-dc55-f8c665853674.png)

AWSのサポートに確認したところ、ビューのID（以下の赤塗した箇所）を指定する必要があり、AWS側で対応するとのことです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692378/e74b8187-a471-6529-e17f-26909f311366.png)

ということで、[aws cliのcreate-flowコマンド](https://docs.aws.amazon.com/cli/latest/reference/appflow/create-flow.html)でビューのIDを指定しフローを作成することで回避します。
（aws cliを使えば回避できそうな気配は感じていたが、ビューIDを指定するところは気付けませんでした。よくよく考えれば日本語のビュー名は一意ではないので気付けた気もする）

```shell
aws --profile data-analytics appflow create-flow \
    --flow-name GoogleAnalytics \
    --trigger-config '{
                "triggerType": "OnDemand"
            }' \
    --source-flow-config '{
                  "connectorType": "Googleanalytics",
                  "connectorProfileName": "GoogleAnalytics",
                  "sourceConnectorProperties": {
                      "GoogleAnalytics": {
                          "object": "<XXXXXXXXX>"
                    }
                }
            }' \
    --destination-flow-config '[{
                "connectorType": "S3",
                "destinationConnectorProperties": {
                    "S3": {
                        "bucketName": "<bucketName>"
                    }
                }
           }]' \
    --tasks '[
                {
                    "sourceFields": [],
                    "taskType": "Map_all",
                    "taskProperties": {}
                }
            ]'
```

フローさえ作成してしまえば、細かい部分はマネジメントコンソールで編集も可能です。

### AppFlowをTerraformで記載するにはawsプロバイダのバージョンを4系にする必要がある

弊社ではIaCにTerraformを使用しています。ある程度形が決まったところで原則コード化していきます。
AppFlowもTerraformで対応しているのですが、awsプロバイダのバージョン4系にアップデートする必要があります。
[https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/appflow_flow](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/appflow_flow)

S3の破壊的変更があり、必要になったからついでにアップデートするくらいのノリではでき無さそうです。
[https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-4-upgrade](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-4-upgrade)

現在はバックログに積み、追って全体的に4系にアップデートする予定となっています。

### Google Analyticsのメトリクスについて理解が必要
データアナリストとかの人なら分かる人もいるし、Google Analyticsの画面だけ見ていると意識しにくい部分です。

dimensionsとmetricを組み合わせて欲しい情報を取出していきます

ここを見ればなんとかなるはず
[https://ga-dev-tools.web.app/dimensions-metrics-explorer/](https://ga-dev-tools.web.app/dimensions-metrics-explorer/)

ページ（パス）ごとのビューを日時で取得したいならこんな感じ（多分）

- dimensions
    - ga:day
    - ga:year
    - ga:month
    - ga:hostname
    - ga:pagePath
- metric
    - ga:pageviews

### Goalの取得周りにハマった（未解決）

Google Analyticsではコンバージョンを測定するために、Goal（目標）というのを設定できます。
例えば、LP→申し込みページ→サンクスページ など特定の経路をたどった場合1カウントのように設定できます。

こちらは以下で設定できるらしいのですが、XXのところには目標番号（最大20までの連番）が入るはずのようです。

> Goal XX Completions
ga:goalXXCompletions
The total number of completions for the requested goal number.
> 

マネジメントコンソールから上記項目を指定しようとするとXXのまましか選べません。AWS側がリファレンスベースでAPIを一覧表示しているような挙動です。（これは問い合わせしていません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692378/1ff4a137-349f-cbea-6a4a-5d0c1d145926.png)


仮設で申し訳ないですが、CLIないしTerraformから`ga:goal1Completions`決め打ちすればうまくいくのではないかと踏んでいます。

ただし先述の通りTerraformのawsプロバイダアップデートが必要となり、こちらもまだ試せていません。

### データ連携後jsonをフラット化する必要がある（未実施）

取得されるデータはjson形式となります。更に増分転送を選択しても謎に日時でファイルが生成されるようになっており、Athenaで分析するには、ひとまとめのParquetなどに置き換えたいところです。

おそらく、この通り変換用のLambdaを用意すればできるはずです。ここは現時点では手が回らず未実施の状態です。

[https://aws.amazon.com/jp/blogs/news/analyzing-google-analytics-data-with-amazon-appflow-and-amazon-athena/](https://aws.amazon.com/jp/blogs/news/analyzing-google-analytics-data-with-amazon-appflow-and-amazon-athena/)

もしくはこのような形でPythonで処理する手もあるかと思います。
[https://qiita.com/5zm/items/1a06de3e21ff274a97a6](https://qiita.com/5zm/items/1a06de3e21ff274a97a6)

## 終わりに

ぼちぼちGoogle Analyticsもデータ基盤に取り込んで一気通貫で分析するぞーAppFlowを使えば簡単だな。
と見積もっていたら様々な躓きポイントがありシュッと終わりませんでした。
現時点では他のタスクを優先していますが、落ち着いたら再度実施し本記事をアップデートできればと思っています。