LoginSignup
13
5

More than 5 years have passed since last update.

Digdag + Dockerを使うときの環境変数に注意

Last updated at Posted at 2017-07-26

概要

DigdagでDockerを利用するときには、Dockerホストの環境変数が引き継がれるようなので、注意が必要です。

再現方法

+test:
  _export:
    docker:
      image: ubuntu:16.04
  sh>: printenv

実行結果

digdag run docker_test.dig --rerun
2017-07-26 12:48:14 +0900: Digdag v0.9.12
2017-07-26 12:48:15 +0900 [WARN] (main): Reusing the last session time 2017-07-26T00:00:00+00:00.
2017-07-26 12:48:15 +0900 [INFO] (main): Using session /Users/shiozaki/Documents/digdag_test/project/.digdag/status/20170726T000000+0000.
2017-07-26 12:48:15 +0900 [INFO] (main): Starting a new session project id=1 workflow name=docker_test session_time=2017-07-26T00:00:00+00:00
2017-07-26 12:48:16 +0900 [INFO] (0018@[0:default]+docker_test+test): sh>: printenv
TERM_SESSION_ID=w0t2p0:B7E8E7A6-A108-48DD-9BD8-0DB64CD9347E
session_date=2017-07-26
timezone=UTC
session_unixtime=1501027200
USER=shiozaki
project_id=1
<略>

Success. Task state is saved at /Users/shiozaki/Documents/digdag_test/project/.digdag/status/20170726T000000+0000 directory.
  * Use --session <daily | hourly | "yyyy-MM-dd[ HH:mm:ss]"> to not reuse the last session time.
  * Use --rerun, --start +NAME, or --goal +NAME argument to rerun skipped tasks.

問題のありそうな環境変数

今のところ、以下の環境変数が引き継がれることによる問題に出会いました。

HOME

embulk gemがライブラリのインストール先ディレクトリを決めるときにはHOMEを参照するようです。
そのため、以下のような記述をしたら、gemが見つからずにembulkの実行に失敗しました。

+run_embulk:
  _export:
    docker:
      image: java:7-jre
      build:
        - curl --create-dirs -o /bin/embulk -L "https://dl.bintray.com/embulk/maven/embulk-0.8.25.jar"
        - chmod +x /bin/embulk
        - embulk gem install embulk-input-mysql embulk-output-bigquery
  sh>: embulk run transfer_conf.yml

TEMPDIR

embulk-output-bigqueryではGCPのJSON keyをYAMLに直に書くこともできます。
https://github.com/embulk/embulk-output-bigquery#json-key-of-gcps-service-account

その場合は、プラグイン内で一時ディレクトリを作り、その中にJSON keyファイルを書き出す挙動を行います。
この一時ディレクトリのパスを決めるためにTEMPDIRが参照されていました。

解決策

_exportを使って、問題のある環境変数を上書きすることでこの問題を解決することができます。
例えば、上例のembulkの場合であれば、以下のように書けばOKです。

+run_embulk:
  _export:
    HOME: /root
    docker:
      image: java:7-jre
      build:
        - curl --create-dirs -o /bin/embulk -L "https://dl.bintray.com/embulk/maven/embulk-0.8.25.jar"
        - chmod +x /bin/embulk
        - embulk gem install embulk-input-mysql embulk-output-bigquery
  sh>: embulk run transfer_conf.yml
13
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5