概要
Embulkで処理を作成する際、DB接続情報などの環境によって変更したい設定をどう定義すればいいか調べた内容をメモしておきます。
環境変数を利用する
Embulkの場合、環境変数が利用可能なので下記のように環境変数を使う方がシンプルな感じがします。
ファイル構成
ファイル一覧
~/
| # 設定情報
├ secrets.sh
└ opt
| # bundle plugin.
├ bundle
│ ├ .bundle
│ ├ .ruby-version
│ ├ Gemfile
│ ├ Gemfile.lock
│ ├ embulk
│ └ jruby
|
| # 処理内容
└ users.yml.liquid
設定情報
設定ファイルを作ってみる。
~/secrets.sh
#!/bin/bash
## TreasureData Settings
export TREASURE_DATA_API_KEY=XXXXXXXXXXXXXXX
## MySQL Settings
export MYSQL_HOST=127.0.0.1
export MYSQL_USER=hoge
export MYSQL_PASSWORD=test
## PostgreSQL Settings
export POSTGRES_HOST=127.0.0.1
export POSTGRES_USER=hoge
export POSTGRES_PASSWORD=test
処理に組み込んでみる
実際に、上記設定を組み込んで実行してみる。
~/opt/users.yml.liquid
in:
type: mysql
host: {{ env.MYSQL_HOST }}
user: {{ env.MYSQL_USER }}
password: {{ env.MYSQL_PASSWORD }}
database: hoge_db
query: |
SELECT
id, name, created_at
FROM
users
WHERE
deleted_at IS NULL
LIMIT
5
;
out:
type: file
path_prefix: "./users_"
file_ext: csv
formatter:
type: csv
delimiter: ","
newline: CRLF
newline_in_field: LF
charset: UTF-8
quote_policy: MINIMAL
quote: '"'
escape: "\\"
null_string: "\\N"
default_timezone: 'Asia/Tokyo'
プレビュー
ターミナル
$ source ~/secrets.sh; embulk preview -b bundle users.yml.liquid
実行
ターミナル
$ source ~/secrets.sh; embulk run -b bundle users.yml.liquid
.bashrcに定義する
.bashrcか.bash_profileに下記を追記しておけば、ログイン時に環境変数を反映可能。
~/.bashrc
# Embulk Settings.
source ~/secrets.sh
まとめ
サブディレクトリを作成して、各処理をフォルダに分けても特に問題ないので、liquidより使いやすいかもしれませんが、secrets.shを実行せずに、うっかりembulkを実行してしまう場合もありそうですね。