arrow_back

Dataflow を使用したサーバーレスのデータ処理 - カスタム Dataflow Flex テンプレート(Python)

ログイン 参加
700 以上のラボとコースにアクセス

Dataflow を使用したサーバーレスのデータ処理 - カスタム Dataflow Flex テンプレート(Python)

ラボ 2時間 universal_currency_alt クレジット: 5 show_chart 上級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

概要

このラボの内容:

  • カスタム パイプラインをカスタム Dataflow Flex テンプレートに変換する。
  • Dataflow Flex テンプレートを実行する。

前提条件:

  • Python の基本的な知識。

コマンドライン パラメータを受け入れるパイプラインは、ハードコードしたパラメータを使うパイプラインよりもはるかに便利です。しかし、そのようなパイプラインを実行するには、開発環境を作成する必要があります。さまざまなユーザーによる再実行や、多種多様なコンテキストでの再実行が想定されるパイプラインには、さらに便利な選択肢があります。それは、Dataflow テンプレートを使うことです。

Google Cloud Platform には、すでに作成された多数の Dataflow テンプレートがあります。詳細については、Google 提供のテンプレートを使ってみるでご確認いただけます。なお、その中にこのラボのパイプラインと同じ動作をするテンプレートはありません。しかし、ラボのこのパートで、パイプラインを(従来のカスタム テンプレートではなく)新しいカスタム Dataflow Flex テンプレートに変換できます。

パイプラインをカスタム Dataflow Flex テンプレートに変換するには、コードと依存関係をパッケージ化する Docker コンテナ、ビルド対象のコードを記述する Dockerfile、実際のジョブの作成のためにランタイムに実行する基盤のコンテナをビルドする Cloud Build、ジョブ パラメータを記述するメタデータ ファイルを使用する必要があります。

設定と要件

ラボの設定

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. Qwiklabs にシークレット ウィンドウでログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
    一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。

  5. [Google Console を開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
    他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

プロジェクトの権限を確認する

Google Cloud で作業を開始する前に、Identity and Access Management(IAM)内で適切な権限がプロジェクトに付与されていることを確認する必要があります。

  1. Google Cloud コンソールのナビゲーション メニューナビゲーション メニュー アイコン)で、[IAM と管理] > [IAM] を選択します。

  2. Compute Engine のデフォルトのサービス アカウント {project-number}-compute@developer.gserviceaccount.com が存在し、編集者のロールが割り当てられていることを確認します。アカウントの接頭辞はプロジェクト番号で、ナビゲーション メニュー > [Cloud の概要] > [ダッシュボード] から確認できます。

Compute Engine のデフォルトのサービス アカウント名と編集者のステータスがハイライト表示された [権限] タブページ

注: アカウントが IAM に存在しない場合やアカウントに編集者のロールがない場合は、以下の手順に沿って必要なロールを割り当てます。
  1. Google Cloud コンソールのナビゲーション メニューで、[Cloud の概要] > [ダッシュボード] をクリックします。
  2. プロジェクト番号(例: 729328892908)をコピーします。
  3. ナビゲーション メニューで、[IAM と管理] > [IAM] を選択します。
  4. ロールの表の上部で、[プリンシパル別に表示] の下にある [アクセスを許可] をクリックします。
  5. [新しいプリンシパル] に次のように入力します。
{project-number}-compute@developer.gserviceaccount.com
  1. {project-number} はプロジェクト番号に置き換えてください。
  2. [ロール] で、[Project](または [基本])> [編集者] を選択します。
  3. [保存] をクリックします。

Jupyter ノートブック ベースの開発環境の設定

このラボでは、すべてのコマンドをノートブックのターミナルで実行します。

  1. Google Cloud コンソールのナビゲーション メニューで、[Vertex AI] > [Workbench] をクリックします。

  2. [Notebooks API を有効にする] をクリックします。

  3. [Workbench] ページで [ユーザー管理のノートブック] を選択し、[新規作成] をクリックします。

  4. 表示された [新しいインスタンス] ダイアログ ボックスで、リージョンを に、ゾーンを に設定します。

  5. [環境] で [Apache Beam] を選択します。

  6. ダイアログ ボックスの下部にある [作成] をクリックします。

注: 環境の完全なプロビジョニングには 3~5 分かかる場合があります。処理が完了するまでお待ちください。 注: [Notebook API を有効にする] をクリックして Notebooks API を有効にします。
  1. 環境の準備が完了したら、ノートブック名の横にある [JupyterLab を開く] をクリックします。これにより、使用環境がブラウザの新しいタブで開きます。

IDE_link

  1. 次に、[ターミナル] をクリックします。これにより、このラボのすべてのコマンドを実行できるターミナルが開きます。

ターミナルを開く

コード リポジトリをダウンロードする

