DataflowのFlexテンプレートで「Timeout in polling result file」エラー

記事タイトルとURLをコピーする

G-gen の齊間です。この記事では、Dataflow の Flex テンプレートジョブが VPC ネットワーク内のリソース(例:Compute Engine 上の Oracle DB)にアクセスする際に、ランチャー VM が原因でタイムアウトエラーとなる事象が発生しました。この事象の原因と実施した対処法について解説します。

事象

エラー内容

Dataflow の Flex テンプレートを利用し、VPC ネットワーク内に配置された Compute Engine VM 上の Oracle データベースからデータを取得し、BigQuery へ移送するジョブを作成しました。

System Architecture

この Dataflow ジョブを、VPC ネットワークとサブネット、および内部 IP アドレスのみを使用する設定(use_public_ips=false)で実行したところ、ジョブの起動処理(ランチャー VM の起動)中にタイムアウトし、以下のエラーが発生しました。

Timeout in polling result file: gs://{project_id}/staging/template_launches/2025-09-07_23_39_02-6074885035213821531/operation_result. Service account: {service_account}@developer.gserviceaccount.com Image URL: asia-northeast1-docker.pkg.dev/{project_id}/{repository_name}/{template_name:version} Troubleshooting guide at https://cloud.google.com/dataflow/docs/guides/troubleshoot-templates#timeout-polling

Dataflow Error Screen

なお、エラーメッセージに記載されている以下のトラブルシューティングガイドを確認しましたが、事象は解消しませんでした。

実行したコマンド

Dataflow ジョブの実行には、以下の gcloud コマンドを使用しました。コマンドのオプションで、ワーカー VM が使用する VPC ネットワーク(network)とサブネット(subnetwork)、および内部 IP アドレスの使用(use_public_ips=false)を指定しています。

# エラーが発生したコマンド
gcloud dataflow flex-template run $JOB_NAME \
  --template-file-gcs-location $TEMPLATE_PATH \
  --region asia-northeast1 \
  --network=$NETWORK_NAME \
  --subnetwork=regions/asia-northeast1/subnetworks/$SUBNET_NAME \
  --parameters \
    use_public_ips=false

参考記事

Dataflow の詳細については、以下の記事も参照してください。

blog.g-gen.co.jp

原因

原因は、起動したランチャー VM に対して適切なファイアウォールルールが適用されておらず、Google Cloud APIs(Cloud Storage API)等への通信が遮断されていたことにありました。

Dataflow の Flex テンプレートジョブを実行すると、Dataflow は 2段階のプロセスで VM を起動します。

  1. ランチャー VM : まず、ジョブの起動処理(Docker イメージやテンプレートファイルの Cloud Storage からの Pull、パイプライングラフの構築など)を行うための一時的な VM(ランチャー VM)が起動する
  2. ワーカー VM : ランチャー VM による準備が完了すると、実際のデータ処理を実行するワーカー VM 群が起動する

今回のように use_public_ips=false を指定して閉域網で実行する場合、ランチャー VM から Cloud Storage への通信(結果ファイルのポーリング等)は「限定公開の Google アクセス(Private Google Access)」を経由する必要があります。

しかし、ランチャー VM に適切なネットワークタグが付与されていない状態では、VPC 内の特定の通信を許可するファイアウォールルールを適用することができず、結果として通信タイムアウト(Timeout in polling result file)が発生していました。

対処法

ランチャー VM に対して適切なファイアウォールルールやルート設定を適用するためには、ランチャー VM を識別するためのネットワークタグの付与が必要です。以下の対応が必要となります。

  • additional-experiments オプションの使用
  • ネットワークタグの設定

additional-experiments オプションの使用

Dataflow Flex テンプレートのランチャー VM にネットワークタグを付与するには、gcloud dataflow flex-template run コマンドに --additional-experiments オプションを追加します。なお2025年11月現在、当オプションは experimental ステージです。

具体的には、use_network_tags_for_flex_templates というフラグを用いて、ランチャー VM に付与したいネットワークタグを指定します。

# 修正後のコマンド
gcloud dataflow flex-template run $JOB_NAME \
  --template-file-gcs-location $TEMPLATE_PATH \
  --region asia-northeast1 \
  --network=$NETWORK_NAME \
  --subnetwork=regions/asia-northeast1/subnetworks/$SUBNET_NAME \
  --parameters \
    use_public_ips=false \
  --additional-experiments="use_network_tags_for_flex_templates=$NETWORK_TAG" # ランチャー VMに付与するネットワークタグを指定

ネットワークタグの設定

--additional-experiments="use_network_tags_for_flex_templates=$NETWORK_TAG" を指定することにより、$NETWORK_TAG で指定したネットワークタグがランチャー VM のインスタンスに付与されます。

このネットワークタグ(例 : dataflow-launcher)をキーとして、ランチャー VM が適切な VPC ネットワーク内で動作できるように、あらかじめ以下のネットワーク設定を行っておく必要があります。

1.ファイアウォールルール : 指定したネットワークタグ($NETWORK_TAG)を持つ VM が、必要な通信(例 : Cloud Storage への Egress、Dataflow サービスとの通信、VPC 内の Oracle データベースへの通信など)を行えるように、VPC ネットワークのファイアウォールルールを設定します。use_public_ips=false の場合は、限定公開の Google アクセスの IP レンジ(private.googleapis.com)への Egress を許可するルールも必要です。

FireWall Ingress Setting

FireWall Egress Setting

2.ルート : 同様に、このネットワークタグを持つ VM が限定公開の Google アクセスを利用できるよう、適切なルート(ネクストホップが default-internet-gateway で宛先が private.googleapis.com の IP レンジ)が設定されていることを確認します。

Route Setting

なお、 VPC 関連の設定方法や詳細については、以下の記事をご参考ください。

blog.g-gen.co.jp

これらの設定により、ランチャー VM が指定した VPC ネットワーク内で正常に起動し、Cloud Storage へのポーリングや後続のワーカー VM の起動処理を正しく実行できるようになります。

齊間 陽史(記事一覧)

開発部プロジェクトマネジメント課

狩猟免許を持つ ハンター兼 IT エンジニア。2025年7月より、G-genにジョイン。前職は SIerで DX化案件を数多く担当。平日はデジタルの世界で、休日は山で奮闘中。