Python 종속 항목 설치

이 페이지에서는 Python 패키지를 설치하고 몇 가지 일반적인 애플리케이션에서 Cloud Composer 환경에 연결하는 방법을 설명합니다.

종속 항목은 기본 환경에 포함된 기존의 Python 종속 항목과 함께 설치됩니다.

특정 패키지가 필요한 환경의 경우 Cloud Composer 이미지 버전 전반에서 패키지 변경으로 인한 문제를 피하려면 패키지를 명시적으로 설치하는 것이 좋습니다. 사용자 환경에서 실행 중인 Cloud Composer 버전의 사전 설치된 패키지에만 의존하지 마세요.

종속 항목 관리 옵션

Python 종속 항목이 외부 종속 항목을 포함하고 있지 않으며, Cloud Composer의 종속 항목과 충돌하지 않는다면 Python Package Index에서 Python 종속 항목을 설치할 수 있습니다. 비공개 패키지 저장소에서 Python 종속 항목을 설치할 수도 있습니다.

다른 요구사항이 있는 경우에 사용 가능한 몇 가지 옵션은 다음과 같습니다.

옵션 사용 가능한 경우
로컬 Python 라이브러리 Python Package Index에서 Python 종속 항목을 찾을 수 없으며, 라이브러리에 dist-packages와 같은 외부 종속 항목이 없는 경우
플러그인 기능 Airflow 웹 인터페이스 수정과 같은 플러그인 관련 기능을 사용하려는 경우
PythonVirtualenvOperator Python Package Index에서 Python 종속 항목을 찾을 수 있으며, 외부 종속 항목이 없지만 모든 작업자를 대상으로 Python 종속 항목을 설치하지 않으려 하거나, 해당 종속 항목이 Cloud Composer에 필요한 종속 항목과 충돌하는 경우
KubernetesPodOperator

pip에서 설치할 수 없는 외부 종속 항목(예: dist-packages)이 필요하거나 내부 pip 서버를 사용 중인 경우

이 옵션은 추가 설정 및 유지관리 작업이 필요하며, 일반적으로 다른 옵션이 적용되지 않는 경우에 고려해야 합니다.

시작하기 전에

  • Cloud Composer 환경에서 Python 패키지를 설치하려면 composer.environments.update 권한이 필요합니다. 자세한 내용은 Cloud Composer 액세스 제어를 참조하세요.
  • VPC 서비스 제어 경계가 환경을 보호하고 있다면 PyPI 종속 항목을 설치하기 전에 서비스 경계가 보호하는 서비스에 대한 액세스 권한이 있는 추가 사용자 ID를 부여하고 비공개 PyPI 저장소에 대한 지원을 사용 설정해야 합니다.
  • 요구사항은 PEP-508에 지정된 형식을 따라야 합니다. 여기에는 각 요구사항이 소문자로 지정되어 있고, 패키지 이름과 선택적 추가 기능 및 버전 지정자로 구성되어 있습니다.
  • API를 사용하여 커스텀 Python 종속 항목을 설치하면 모든 Cloud Composer 프로세스가 새로 설치된 PyPI 종속 항목과 함께 실행됩니다.
  • 커스텀 PyPI 종속 항목은 Airflow에 필요한 종속 항목과 충돌을 유발하여 불안정성을 야기할 수 있습니다.
  • 프로덕션 환경에 배포하기 전에 Airflow 작업자 컨테이너에서 로컬로 PyPI 패키지를 테스트하는 것이 좋습니다.

설치된 Python 패키지 보기

설치된 Python 패키지를 사용자 환경에서 보려면 다음 안내를 따르세요.

  1. 환경의 GKE 클러스터에 연결합니다.
  2. pod에 연결합니다. GKE 클러스터의 pod에 액세스하려면 네임스페이스를 인식하는 kubectl 명령어를 사용합니다. 모든 네임스페이스를 보려면 kubectl get pods --all-namespaces를 사용하세요.
  3. pip freeze를 실행합니다.

예를 들면 다음과 같습니다.

gcloud container clusters get-credentials projects/composer-test-1/zones/us-central1-f/clusters/us-central1-1223232-gke --zone us-central1-f
Fetching cluster endpoint and auth data.
kubeconfig entry generated for us-central1-quickstart-f5da909c-gke.
~ (composer-test-1)$ kubectl exec -itn composer-1-7-2-airflow-1-9-0-0a9f265b airflow-worker-7858d4fb79-2dr9j -- /bin/bash
...
~ (composer-test-1)$ pip freeze

absl-py==0.7.1
adal==1.2.0
asn1crypto==0.24.0
astor==0.8.0
attrs==19.1.0
autopep8==1.4.4
...