このラボで使用するコード リポジトリをダウンロードします。

  1. 開いたターミナルで、次のコマンドを入力します。
git clone https://github.com/GoogleCloudPlatform/training-data-analyst cd /home/jupyter/training-data-analyst/quests/dataflow_python/
  1. ノートブック環境の左側パネルのファイル ブラウザに、training-data-analyst リポジトリが追加されます。

  2. クローン リポジトリ /training-data-analyst/quests/dataflow_python/ に移動します。ラボごとに、1 つのフォルダが表示されます。このフォルダはさらに、完成させるコードが格納される lab サブフォルダと、ヒントが必要な場合に完全に機能するサンプルを参照できる solution サブフォルダとに分けられています。

展開された [表示] メニューでハイライト表示されているエクスプローラ オプション

注: 編集のためにファイルを開くには、目的のファイルに移動してクリックします。ファイルが開き、コードを追加または変更できます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 ノートブック インスタンスを作成し、コース リポジトリのクローンを作成する

タスク 1. パイプラインを設定する

このラボでは、分岐パイプラインラボ(solution フォルダ)の既存のパイプライン コードを活用します。

適切なラボを開く

  • JupyterLab 環境のターミナルで、以下のコマンドを実行します。
cd 2_Branching_Pipelines/lab export BASE_DIR=$(pwd)

仮想環境と依存関係を設定する

実際のパイプライン コードの編集を開始する前に、必要な依存関係がインストールされていることを確認する必要があります。

  1. IDE 環境で以前に開いたターミナルに戻り、このラボでの作業用に仮想環境を作成します。
sudo apt-get update && sudo apt-get install -y python3-venv python3 -m venv df-env source df-env/bin/activate
  1. 次に、パイプラインの実行に必要なパッケージをインストールします。
python3 -m pip install -q --upgrade pip setuptools wheel python3 -m pip install apache-beam[gcp]
  1. 最後に、Dataflow API が有効になっていることを確認します。
gcloud services enable dataflow.googleapis.com

データ環境を設定する

  • データ環境を設定します。
# GCS バケットと BQ データセットを作成する cd $BASE_DIR/../.. source create_batch_sinks.sh # イベント データフローを生成する source generate_batch_events.sh # 練習用コードが含まれているディレクトリに移動する cd $BASE_DIR

パイプライン コードを更新する

  • IDE で training-data-analyst/quests/dataflow_python/2_Branching_Pipelines/solution/ にあるソリューション ファイルを使用して my_pipeline.py を更新します。
cp /home/jupyter/training-data-analyst/quests/dataflow_python/2_Branching_Pipelines/solution/my_pipeline.py $BASE_DIR

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 データ環境を設定する

タスク 2. カスタム Dataflow Flex テンプレート コンテナ イメージを作成する

  1. まず、Kaniko キャッシュの使用をデフォルトで有効にします。Kaniko は、コンテナビルドのアーティファクトをキャッシュに保存します。このオプションを使用すると、以降のビルドの時間を短縮できます。また、pip3 freeze を使用して、環境で使用されているパッケージとそのバージョンを記録します。
gcloud config set builds/use_kaniko True
  1. 次に、Dockerfile を作成します。これにより、使用する必要があるコードおよび依存関係を指定します。

    a. このタスクを完了するには、IDE のファイル エクスプローラにある dataflow_python/2_Branching_Pipelines/lab フォルダに新しいファイルを作成します。

    b. 新しいファイルを作成するには、[ファイル] >> [新規] >> [テキスト ファイル] の順にクリックします。

    c. ファイル名を Dockerfile に変更します。ファイル名を右クリックすると変更できます。

    d. 編集パネルで Dockerfile ファイルを開きます。ファイルをクリックして開きます。

    e. 下のコードを Dockerfile ファイルにコピーして保存します。

