본문 바로가기

Data Mining & Distributed/Airflow

[ Airflow ] RestAPI 사용하기

반응형

Apache Airflow에서 REST API를 인증된 사용자와 비밀번호를 통해 사용할 수 있게 설정하려면 다음 단계를 따르세요:


 

1. 사용자 계정 생성

Airflow의 CLI를 사용하여 사용자 계정을 생성합니다.

airflow users create \
    --username admin \
    --firstname Admin \
    --lastname User \
    --role Admin \
    --email admin@example.com \
    --password yourpassword

이 명령은 admin이라는 이름의 사용자 계정을 생성합니다. REST API에 접근하려면 이 사용자 계정을 사용합니다.

 

2. REST API 활성화

Airflow는 기본적으로 REST API가 활성화되어 있습니다. 하지만 API를 사용하려면 인증이 필요하므로 auth_backend 설정이 중요합니다.

2.1 airflow.cfg 파일 확인

Airflow의 api.auth_backend 설정을 확인하고, password_auth가 설정되어 있는지 확인합니다.

airflow.cfg에서 다음 섹션을 찾아 수정합니다.

[api]
auth_backend = airflow.api.auth.backend.basic_auth

 

3. API 사용

이제 기본 인증(Basic Auth)을 통해 REST API에 접근할 수 있습니다.

curl 명령어를 사용하여 Airflow의 REST API로 DAG 리스트를 가져오는 방법은 다음과 같습니다. 이 방법은 Airflow 2.x의 REST API를 사용하는 것을 기준으로 합니다.

3.1 기본 명령

REST API 호출에 필요한 기본 구성:

  • 엔드포인트: http://<AIRFLOW_HOST>:<PORT>/api/v1/dags
  • HTTP 메서드: GET
  • 인증: Basic Auth 또는 Token 인증 사용

3.2 Basic Auth를 사용하는 경우

다음은 Basic Auth를 사용하여 Airflow API로 DAG 리스트를 가져오는 curl 명령어입니다:

curl -X GET "http://<AIRFLOW_HOST>:<PORT>/api/v1/dags" \
     -u "username:password" \
     -H "Accept: application/json"
  • <AIRFLOW_HOST>: Airflow 서버의 호스트 이름 (예: localhost).
  • <PORT>: Airflow Webserver의 포트 번호 (기본값: 8080).
  • username:password: Airflow 사용자 계정의 사용자명과 비밀번호.

3.3 에러 처리

  • 인증 실패 시: HTTP 401 응답과 함께 에러 메시지가 반환됩니다.
  • 잘못된 엔드포인트 호출 시: HTTP 404 응답.

3.4 추가 참고

  • Airflow Webserver가 실행 중이어야 합니다.
  • RBAC가 활성화된 경우, 적절한 권한을 가진 사용자 계정을 사용해야 합니다.

3.5 요청 예시

curl을 사용하여 REST API에 요청하는 예는 다음과 같습니다:

curl -X GET \
  "http://<airflow-webserver>:8080/api/v1/dags" \
  -H "Content-Type: application/json" \
  --user "admin:yourpassword"

3.6 응답 예시

API 호출이 성공하면 다음과 같은 JSON 응답을 받게 됩니다:

{
  "dags": [
    {
      "dag_id": "example_dag",
      "description": "An example DAG",
      "fileloc": "/path/to/dag.py",
      "is_paused": false,
      ...
    },
    {
      "dag_id": "another_dag",
      "description": "Another example DAG",
      "fileloc": "/path/to/another_dag.py",
      "is_paused": true,
      ...
    }
  ],
  "total_entries": 2
}

3.7 Python 예시

Python에서 requests 라이브러리를 사용하여 REST API를 호출할 수 있습니다:

import requests

url = "http://<airflow-webserver>:8080/api/v1/dags"
response = requests.get(url, auth=('admin', 'yourpassword'))

if response.status_code == 200:
    print(response.json())
else:
    print(f"Error: {response.status_code} - {response.text}")

 

4. 역할 기반 접근 제어(RBAC) 확인

Airflow는 RBAC(Role-Based Access Control)을 지원합니다. 따라서 API를 호출하려는 사용자가 적절한 역할(예: Admin 또는 Op)을 가지고 있어야 합니다.

4.1 역할 확인

생성된 사용자가 올바른 역할을 가지고 있는지 확인하세요. RBAC는 Airflow 웹 UI에서 관리할 수 있습니다.

5. 테스트 및 디버깅

REST API가 올바르게 작동하는지 테스트합니다. API 호출이 실패하면 다음 사항을 확인하세요:

  • Webserver 로그 (airflow-webserver.log)에서 오류 메시지 확인.
  • 사용자 계정과 비밀번호 확인.
  • Webserver가 올바르게 실행되고 있는지 확인.

이 설정을 완료하면 Airflow REST API를 사용자 이름과 비밀번호를 통해 사용할 수 있습니다.

반응형