PyPI에서 Python 종속 항목 설치

Python 패키지 색인에서 Python 종속 항목을 설치하려면 Python 종속 항목에 외부 종속 항목이 없거나 Cloud Composer 종속 항목과 충돌하지 않아야 합니다.

사용자 환경의 Python 종속 항목을 추가, 업데이트 또는 삭제하려면 다음 안내를 따르세요.

콘솔

다음과 같이 패키지 이름 및 버전 지정자를 지정합니다.

  • "pi-python-client", "==1.1.post1"
  • "go-api-python-client", "==1.0.0.dev187"

버전 지정자가 없는 패키지의 경우 "glob2", " "와 같이 빈 문자열을 값으로 사용하세요.

환경의 Python 종속 항목에 액세스하려면 다음 단계를 따라 PyPI 종속 항목 페이지로 이동합니다.

  1. Google Cloud Platform Console에서 환경 페이지를 엽니다.

    환경 페이지 열기

  2. Python 종속 항목을 설치, 업데이트 또는 삭제하려는 환경의 이름을 클릭합니다.

  3. PyPI 종속 항목 탭을 선택합니다.

  4. 수정 버튼을 클릭합니다.

  5. 새 종속 항목을 추가하려면 다음 안내를 따릅니다.

    1. 종속 항목 추가 버튼을 클릭합니다.

    2. 이름버전 필드에 라이브러리의 이름 및 버전을 입력합니다.

  6. 기존 종속 항목을 업데이트하려면 다음 안내를 따릅니다.

    1. 업데이트하려는 라이브러리의 이름 또는 버전 필드를 선택합니다.

    2. 새 값을 입력합니다.

  7. 종속 항목을 삭제하려면 다음 안내를 따릅니다.

    1. 삭제할 종속 항목 이름 위로 마우스를 가져갑니다.

    2. 표시되는 휴지통 아이콘을 클릭합니다.

gcloud

requirements.txt 파일을 gcloud 명령줄 도구에 전달합니다. 각 요구사항 지정자가 별도의 줄에 입력된 파일 형식을 사용합니다.

샘플 requirements.txt 파일:

scipy>=0.13.3
scikit-learn
nltk[machine_learning]

requirements.txt 파일을 environments.set-python-dependencies 명령어에 전달하여 설치 종속 항목을 설정합니다.

gcloud composer environments update ENVIRONMENT-NAME \\
--update-pypi-packages-from-file requirements.txt \\
--location LOCATION

작업이 완료되면 명령어가 종료됩니다. 기다리지 않으려면 --async 플래그를 사용하세요.

종속 항목 충돌로 인해 업데이트가 실패하게 되면 사용자 환경이 기존 종속 항목으로 계속 실행됩니다. 작업이 성공하면 DAG에서 새로 설치된 Python 종속 항목을 사용할 수 있습니다.

rest

projects.locations.environments.patch 메서드를 사용하여 config.softwareConfig.pypiPackages를 updateMask 쿼리 매개변수의 프리픽스로 지정합니다.

비공개 저장소에서 Python 종속 항목 설치

공개 인터넷에서 사용할 수 있는 비공개 패키지 저장소에 호스팅된 패키지를 설치할 수 있습니다. 패키지는 기본 pip 도구가 설치할 수 있도록 적합하게 구성된 패키지여야 합니다.

