Variables 관리하기

Variables 관리하기 (Managing Variables)

Variables는 Airflow 내에서 간단한 key/value 저장소로 임의의 콘텐츠나 설정을 저장·조회하는 일반적인 방법이에요. 이 문서에서는 UI·코드·CLI로 Variable을 관리하는 방법, 환경 변수로 Variable을 저장하는 방법, Variable을 파일로 내보내는 방법, 그리고 Fernet 암호화로 Variable을 보호하는 방법을 살펴볼게요.

출처: 문서

본문

Variables는 Airflow 내에서 간단한 key/value 저장소로 임의의 콘텐츠나 설정을 저장·검색하는 일반적인 방법이에요. Variables는 UI(Admin -> Variables), 코드, 또는 CLI에서 나열·생성·업데이트·삭제할 수 있어요.

자세한 내용은 Variables 개념 문서를 참고하세요.

환경 변수에 Variable 저장하기 (Storing Variables in Environment Variables)

1.10.10 버전에 추가됨 (Added in version 1.10.10).

Airflow Variables는 환경 변수를 사용해 만들고 관리할 수도 있어요. 환경 변수 명명 규칙은 AIRFLOW_VAR_{VARIABLE_NAME}으로, 전부 대문자예요. 따라서 variable 키가 foo라면 변수 이름은 AIRFLOW_VAR_FOO가 돼요.

예를 들어 볼게요:

export AIRFLOW_VAR_FOO=BAR

# To use JSON, store them as JSON strings
export AIRFLOW_VAR_FOO_BAZ='{"hello":"world"}'

Dag에서는 이렇게 사용할 수 있어요:

from airflow.sdk import Variable

foo = Variable.get("foo")
foo_json = Variable.get("foo_baz", deserialize_json=True)

참고 (Note)

VAR는 단일 밑줄로 둘러싸여 있어요. 이는 airflow.cfg 파라미터가 저장되는 방식(구성 섹션 이름을 이중 밑줄로 감싸는 방식)과 대조적이에요. 환경 변수로 설정한 Variables는 Airflow UI에 정의된 variables보다 우선순위가 높아요.

UI와 CLI에서의 가시성 (Visibility in UI and CLI)

환경 변수로 정의된 Variables는 Airflow UI에 표시되지 않고, airflow variables list로도 나열되지 않아요.

이는 이 variables가 런타임에 동적으로 해석되며, 일반적으로 태스크를 실행하는 worker 프로세스에서 해석되기 때문이에요. 이것들은 메타데이터 데이터베이스에 저장되지 않고 웹서버나 스케줄러 환경에도 로드되지 않아요.

이는 환경 기반 시크릿(예: .env 파일, Docker, Kubernetes secrets)을 users에게 노출되는 컴포넌트(웹서버)가 아니라 worker 같은 런타임 컴포넌트에만 주입하는 보안 배포 패턴을 지원해요.

UI에서 variables가 표시되거나 편집되길 원한다면, 대신 메타데이터 데이터베이스에 정의하세요.

Variable을 파일로 내보내기 (Exporting variables to file)

로컬 CLI를 사용해 데이터베이스에 저장된 variables를 내보낼 수 있어요(예: 한 환경에서 다른 환경으로 variables를 마이그레이션할 때). Airflow 서버에서 airflow variables export를 실행하세요. 전체 명령 참조는 Command Line Interface and Environment Variables Reference를 참고하세요.

참고 (Note)

Variable export는 보안상 이유로 로컬 CLI에서만 사용할 수 있어요. UI/API는 Airflow 3 보안 모델을 유지하기 위해 민감한 값을 내보낼 수 없어요. 자세한 내용은 Airflow Security Model을 참고하세요.

Variables 보호하기 (Securing Variables)

Airflow는 metastore 데이터베이스에 저장된 variables를 암호화하기 위해 Fernet을 사용해요. Fernet은 암호화 비밀번호가 없으면 콘텐츠를 키 없이 조작하거나 읽을 수 없다는 것을 보장해요. Fernet 구성에 대한 정보는 Fernet을 확인해 보세요.

환경 변수나 metastore 데이터베이스에서 variables를 검색하는 것 외에도, secrets backend를 활성화해 variables를 검색할 수 있어요. 자세한 내용은 Secrets Backend을 참고하세요.

더 알아보기 (Learn more)