로컬 파일시스템 Secrets Backend

로컬 파일시스템 Secrets Backend (Local Filesystem Secrets Backend)

이 백엔드는 로컬 파일에서 Variable과 Connection을 읽어오는 방식이에요. 개발 환경과 Kubernetes 환경에서 특히 유용하며, JSON, YAML, .env 형식의 파일을 지원해요.

출처: 문서

본문

이 백엔드는 특히 다음 사용 사례에서 유용해요:

  • 개발 (Development): 모든 터미널 창 사이의 데이터 동기화를 보장하고(데이터베이스와 동일), 동시에 값이 데이터베이스 재시작 후에도 유지돼요(환경 변수와 동일).
  • Kubernetes: 비밀을 Kubernetes Secrets에 저장할 수 있게 해주며, sidecar 컨테이너와 공유 볼륨을 사용해 값을 동기화할 수도 있어요.

로컬 파일에서 variable과 connection을 사용하려면, airflow.cfg[secrets] 섹션에서 backendLocalFilesystemBackend를 지정해 주세요.

backend_kwargs에 사용할 수 있는 파라미터:

  • variables_file_path: variables 데이터가 있는 파일 위치.
  • connections_file_path: connections 데이터가 있는 파일 위치.
  • configs_file_path: configurations 데이터가 있는 파일 위치.

샘플 설정:

[secrets]
backend = airflow.secrets.local_filesystem.LocalFilesystemBackend
backend_kwargs = {"variables_file_path": "/files/var.json", "connections_file_path": "/files/conn.json", "configs_file_path": "/files/config.json"}

JSON, YAML, .env 파일이 지원돼요. 모든 파라미터는 선택사항이에요. 파일 경로를 전달하지 않으면 백엔드는 빈 컬렉션을 반환해요.

Connection 저장 및 조회

connections_file_path/files/my_conn.json으로 설정했다면, 백엔드는 connection을 찾을 때 /files/my_conn.json 파일을 읽어요.

파일은 JSON, YAML, env 형식으로 정의할 수 있어요. 형식에 따라 데이터를 URL 또는 connection 객체로 저장해야 해요. 추가 JSON 파라미터는 extra_dejsonextra 같은 키를 사용해 제공할 수 있어요. extra_dejson 키는 파라미터를 JSON 객체로 제공할 때, extra 키는 JSON 문자열인 경우에 사용할 수 있어요. extraextra_dejson 키는 상호 배타적이에요.

JSON 파일은 키에 connection ID가, 값에 connection 하나의 정의가 들어 있는 객체를 포함해야 해요. connection은 URI(문자열) 또는 JSON 객체로 정의할 수 있어요. connection을 URI로 정의하는 가이드는 Connection URI 생성하기를 참고하세요. connection 객체 파라미터에 대한 설명은 Connection을 참고하세요. 다음은 샘플 JSON 파일이에요.

{
    "CONN_A": "mysql://host_a",
    "CONN_B": {
        "conn_type": "scheme",
        "host": "host",
        "schema": "schema",
        "login": "Login",
        "password": "None",
        "port": "1234"
    }
}

YAML 파일 구조는 JSON과 유사해요. connection ID와 하나 이상의 connection 정의의 키-값 쌍이에요. 이 형식에서는 connection을 URI(문자열) 또는 JSON 객체로 정의할 수 있어요.

CONN_A: 'mysql://host_a'

CONN_B:
  - 'mysql://host_a'
  - 'mysql://host_b'

CONN_C:
  conn_type: scheme
  host: host
  schema: lschema
  login: Login
  password: None
  port: 1234
  extra_dejson:
    a: b
    nestedblock_dict:
      x: y

.env 파일을 사용해 connection을 정의할 수도 있어요. 이때 키가 connection ID이고, 값은 URI를 사용해 connection을 설명해야 해요. connection ID는 반복되면 안 되며, 반복되면 예외가 발생해요. 다음은 샘플 파일이에요.

mysql_conn_id=mysql://log:***@13.1.21.1:3306/mysqldbrd
google_custom_key=google-cloud-platform://?key_path=%2Fkeys%2Fkey.json

Variable 저장 및 조회

variables_file_path/files/my_var.json으로 설정했다면, 백엔드는 variable을 찾을 때 /files/my_var.json 파일을 읽어요.

파일은 JSON, YAML, env 형식으로 정의할 수 있어요.

JSON 파일은 키에 variable 키가, 값에 variable 값이 들어 있는 객체를 포함해야 해요. 다음은 샘플 JSON 파일이에요.

{
    "VAR_A": "some_value",
    "var_b": "different_value"
}

YAML 파일 구조는 JSON과 유사하며, 키에 variable 키가, 값에 variable 값이 들어 있어요. 다음은 샘플 YAML 파일이에요.

VAR_A: some_value
VAR_B: different_value

.env 파일을 사용해 variable을 정의할 수도 있어요. 이때 키가 variable 키이고, variable 값으로 설명해야 해요. 다음은 샘플 파일이에요.

VAR_A=some_value
var_B=different_value

Configurations 저장 및 조회

configs_file_path/files/my_config.json으로 설정했다면, 백엔드는 _secret이 붙은 config 옵션을 조회할 때 /files/my_config.json 파일을 읽어요.

파일은 JSON, YAML, env 형식으로 정의할 수 있어요.

JSON 파일은 키에 config 옵션의 _secret 버전 값이, 값에 config 옵션 값이 들어 있는 객체를 포함해야 해요. 다음은 config 옵션과 그에 대한 샘플 JSON 파일이에요.

Config 옵션:

[database]
sql_alchemy_conn_secret = value_specified_in_database_sql_alchemy_conn_secret
[core]
fernet_key_secret = value_specified_in_core_fernet_key_secret

JSON 파일:

{
    "value_specified_in_database_sql_alchemy_conn_secret": "sql_alchemy_conn_actual_value",
    "value_specified_in_core_fernet_key_secret": "fernet_key_actual_value"
}

YAML 파일 구조는 JSON과 유사하며, 키에 config 옵션의 _secret 버전 값이, 값에 config 옵션 값이 들어 있어요. 위 config 옵션 예시에 대한 샘플 YAML 파일은 다음과 같아요.

value_specified_in_database_sql_alchemy_conn_secret: sql_alchemy_conn_actual_value
value_specified_in_core_fernet_key_secret: fernet_key_actual_value

.env 파일을 사용해 config 옵션을 정의할 수도 있어요. 이때 키가 config 옵션의 _secret 버전 값이고, 값이 config 옵션 값이에요. 위 config 옵션 예시에 대한 샘플 파일은 다음과 같아요.

value_specified_in_database_sql_alchemy_conn_secret=sql_alchemy_conn_actual_value
value_specified_in_core_fernet_key_secret=fernet_key_actual_value

더 알아보기 (Learn more)