CloudFlow と Function Compute を使用して、より柔軟で費用対効果の高いデータ処理ソリューションを提供するバッチ抽出、変換、ロード (ETL) 処理システムを構築できます。これにより、基盤となるサーバーリソースを管理する必要がなく、ビジネスロジックに集中できます。
背景情報
クラウドコンピューティング、AI、IoT などの新しいテクノロジーが広く採用されています。生成されるデータ量は爆発的に増加し、データは重要な資産となっており、アプリケーションサービスの運用監視、運用データの分析、深層学習のためのデータのフィルタリングと前処理など、データ収集と処理機能に対する需要が高まっています。これらの機能は、競争上の優位性の中核となり、サービスの運用効率に直接影響します。既存の ETL システムを使用して、前述の目的を達成できます。ただし、ほとんどの場合、セルフマネージドサービスを使用することをお勧めします。
データ処理タスクが不定期に実行され、タスクが実行されていないときにリソースを消費したくない場合。
データ処理要件には、いくつかの簡単な手順のみが含まれており、セルフマネージドサービスを使用して迅速に満たすことができます。
データ処理ワークフローには、多数のカスタム手順が含まれており、既存のシステムでは柔軟に処理できません。ビジネス要件を満たすには、セルフマネージドサービスが必要です。
さまざまなオープンソースデータ処理モジュールの構築と保守に過剰な労力を費やしたくないが、多数の同時データ処理要求の処理で優れたパフォーマンスを実現したい場合。
上記の要件がある場合、または高い柔軟性、高い信頼性、費用対効果、高性能を備えたバッチデータ処理システムを実装したい場合は、このトピックのサーバーレスソリューションが最適な選択肢となります。
ユースケース
値が data_1 または data_2 である大量のデータを処理するとします。各値を持つデータの出現回数をカウントし、統計結果をデータウェアハウスに保存します。大量のデータが関係している場合、またはデータソースが異種の場合、一度に 1 つのプロセスを使用して短期間でデータ処理を迅速に完了することは困難です。この場合、CloudFlow と Function Compute の組み合わせは、効率的なソリューションを提供します。
コアデータ処理機能を示すために、Alibaba Cloud Object Storage Service (OSS) をデータウェアハウスのストレージインフラストラクチャとして使用します。これは、さまざまなタイプのデータベースサービスの代表です。
次のソリューションは、CloudFlow と Function Compute を使用して、費用対効果が高く、弾力性に優れたデータ処理システムを実装する方法を示しています。このシステムでは、Function Compute は、データ量に基づいてデータ処理と統計のための基盤となるコンピューティングリソースを動的に提供します。CloudFlow は、複雑なビジネスのアップストリームとダウンストリームのロジックを調整するのに役立ちます。
実装
一般的なデータ処理業務では、次の項目に注意してください。
データソース: 処理するデータのソース。ほとんどの場合、データはデータベースやログファイルなどのテキストファイルなど、さまざまなソースから取得されます。この例では、説明のために少量のデータを生成する関数を使用します。実際のシナリオでは、さまざまなカスタムデータソースを使用できます。
処理フレームワークまたはモード: MapReduce など、データの処理に使用されるフレームワークまたはモード。この例では、CloudFlow を使用します。
保存先: データウェアハウス。この例では、OSS をデータウェアハウスとして使用します。これは、最終データの保存先として機能します。
データ処理ワークフロー:
生データを 3 ~ 5 個のシャードにランダムに分割します。各シャードには、値 data_1 と data_2 のデータが含まれています。mapper() 関数を使用して、各シャードで各値を持つデータの出現回数をカウントし、中間結果を保存します。reduce() 関数を使用して、各シャードの統計結果を統一的に処理し、結果を合計して、最終結果を保存します。次の手順が含まれます。
データソースからデータを取得します。
データをランダムに、または特定のルールに基づいてシャードに分割します。
MapReduce の改良されたデータ並列処理機能を使用してデータを処理します。
結果を保存先に保存します。
次の図は、システムで使用される Alibaba Cloud サービスとモジュール、およびそれらの相互作用を示しています。
前提条件
Function Compute が有効になっている。
OSS が有効になっている。
CloudFlow が有効になっている。
手順
Function Compute アプリケーションセンターにワークフローと関数をデプロイします。
ETLDataProcessing にアクセスします。
「開発とエクスペリエンス」セクションの [デプロイ] をクリックして Function Compute アプリケーションセンターに移動し、アプリケーションをデプロイします。
[アプリケーションの作成] ページで、パラメータを設定し、[デフォルト環境の作成とデプロイ] をクリックします。
次の表は、設定する必要がある主要なパラメータについて説明しています。その他のパラメータにはデフォルト値を使用します。
パラメータ
説明
基本設定
デプロイタイプ
デプロイタイプ。[直接デプロイ] を選択します。
ロール名
Alibaba Cloud アカウントを使用して初めてアプリケーションセンターでアプリケーションを作成する場合は、[今すぐ承認] をクリックして [ロールテンプレート] ページに移動し、
AliyunFCServerlessDevsRoleという名前のサービスリンクロールを作成してから、[承認ポリシーの確認] をクリックします。
RAM ユーザーを使用している場合は、画面の指示に従って承認リンクを Alibaba Cloud アカウントにコピーして承認します。承認が完了したら、[承認済み] をクリックします。
説明[ロールの取得に失敗しました] というメッセージが表示された場合は、対応する Alibaba Cloud アカウントに連絡して、
AliRAMReadOnlyAccessポリシーとAliyunFCFullAccessポリシーを現在の RAM ユーザーにアタッチします。詳細については、「Alibaba Cloud アカウントを使用して RAM ユーザーに権限を付与する」をご参照ください。
詳細設定
リージョン
アプリケーションをデプロイするリージョン。
ワークフロー実行ロール
ワークフローの実行に使用されるサービスリンクロール。事前にサービスリンクロールを作成し、AliyunFCInvocationAccess ポリシーをサービスリンクロールにアタッチします。
関数サービスロール
Function Compute が他のクラウドサービスにアクセスするために使用するサービスリンクロール。特別な要件がない場合は、Function Compute によって提供されるデフォルトのサービスリンクロール AliyunFCDefaultRole を使用することをお勧めします。
オブジェクトストレージバケット名
デプロイするワークフローと関数と同じリージョンにある OSS バケットの名前。
アプリケーションのデプロイが完了するまで 1 ~ 2 分待ちます。システムは、
etl-data-processing-2q1iという名前の 3 つの関数とワークフローを自動的に作成します。Function Compute コンソール と CloudFlow コンソール にログインして、作成結果を確認できます。shards-spliter: データソースからデータを読み取り、特定のルールに基づいてソースデータをシャードに分割し、シャードをワークフローに返します。
mapper: MapReduce フレームワークのマップ関数。この関数は、シャードデータをフィルタリング、クレンジング、および計算します。ほとんどの場合、処理速度を向上させるために、データ処理ワークフロー内のシャードの数に基づいて複数の関数インスタンスが並列に生成されます。mapper() 関数によって各シャードで返される結果は、特定の OSS ディレクトリに保存されます。
reducer: MapReduce フレームワークのリデュース関数。この関数は、mapper() 関数によって返された結果を統合およびマージし、最終結果を OSS にプッシュします。
すべてのサンプルコードは、Function Compute アプリケーションセンター と CloudFlow コンソールから取得できます。
結果を確認します。
CloudFlow コンソール にログインします。トップナビゲーションバーで、リージョンを選択します。
[ワークフロー] ページで、
etl-data-processing-2q1iワークフローをクリックします。[ワークフローの詳細] ページで、[実行レコード] タブをクリックし、[実行開始] をクリックします。実行が完了したら、ワークフローの入力と出力 を確認します。
OSS コンソール にログインして、シャードデータの内容とマージ結果を確認します。
