Digdagに関するインストール及び設定周りのまとめ #digdag

treasure-data-logo

下記エントリで『試してみた』際、その時の勢いで半ば設定を進めていた所もあり、色々触っていく中で『あ、これはこうした方が良さそうだな』というのが幾つか出てきました。という事で改めて『インストール周り』に関する部分を当エントリにまとめておき、上手いこと活用出来るようにして行きたいと思います。

前提:

  • digdagをインストールするOSはAmazon Linux AMIを利用します。
  • 日本のタイムゾーンで稼働させる想定とし、OSのタイムゾーン設定はJST(Asia/Tokyo)とします。
  • 利用ユーザーはAmazon Linux AMIで提供されているデフォルトユーザー:ec2-userとします。

インストール:OS環境の用意

導入環境となるOS(Amazon Linux AMI)の用意については上記エントリと同じ進め方となるため、割愛します。導入環境に於いて必要となるネットワーク・ストレージ等の要件に従う形でAmazon Linux AMIを用意し、ログイン可能な状態としておいてください。

ログイン可能な状態となったら、ec2-userでログインし、OSのアップデートを行います。

$ ssh -i xxxx.pem ec2-user@xxx.xx.xxx.xx
$ sudo yum -y update

インストール:OSタイムゾーン設定の変更

OS(Amazon Linux AMI)起動当初の設定では、タイムゾーンはUTCとなっています。ですので、今回の要件としているAsia/Tokyoへの変更を行います。AWS公式ドキュメントで手順が紹介されていますのでその手順に従い、設定及びOS再起動を実施します。

$ sudo vi /etc/sysconfig/clock
----
ZONE="Asia/Tokyo"
UTC=true
----
$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ sudo reboot

OS再起動後、所定のタイムゾーン(ここではAsia/Tokyo)で時間が表示されるようになっていればOKです。

$ date
2016年 11月 11日 金曜日 21:27:31 JST

インストール:Java実行環境の入れ替え

Digdagで求められるJava実行環境のバージョンに適合させる為、OS導入済のJavaのバージョンを一旦アンインストールし、現行最新のJavaをインストールし直します。

## 現行Javaのバージョンを確認
$ java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (amzn-2.6.7.2.68.amzn1-x86_64 u111-b01)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)

## 現行Javaをアンインストール
$ sudo yum -y remove java

## Javaの導入(今回は直近再試行の手間を省くため、手動で入手したパッケージをS3にアップロードして落としてきました)
$ aws s3 cp s3://xxxxxxxx/jdk-8u112-linux-x64.rpm jdk-8u112-linux-x64.rpm

## インストール
$ sudo rpm -ivh jdk-8u112-linux-x64.rpm

## 入れ替えたJavaのバージョンを確認
$ java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)

Digdagでタスク実行する際に必要(そう)な各種ライブラリの導入

DigdagではShell,Python,Rubyといった外部スクリプトを連携して実行する事も可能となっています。その辺り必要そうなライブラリも併せて導入しておきます。

  • Python3(pyenv経由)
  • PosrgreSQL(DBアクセス用)
  • psycopg2(PythonによるDBアクセス用)
  • jq
## pyenvに必要なソフトウェアをインストール
$ sudo yum -y groupinstall "Development Tools"
$ sudo yum -y install mlocate openssl-devel bzip2-devel
$ sudo yum -y install zlib-devel bzip2 bzip2-devel readline-devel sqlite3 sqlite-devel
$ sudo yum -y install gcc gcc-c++

## pyenvをインストール
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
Cloning into '/home/ec2-user/.pyenv'...
remote: Counting objects: 14083, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 14083 (delta 0), reused 0 (delta 0), pack-reused 14075
Receiving objects: 100% (14083/14083), 2.48 MiB | 0 bytes/s, done.
Resolving deltas: 100% (9738/9738), done.
Checking connectivity... done.

## pyenvの起動時設定(.bashrcに該当部分を追加)
$ vi ~/.bashrc
----
# User specific aliases and functions
export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
export PATH=${PYENV_ROOT}/bin:$PATH
eval "$(pyenv init -)"
fi
----
$ source .bashrc

## pyenvインストール確認
$ pyenv install --list
(インストール可能なPythonのバージョン一覧が表示される事を確認)

## pyenvを用いてPython3.5.2(現行最新安定バージョン)をインストール
$ pyenv install 3.5.2
Downloading Python-3.5.2.tar.xz...
-> https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz
Installing Python-3.5.2...
patching file Lib/venv/scripts/posix/activate.fish
Installed Python-3.5.2 to /home/ec2-user/.pyenv/versions/3.5.2
$ pyenv global 3.5.2
$ pyenv rehash

