LogServiceからMaxComputeへ連携する方法
LogServiceからMaxComputeへ連携する方法
本記事では、LogServiceからMaxComputeへ連携する方法について説明します。
前書き
MaxCompute (旧プロダクト名 ODPS) は、大規模データウェアハウジングのためのフルマネージドかつマルチテナント形式のデータ処理プラットフォームです。さまざまなデータインポートソリューションと分散計算モデルにより、大規模データの効率的な照会、運用コストの削減、データセキュリティを実現します。

少し前になりますが、MaxComputeについての資料をSlideShareへアップロードしていますので、こちらも参考になればと思います。
今回はAlibaba Cloud LogServiceからMaxComputeへデータを連携します(データベース移行)。構成図で、こんな感じです。

共通作業(MaxCompute全体で共通事項)
RAM ユーザー作成&権限付与
もしMaxComputeを操作するユーザがRAMユーザーの場合は以下を実施してください。
RAMより対象のユーザーを選定します。ユーザーが無い場合は新規作成します。 このときにAccessKey IDとAccessKey Secretをメモとして残してください。AccessKey IDとAccessKey SecretはDataWorks DataIntegrationの処理に必要となります。

対象のユーザーには権限ロールとしてAliyunDataWorksFullAccessをアタッチします。 これはDataWorksを操作するためのFull権限です。
DataWorks側にてユーザーごとに読み取り専用や一部プロジェクト・テーブルなどのきめ細かい権限付与ができますが、ここでは割愛します。

今回は、LogServiceからMaxComputeへ連携する方法なので、AliyunOSSFullAccess および AliyunLogFullAccess もアタッチします。
Workspace作成
MaxComputeを操作するためにはワークスペースおよびプロジェクトが必要なので新たに作成します。DataWorksコンソールから 「Create Project」を選択し、起動します。
Modeは「Basic Mode(基本モード)」「と「Standard Mode(標準モード)」の2種類があります。ここは「Basic Mode(基本モード)」として選定します。

続けて、MaxCompute を選定します。料金は初めて操作するなら Pay-As-You-Go(使った分だけ課金) が良いと思います。

MaxComputeに関する必要な情報を設定し、Workspaceを作成します。

同期タスクをサブミットする方法(基本モード(basic mode))
作業の途中で 同期タスクをサブミットする旨のアクションが発生しますが、こちらの手順を参考にいただければ幸いです。
DataWorks DataStdioで、操作が終わったら [Commit to Production Environment] をクリックし開発環境から本番環境へ直接コミットします。

同期タスクをサブミットする方法(標準モード(standard mode))
DataWorks DataStdioの右側にあるProperitiesをクリックします。

プロパティRerunを設定して、[Use Root Node]ボタンをクリックします。

開発環境にサブミットします。

あとは開発環境から本番環境にデプロイします。
Maxcomputeのデータをクエリする方法
DataWorks DataStdioのAd-Hoc Query画面に入って、[ODPS SQL]のノードを作成します。

SQLクエリ文を作成したら、上書き保存してから、Run SQLボタンを押します。
その後、SQLクエリの実行コストらお金が出ますが、ここも考慮のうえ、Run、で実行します。
実行結果としてレコード数が無事表示されます。

(事前準備)LogServiceの準備
まずはOSSコンソールに入って、特定のbucketのもと、OSSのリアルタイムログクエリ機能をアクティブします。
これはOSSアクセスログを生成するものです。
https://www.alibabacloud.com/cloud-tech/doc-detail/99349.htm

これでリアルタイムログクエリ機能が有効になりました。

次はLogServiceコンソールに入ります。OSSログのプロダクト名をメモします。

LogServiceにデータを生成する目的で、OSS Bucketにイメージファイルをアップロードします。

イメージファイルのURLをコピーします。

コピーしたURLをアクセスすることで、LogServiceにてOSSログをリアルタイムで生成してくれます。
これでデータ生成の準備は完了です。

今度はDataWorks側での作業に移ります。
LogServiceをDataWorks DataIntegrationデータソースに追加します。

データソースとしてLogServiceの各種情報を入力し、接続テストを実行します。
LogServiceのEndpoint は 日本リージョンならap-northeast-1.log.aliyuncs.com です。
https://www.alibabacloud.com/cloud-tech/doc-detail/29008.htm

接続テストで問題なければ、Completeボタンをクリックすることで、LogServiceのデータソースが追加されます。
これでLogService側の設定は完了です。

この準備が終わり次第、データを移行してみます。データ移行にはGUIモードとスクリプトモードの2つのパターンがあります。まずはGUIモードで移行します。
スクリプトモードはtemplateな扱いができるため、後日この作業の自動化したい場合、活用できればと思います。
LogServiceをMaxComputeへ移行(GUIモード)
STEP1: workflow作成
DataWorks DataIntegrationから、新規オフライン同期タスクをクリックし、DataStdio画面へ遷移します。
DataStdio画面にて、「Create Node」らダイアログが表示されますが、ここではクローズします。

DataStdio画面にてWorkflowを作成します。

STEP2: DI 同期タスクを作成
同期タスクを作成します。

ソースをLogHubに選択して、Logstoreを選択します。

URLをアクセスした時間を含む時間帯を入力して、Previewボタンをクリックします。

ターゲットをODPSに選択します。

Maxcomputeテーブルを選択します。

すると、自動でマッピングが表示されます。

STEP3: DI 同期タスクを実行
変数を時間帯に入力して、タスクを実行します。
実行時は、引数(Arguments)として、URLをアクセスした時間を含む時間帯を入力します。

タスクが成功すると、Logが表示されます。

あとはAd-Hoc クエリで確認します(手順は上記の共通手順にて記載しています)
select * from nelly01_dev.log_to_odps where ds='20200907';

これにより、GUIモードでLogServiceのデータをMaxCompute Tableへ取り込んだことが確認できました。
MySQLをMaxComputeへ移行(スクリプトモード)
STEP1: workflow作成
DataWorks DataIntegrationから、新規オフライン同期タスクをクリックし、DataStdio画面へ遷移します。
DataStdio画面にて、「Create Node」らダイアログが表示されますが、ここではクローズします。

DataStdio画面にてWorkflowを作成します。

STEP2: DI 同期タスクを作成
同期タスクを作成します。

ソースをLogHubに選択して、Logstoreを選択します。

URLをアクセスした時間を含む時間帯を入力して、Previewボタンをクリックします。

ターゲットをODPSに選択します。

Maxcomputeテーブルを選択します。

すると、自動でマッピングが表示されます。

STEP3: スクリプトモードにスイッチ
Switch to Code Editorボタンをクリックし、スクリプトモードにスイッチします。

するとスクリプトが表示されます。これは先述、GUIモードで選択した設定が自動でスクリプトに反映されます。

STEP4: DI 同期タスクを実行
スクリプト(タスク)を実行します。

スクリプト(タスク)が成功すると、タスクとしてLogが表示されます。

あとはAd-Hoc クエリで確認します(手順は上記の共通手順にて記載しています)
select * from nelly01_dev.log_to_odps where ds='20200907';

最後に
本記事では、LogService からMaxComputeへ連携する方法を簡単に説明しました。
LogServiceからMaxComputeへリアルタイムDWHとして構築したい場合、参考にできれば幸いです。