FROM gcr.io/dataflow-templates-base/python3-template-launcher-base ARG WORKDIR=/dataflow/template RUN mkdir -p ${WORKDIR} WORKDIR ${WORKDIR} RUN apt-get update && apt-get install -y libffi-dev && rm -rf /var/lib/apt/lists/* COPY my_pipeline.py . ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${WORKDIR}/my_pipeline.py" RUN python3 -m pip install apache-beam[gcp]==2.25.0
  1. 最後に、Cloud Build を使用してコンテナ イメージをビルドします。
export PROJECT_ID=$(gcloud config get-value project) export TEMPLATE_IMAGE="gcr.io/$PROJECT_ID/dataflow/my_pipeline:latest" gcloud builds submit --tag $TEMPLATE_IMAGE .

コンテナをビルドして push するには数分かかります。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 カスタム Dataflow Flex テンプレート コンテナ イメージを作成する

タスク 3. Flex テンプレートを作成してステージングする

  1. テンプレートを実行するには、SDK 情報やメタデータなど、ジョブの実行に必要なすべての情報を含むテンプレート仕様ファイルを Cloud Storage に作成する必要があります。

    a. IDE のファイル エクスプローラにある dataflow_python/2_Branching_Pipelines/lab フォルダに新しいファイルを作成します。

    b. 新しいファイルを作成するには、[ファイル] >> [新規] >> [テキスト ファイル] の順にクリックします。

    c. ファイル名を metadata.json に変更します。ファイル名を右クリックすると変更できます。

    d. 編集パネルで metadata.json ファイルを開きます。ファイルを開くには、metadata.json ファイルを右クリックし、[アプリで開く] >> [エディタ] の順に選択します。

    e. このタスクを完了するには、パイプラインで予期されるすべての入力パラメータを考慮した次の形式で、metadata.json ファイルを作成する必要があります。必要な場合は、ソリューションを参照してください。独自の正規表現チェックを記述する必要があります。おすすめの方法ではありませんが、".*" はあらゆる入力に一致します。

{ "name": "Your pipeline name", "description": "Your pipeline description", "parameters": [ { "name": "inputPath", "label": "Input file path.", "helpText": "Path to events.json file.", "regexes": [ ".*\\.json" ] }, { "name": "outputPath", "label": "Output file location", "helpText": "GCS Coldline Bucket location for raw data", "regexes": [ "gs:\\/\\/[a-zA-z0-9\\-\\_\\/]+" ] }, { "name": "tableName", "label": "BigQuery output table", "helpText": "BigQuery table spec to write to, in the form 'project:dataset.table'.", "is_optional": true, "regexes": [ "[^:]+:[^.]+[.].+" ] } ] }
  1. 次に、実際のテンプレートをビルドしてステージングします。
export PROJECT_ID=$(gcloud config get-value project) export TEMPLATE_PATH="gs://${PROJECT_ID}/templates/mytemplate.json" # テンプレートをビルドして GCS にアップロードする # gcloud のベータ版機能のオプトインが必要な可能性があります gcloud beta dataflow flex-template build $TEMPLATE_PATH \ --image "$TEMPLATE_IMAGE" \ --sdk-language "PYTHON" \ --metadata-file "metadata.json"
  1. ファイルが Cloud Storage のテンプレート用の場所にアップロードされていることを確認します。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Flex テンプレートを作成してステージングする

タスク 4. UI からテンプレートを実行する

このタスクを完了するには、以下の指示に従います。

  1. Google Cloud コンソールの Cloud Dataflow ページに移動します。

  2. [テンプレートからジョブを作成] をクリックします。

  3. [ジョブ名] フィールドに有効なジョブ名を入力します。

  4. [Dataflow テンプレート] プルダウン メニューから [カスタム テンプレート] を選択します。

  5. テンプレートの Cloud Storage パスのフィールドに、テンプレート ファイルへの Cloud Storage パスを入力します。

  6. [必須パラメータ] に適切な項目を入力します。

    a. [入力ファイルのパス] に、 を入力します。

    b. [出力ファイルの場所] に、 を入力します。

    c. [BigQuery 出力テーブル] に、 を入力します。

  7. [ジョブを実行] をクリックします。

注: ステージング バケットを指定する必要はありません。Dataflow はプロジェクト番号を使用して、プロジェクト内に のようなプライベート プロジェクトを作成します。
  1. Compute Engine コンソールを確認すると、コンテナを実行して指定したパラメータでパイプラインを開始するために作成された、一時的なランチャー VM があります。

タスク 5. gcloud を使用してテンプレートを実行する

Dataflow テンプレートを使用する利点の一つは、開発環境以外の幅広いコンテキストから実行できることです。それを確認するために、gcloud を使用してコマンドラインから Dataflow テンプレートを実行します。

  1. このタスクを完了するには、以下のコマンドを、適宜パラメータを変更してターミナルで実行します。
export PROJECT_ID=$(gcloud config get-value project) export REGION={{{project_0.startup_script.lab_region|Region}}} export JOB_NAME=mytemplate-$(date +%Y%m%H%M$S) export TEMPLATE_LOC=gs://${PROJECT_ID}/templates/mytemplate.json export INPUT_PATH=gs://${PROJECT_ID}/events.json export OUTPUT_PATH=gs://${PROJECT_ID}-coldline/template_output/ export BQ_TABLE=${PROJECT_ID}:logs.logs_filtered gcloud beta dataflow flex-template run ${JOB_NAME} \ --region=$REGION \ --template-file-gcs-location ${TEMPLATE_LOC} \ --parameters "inputPath=${INPUT_PATH},outputPath=${OUTPUT_PATH},tableName=${BQ_TABLE}"
  1. パイプラインが正常に完了することを確認します。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 UI および gcloud を使用してテンプレートを実行する

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。