본문 바로가기

OpenSource

embulk 설정 파일에서 변수, include 사용하는 방법

embulk 설정 파일에서 include 기능, 변수 사용하는 방법에 대해 간단히 정리.

You can embed environment variables in configuration file using Liquid template engine(This is experimental feature. Behavior might change or be removed in future releases).
To use template engine, configuration file name must end with.yml.liquid.
Environment variables are set toenvvariable.

홈페이지에 소개되었듯 Liquid 템플릿 엔진이 제공하는 기능을 이용하면 되는데 우선 include.

include 사용법

  • yaml 파일은 tab 들여쓰기 허용 안하는 것 잊지 말자.
  • 파일명 규칙을 준수해야 한다.
    • Liquid 템플릿 엔진 사용하기 위해서는 파일 확장자를 '.yml.liquid' 로 해줘야만 한다.
    • include 될 파일은 prefix 로 '_'(언더바) 를 붙여줘야 한다. 하지만 설정 시에는 '_' 제외한 이름만(확장자도 제외) 지정해주어야 한다.
  • config.yml.liquid

in:
    type: http
    url: ...

    parser:
        type: jsonpath
        root: $.data
        columns:
            - {name: block, type: string}
            ...

{% include 'mysql_out' %}
    table: t_block
    mode: insert

  • _mysql_out.yml.liquid

out:
    type: mysql
    host: localhost
    port: 3306
    user: usr
    password: pass
    database: db

% embulk run config.yml.liquid

위 예에서 parser 아래 블럭을 그냥 include 하면 어떻게 될까?

in:
    type: http
    url: ...

    parser:
        {% include 'json_parser' %}
        columns:
            - {name: block, type: string}
            ...

  • _json_parser.yml.liquid

type: jsonpath
root: $.data

실행해보면 'Error: while parsing a block mapping' 과 같은 에러가 난다.
꽁수이긴 한데 이런 경우 상위 키값을 인클루드 파일에 넣어주면 에러 없이 동작한다.

  • _json_parser.yml.liquid

parser:
    type: jsonpath
    root: $.data

변수 사용법

embulk 커뮤니티에 보면 -P 옵션 추가하여 실행 시 아규먼트로 변수나 설정값 파일 전달할 수 있게 해달라는 요청이 있던데 아직 이에 대한 지원은 없고 아래와 같은 방법들 정도가 가능한 듯 하다.

1. assign 태그를 이용하는 방법

{% include 'env' %}

out:
    type: mysql
    host: {{ my_host }}
    port: {{ my_port }}

  • _env.yml.liquid

{% assign my_host = '127.0.0.1' %}
{% assign my_port = 3306 %}

2. 환경 변수를 사용하는 방법 : env.변수명

환경 변수를 미리 선언해준다.

% set tab_name=t_block

out:
    type: mysql
    table: {{ env.tab_name }}