공개 주소가 있는 비공개 패키지 저장소에서 설치하려면 다음 안내를 따르세요.

  1. pip.conf 파일을 만들고 해당하는 경우 파일에 다음 정보를 추가합니다.

    • 저장소에 대한 액세스 사용자 인증 정보
    • 기본이 아닌 pip 설치 옵션

      예를 들면 다음과 같습니다.

      [global]
      extra-index-url=https://my-example-private-repo.com/
      

  2. pip.conf 파일을 사용자 환경의 Cloud Storage 버킷에 업로드하고 /config/pip/ 폴더에 배치합니다(예시: gs://us-central1-b1-6efannnn-bucket/config/pip/pip.conf).

비공개 IP 환경에 Python 종속 항목 설치

비공개 IP 환경은 공개 인터넷 액세스를 제한하므로 Python 종속 항목을 설치하려면 추가 단계가 필요할 수 있습니다.

공개 PyPI 저장소에서 종속 항목을 설치할 때는 특별한 구성이 필요하지 않습니다. 위에 설명된 일반 프로세스를 따르면 됩니다. 공개 주소가 있는 비공개 저장소에서 패키지를 요청할 수도 있습니다.

또는 VPC 네트워크에서 비공개 PyPI 저장소를 호스팅할 수 있습니다. 종속 항목을 설치할 때 Cloud Composer는 Cloud Build를 통해 공개 IP 주소에 액세스하지 않고 환경을 호스팅하는 비공개 IP GKE 클러스터 내에서 작업을 실행합니다.

VPC 네트워크에 호스팅된 비공개 저장소에서 패키지를 설치하려면 다음 안내를 따르세요.

  1. Cloud Composer 환경의 서비스 계정에 project.editor 역할이 없는 경우 iam.serviceAccountUser 역할을 부여합니다.

  2. Cloud Storage 버킷의 /config/pip/ 폴더에 업로드된 pip.conf 파일에 저장소의 비공개 IP 주소를 지정합니다.

VPC 서비스 제어 경계에서 비공개 IP 환경에 Python 종속 항목 설치

VPC 서비스 제어 매개변수로 프로젝트를 보호하면 보안 제한 사항이 추가됩니다. 특히 Cloud Build를 패키지 설치에 사용할 수 없어서, 공개 인터넷의 저장소에 대한 직접 액세스가 방지됩니다.

경계 내에서 비공개 IP Composer에 대한 Python 종속 항목을 설치할 때는 몇 가지 옵션이 있습니다.

  1. 위 섹션에 설명된 대로 VPC 네트워크에서 호스팅된 비공개 PyPI 저장소를 사용합니다.
  2. VPC 네트워크의 프록시 서버를 사용하여 공개 인터넷의 PyPI 저장소에 연결합니다. Cloud Storage 버킷의 /config/pip/pip.conf 파일에 프록시 주소를 지정합니다.
  3. 보안 정책에 따라 외부 IP 주소로부터 VPC 네트워크에 액세스가 허용되는 경우 Cloud NAT를 구성하여 이를 사용 설정할 수 있습니다.
  4. Python 종속 항목을 Cloud Storage 버킷의 dags 폴더에 제공하여 로컬 라이브러리로 설치합니다. 종속 항목 트리가 클 때는 좋은 방법이 아닐 수 있습니다.

로컬 Python 라이브러리 설치

사내 또는 로컬 Python 라이브러리를 설치하려면 다음 안내를 따르세요.

  1. dags/ 폴더의 하위 디렉터리에 종속 항목을 배치합니다. 하위 디렉터리에서 모듈을 가져오려면 모듈 경로의 각 하위 디렉터리에 __init__.py 패키지 마커 파일이 포함되어 있어야 합니다.

    이 예시에서 종속성은 coin_module.py입니다.

    dags/
      use_local_deps.py  # A DAG file.
      dependencies/
        __init__.py
        coin_module.py
    
  2. DAG 정의 파일에서 종속 항목을 가져옵니다.

    예를 들면 다음과 같습니다.

    from dependencies import coin_module

공유 객체 라이브러리에 의존하는 Python 패키지 사용

특정 PyPI 패키지는 시스템 수준 라이브러리에 따라 달라집니다. Cloud Composer는 시스템 라이브러리를 지원하지 않지만 다음 옵션을 사용할 수 있습니다.

  1. KubernetesPodOperator를 사용합니다. 연산자 이미지를 커스텀 빌드 이미지로 설정합니다. 시스템 종속 항목이 충족되지 않아 설치 중 실패한 패키지가 있으면 이 옵션을 사용합니다.

  2. 사용자 환경의 Cloud Storage 버킷에 공유 객체 라이브러리를 업로드합니다.

    1. PyPI 종속 항목에 대한 공유 객체 라이브러리를 수동으로 찾습니다(.so 파일).
    2. 공유 객체 라이브러리를 /home/airflow/gcs/plugins에 업로드합니다.
    3. 다음 Cloud Composer 환경 변수 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/airflow/gcs/plugins를 설정합니다.

    PyPI 패키지가 성공적으로 설치되었지만 런타임에 실패하면 이 옵션을 사용합니다.

Flower 웹 인터페이스에 연결

Flower는 Celery 클러스터 작업을 위한 웹 기반 도구입니다. Flower는 사용자 환경에 사전 설치되어 있습니다. 이 도구의 웹 UI를 사용하여 사용자 환경의 Apache Airflow 작업자를 모니터링할 수 있습니다.

Flower에 액세스하려면 다음 안내를 따릅니다.

  1. Kubernetes Engine 클러스터를 확인하려면 사용자 환경을 봅니다.

    gcloud composer environments describe ENVIRONMENT-NAME /
        --location LOCATION

    클러스터가 gkeCluster로 나열됩니다. 클러스터가 배포된 영역은 location으로 나열됩니다.

    예를 들면 다음과 같습니다.

          gcloud composer environments describe environment-name --location us-central1
          config:
            airflowUri: https://uNNNNe0aNNbcd3fff-tp.appspot.com
            dagGcsPrefix: gs://us-central1-may18-test-00a47695-bucket/dags
            gkeCluster: projects/example-project/zones/us-central1-a/clusters/us-central1-environment-name-00a47695-gke
            nodeConfig:
              diskSizeGb: 100
              location: projects/example-project/zones/us-central1-a

    이 예시에서 클러스터는 us-central1-environment-name-00a47695-gke이고 영역은 us-central1-a입니다. 이 정보는 Cloud Console의 환경 세부정보 페이지에서도 확인할 수 있습니다.

  2. Kubernetes Engine 클러스터에 연결합니다.

    gcloud container clusters get-credentials CLUSTER_NAME /
        --zone CLUSTER_ZONE

    예를 들면 다음과 같습니다.

    gcloud container clusters get-credentials us-central1-environment-name-00a47695-gke --zone us-central1-a
    
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for us-central1-environment-name-00a47695-gke.
  3. 작업자 pod를 보고 Flower를 실행할 pod를 선택합니다.

    kubectl get pods --all-namespaces | grep worker

    예를 들면 다음과 같습니다.

    kubectl get pods --all-namespaces | grep worker
    
    airflow-worker-89696c45f-49rkb      2/2       Running   1          29d
    airflow-worker-89696c45f-gccmm      2/2       Running   1          29d
    airflow-worker-89696c45f-llnnx      2/2       Running   0          29d

    pod 이름이 정규식 "airflow-(worker|scheduler)-[-a-f0-9]+")와 일치합니다.

  4. 작업자 pod에서 Flower를 실행합니다.

    kubectl exec -n NAMESPACE -it POD_NAME -c airflow-worker -- airflow flower

    예를 들면 다음과 같습니다.

    kubectl exec -n composer-1-6-0-airflow-1-10-1-9670c487 -it airflow-worker-89696c45f-llnnx /
        -c airflow-worker -- airflow flower
    
    [I 180601 20:35:55 command:139] Visit me at http://0.0.0.0:5555
    [I 180601 20:35:55 command:144] Broker: redis://airflow-redis-service.default.svc.cluster.local:6379/0
  5. 별도의 터미널 세션에서 kubectl을 사용하여 로컬 머신의 포트를 Flower UI를 실행하는 pod로 전달합니다.

    kubectl -n NAMESPACE port-forward POD_NAME 5555

    예를 들면 다음과 같습니다.

    kubectl -n composer-1-6-0-airflow-1-10-1-9670c487 port-forward airflow-worker-c5c4b58c7-zhmkv 5555
    
    Forwarding from 127.0.0.1:5555 -> 5555
  6. 웹 UI에 액세스하려면 로컬 브라우저에서 http://localhost:5555로 이동합니다.