$ python --version
Python 3.5.2

## PostgreSQL及びpsycopg2のインストール
## (pipインストールだとpython2.7に導入されてしまうのでpip3にてインストール実施)
$ sudo yum install -y gcc postgresql-devel
#$ sudo pip install psycopg2
$ pip3 install psycopg2
Collecting psycopg2
  Downloading psycopg2-2.6.2.tar.gz (376kB)
    100% |████████████████████████████████| 378kB 3.1MB/s 
Installing collected packages: psycopg2
  Running setup.py install for psycopg2 ... done
Successfully installed psycopg2-2.6.2
You are using pip version 8.1.1, however version 9.0.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command. 
$

## jqインストール
$ sudo yum -y install jq

## AWS CLI及びRubyは導入済みの状態のものを用いる
$ aws --version
aws-cli/1.10.56 Python/2.7.12 Linux/4.4.30-32.54.amzn1.x86_64 botocore/1.4.46
$ ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]

インストール:Digdagの導入

今回はec2-userで利用する事を想定している為、/home/ec2-user配下に任意のディレクトリを設けてその配下にDigdagをインストールする事にしました。sudoは用いず、以下の形で導入及び実行権限の設定を行いました。

$ curl -o /home/ec2-user/bin/digdag --create-dirs -L "https://dl.digdag.io/digdag-latest"
$ chmod +x /home/ec2-user/bin/digdag

動作確認

上記手順でインストールの最低限の初設定は完了です。

digdag --helpコマンドでヘルプページが表示される事を確認。

$ digdag --help
2016-11-11 18:42:59 +0000: Digdag v0.8.18
Usage: digdag <command> [options...]
  Local-mode commands:
    init <dir>                         create a new workflow project
    r[un] <workflow.dig>               run a workflow

digdag selfupdateコマンドでDigdag自体のアップデート処理が走るかどうかを確認。導入直後であれば最新バージョンなので以下の様に特にアップデートされずに処理が終わる形となります。

$ digdag selfupdate
2016-11-11 18:42:33 +0000: Digdag v0.8.18
Checking the latest version...
Upgrading to 0.8.18...
Verifying...
Upgraded to 0.8.18

次いで定義一覧の表示確認。試しに以下ディレクトリにプロジェクトを新規作成し、

$ pwd
/home/ec2-user/cm-digdag
$ digdag init cm1
2016-11-11 18:47:53 +0000: Digdag v0.8.18
  Creating cm1/cm1.dig
  Creating cm1/.gitignore
Done. Type `cd cm1` and then `digdag run cm1.dig` to run the workflow. Enjoy!

プロジェクト配下に以下のdigファイルを作成。

以下2つのファイルが存在する形を用意しました。(上のcm1.digファイルはプロジェクト作成時に自動生成されるサンプルファイル)

$ ll
合計 8
-rw-rw-r-- 1 ec2-user ec2-user 326 11月 12 xx:xx cm1.dig
-rw-rw-r-- 1 ec2-user ec2-user 264 11月 12 xx:xx print-vars.dig

この状態でdigdag checkコマンドを実施。すると以下のようにDigdagに関する諸設定を一覧化した情報が表示されるようになります。

$ digdag check
2016-11-12 01:26:34 +0900: Digdag v0.8.18
  System default timezone: Asia/Tokyo

  Definitions (2 workflows):
    print-vars (5 tasks)
    cm1 (5 tasks)

  Parameters:
    {}

  Schedules (1 entries):
    print-vars:
      daily>: "07:00:00"
      first session time: 2016-11-12 00:00:00 +0900
      first scheduled to run at: 2016-11-12 07:00:00 +0900 (in 5h 33m 23s)

まとめ

という訳で、Digdagをインストールし各種設定を行う部分について、実用に即した形のポイントを踏まえた内容のまとめのご紹介でした。とは言え私自身まだまだ使いこなしているレベルでは無いのでこれからガンガン使い倒し、その中で得られたノウハウを適宜こちらのエントリに集約させて行ければと思っています。Digdagはローカル起動の他にサーバ起動等も行えるので、その辺りについても当エントリ内に、もしくはエントリを分けて展開して行ければとも考えております。その辺についても時が来たらまた、という事で。こちらからは以上です。

AWS Cloud Roadshow 2017 福岡