SQLAlchemy를 설치하여 Airflow 데이터베이스에 액세스

SQLAlchemy는 Python SQL 도구이며 Object Relational Mapper(ORM)입니다. SQLAlchemy를 설치하고, 이를 사용하여 Cloud Composer의 Cloud SQL 인스턴스에 액세스할 수 있습니다. 설치하는 동안 Cloud Composer는 Airflow 환경 변수 AIRFLOW__CORE__SQL_ALCHEMY_CONN을 구성합니다.

SQL Alchemy를 설치하려면 다음 안내를 따르세요.

  1. 사용자 환경에 sqlalchemy를 설치합니다.

    gcloud composer environments update ENVIRONMENT-NAME /
        --location LOCATION /
        --update-pypi-package "sqlalchemy"
    
  2. Kubernetes Engine 클러스터를 확인하려면 사용자 환경을 봅니다.

    gcloud composer environments describe ENVIRONMENT-NAME /
        --location LOCATION
  3. Kubernetes Engine 클러스터에 연결합니다.

    gcloud container clusters get-credentials CLUSTER_NAME /
        --zone CLUSTER_LOCATION
  4. 작업자 pod를 보고 연결할 pod를 선택합니다.

    kubectl get pods --all-namespaces | grep worker
  5. SSH를 통해 작업자 pod에 연결합니다.

    kubectl -n NAMESPACE exec -it POD_NAME -c airflow-worker -- /bin/bash

    예:

    kubectl -n composer-1-6-0-airflow-1-10-1-9670c487 /
        exec -it airflow-worker-54c6b57789-66pnr -c airflow-worker -- /bin/bash
    airflow@airflow-worker-54c6b57789-66pnr:~$

  6. sqlalchemy 라이브러리를 사용하여 Airflow 데이터베이스와 상호작용합니다.

    python
    import airflow.configuration as config
    config.conf.get('core', 'sql_alchemy_conn')