Cloud Composer 2(Airflow 1에서)로 환경 마이그레이션

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

이 페이지에서는 기존 Cloud Composer 1, Airflow 1 환경에서 Cloud Composer 2, Airflow 2로 DAG, 데이터, 구성을 전송하는 방법을 설명합니다.

기타 마이그레이션 가이드

보낸사람 받는사람 메서드 가이드
Cloud Composer 1, Airflow 2 Cloud Composer 2, Airflow 2 스냅샷을 사용하여 단계별 마이그레이션 마이그레이션 가이드(스냅샷)
Cloud Composer 1, Airflow 1 Cloud Composer 2, Airflow 2 스냅샷을 사용하여 단계별 마이그레이션 마이그레이션 가이드(스냅샷)
Cloud Composer 1, Airflow 2 Cloud Composer 2, Airflow 2 단계별 수동 전송 수동 마이그레이션 가이드
Cloud Composer 1, Airflow 1 Cloud Composer 2, Airflow 2 단계별 수동 전송 이 가이드(수동 마이그레이션)
Airflow 1 Airflow 2 단계별 수동 전송 수동 마이그레이션 가이드

시작하기 전에

  • Cloud Composer는 Cloud Composer 1에서 Cloud Composer 2로의 단계별 마이그레이션을 지원합니다. Cloud Composer 1에서 Cloud Composer 2로의 인플레이스 업그레이드는 가능하지 않습니다.
  • Cloud Composer 1 및 Cloud Composer 2 차이점 목록을 참조하세요.
  • Cloud Composer 2에 Airflow 2가 사용되기 때문에 마이그레이션에는 DAG 및 환경 구성을 Airflow 2로 전환하는 과정이 포함됩니다. Cloud Composer에서 Airflow 1과 Airflow 2 사이의 중요 차이점은 Airflow 1에서 Airflow 2로 마이그레이션 가이드를 참조하세요.

  • 이 가이드에서는 Airflow 2로의 마이그레이션 및 Cloud Composer 2로의 마이그레이션을 한 번의 마이그레이션 절차로 묶어서 보여줍니다. 이 방식에서는 Cloud Composer 2로 마이그레이션하기 전 Airflow 2가 포함된 Cloud Composer 1 환경으로 마이그레이션할 필요가 없습니다.

1단계: Airflow 1.10.15로 업그레이드

환경에 1.10.15 이전 Airflow 버전이 사용되는 경우 Airflow 1.10.15가 사용되는 Cloud Composer 버전으로 환경을 업그레이드합니다.

2단계: Airflow 2 호환성 확인

Airflow 2와의 잠재적 충돌을 확인하려면 기존 Airflow 1.10.15 환경에서 Airflow가 제공하는 업그레이드 확인 스크립트를 사용합니다.

gcloud

  1. gcloud composer environments run 명령어로 업그레이드 확인을 실행합니다. 독립형 Airflow 1.10.15와 관련된 일부 업그레이드 확인은 Cloud Composer와 관련이 없습니다. 다음 명령어는 이러한 확인 작업을 제외합니다.

    gcloud composer environments run \
        COMPOSER_1_ENV  \
        --location=COMPOSER_1_LOCATION \
        upgrade_check \
        -- --ignore VersionCheckRule --ignore LoggingConfigurationRule \
        --ignore PodTemplateFileRule --ignore SendGridEmailerMovedRule
    

    다음과 같이 바꿉니다.

    • COMPOSER_1_ENV를 Airflow 1.10.15 환경의 이름으로 바꿉니다.
    • COMPOSER_1_LOCATION을 환경이 위치한 리전으로 바꿉니다.
  2. 명령어 결과를 확인합니다. 업데이트 확인 스크립트는 기존 환경에서 발생 가능한 호환성 문제를 보고합니다.

  3. Airflow 2.0 이상으로 업그레이드 가이드의 DAG 업그레이드 섹션에 설명된 대로 DAG에 다른 변경사항을 구현합니다.

3단계: 구성 재정의, 커스텀 PyPI 패키지, 환경 변수 목록 가져오기

Console

Cloud Composer 1 환경의 구성 재정의 커스텀 PyPI 패키지, 환경 변수 목록을 가져옵니다.

  1. Google Cloud Console의 환경 페이지로 이동합니다.

    환경으로 이동

  2. Cloud Composer 1 환경을 선택합니다.

  3. 환경 변수 탭에서 환경 변수를 확인합니다.

  4. Airflow 구성 재정의 탭에서 구성 재정의를 확인합니다.

  5. PyPI 패키지 탭에서 커스텀 PyPI 패키지를 확인합니다.

gcloud

환경 변수 목록을 가져오려면 다음을 실행합니다.

gcloud composer environments describe \
    COMPOSER_1_ENV \
    --location COMPOSER_1_LOCATION \
    --format="value(config.softwareConfig.envVariables)"

환경의 Airflow 구성 재정의 목록을 가져오려면 다음을 실행합니다.

gcloud composer environments describe \
    COMPOSER_1_ENV \
    --location COMPOSER_1_LOCATION \
    --format="value(config.softwareConfig.airflowConfigOverrides)"

커스텀 PyPI 패키지 목록을 가져오려면 다음을 실행합니다.

gcloud composer environments describe \
    COMPOSER_1_ENV \
    --location COMPOSER_1_LOCATION \
    --format="value(config.softwareConfig.pypiPackages)"

다음과 같이 바꿉니다.

  • COMPOSER_1_ENV를 Cloud Composer 1 환경 이름으로 바꿉니다.
  • COMPOSER_1_LOCATION을 Cloud Composer 1 환경이 있는 리전으로 바꿉니다.

Terraform

이 단계는 건너뜁니다. Cloud Composer 1 환경의 구성에는 구성 재정의, 커스텀 PyPI 패키지, 환경 변수 목록이 이미 포함되어 있습니다.

4단계: Cloud Composer 2 환경 만들기

이 단계에서는 Cloud Composer 2 환경을 만듭니다. 선택한 리소스 요구와 일치하는 환경 사전 설정으로 시작하고, 나중에 환경을 더 확장 및 최적화할 수 있습니다.

Console

Cloud Composer 2 환경을 만들고, 구성 재정의 및 환경 변수를 지정합니다.

또는 환경을 만든 후 Airflow 구성 및 환경 변수재정의할 수 있습니다.

Airflow 1의 일부 구성 옵션은 Airflow 2에서 다른 이름 및 섹션을 사용합니다. 자세한 내용은 구성 변경사항을 참조하세요.

gcloud

Cloud Composer 2 환경을 만들고, 구성 재정의 및 환경 변수를 지정합니다.

또는 환경을 만든 후 Airflow 구성 및 환경 변수재정의할 수 있습니다.

Airflow 1의 일부 구성 옵션은 Airflow 2에서 다른 이름 및 섹션을 사용합니다. 자세한 내용은 구성 변경사항을 참조하세요.

Terraform

Cloud Composer 1 환경의 구성에 따라 Cloud Composer 2 환경을 만듭니다.

  1. Cloud Composer 1 환경의 구성을 복사합니다.
  2. 환경의 이름을 변경합니다.
  3. google-beta 제공업체를 사용합니다.

    resource "google_composer_environment" "example_environment_composer_2" {
      provider = google-beta
      # ...
    }
    
  4. config.software_config 블록에서 Cloud Composer 2 이미지를 지정합니다.

    software_config {
      image_version = "composer-2.8.6-airflow-2.7.3"
      # ...
    }
    
  5. 아직 지정하지 않았으면 구성 재정의 및 환경 변수를 지정합니다.

  6. config.software_config.pypi_packages 블록에서 커스텀 PyPI 패키지를 지정합니다.

    software_config {
    
      # ...
    
      pypi_packages = {
        numpy = ""
        scipy = ">=1.1.0"
      }
    
    }
    

5단계: Cloud Composer 2 환경에 PyPI 패키지 설치

Cloud Composer 2 환경이 생성된 다음 여기에 커스텀 PyPI 패키지를 설치합니다.

Console

  1. Google Cloud Console의 환경 페이지로 이동합니다.

    환경으로 이동

  2. Cloud Composer 2 환경을 선택합니다.

  3. PyPI 패키지 탭으로 이동하여 편집을 클릭합니다.

  4. Cloud Composer 1 환경에서 PyPI 패키지 요구사항을 복사합니다. 저장을 클릭하고 환경이 업데이트될 때까지 기다립니다.

gcloud

  1. 커스텀 PyPI 패키지 목록이 포함된 requirements.txt 파일을 만듭니다.

      numpy
      scipy>=1.1.0
    
  2. 환경을 업데이트하고 requirements.txt 파일을 --update-pypi-packages-from-file 명령어에 전달합니다.

    gcloud composer environments update COMPOSER_2_ENV \
      --location COMPOSER_2_LOCATION  \
      --update-pypi-packages-from-file requirements.txt
    

    다음과 같이 바꿉니다.

    • COMPOSER_2_ENV를 Cloud Composer 2 환경 이름으로 바꿉니다.
    • COMPOSER_2_LOCATION을 Cloud Composer 2 환경이 있는 리전으로 바꿉니다.

Terraform

이 단계는 건너뜁니다. 커스텀 PyPI 패키지는 환경을 만들 때 이미 설치되었습니다.

6단계: 변수 및 풀 전송

Airflow에서는 변수 및 풀을 JSON 파일로 내보낼 수 있습니다. 그런 다음 이 파일을 Cloud Composer 2 환경으로 가져오면 됩니다.

이 단계에 사용된 Airflow CLI 명령어는 Airflow 작업자의 로컬 파일에 작동합니다. 파일을 업로드하거나 다운로드하려면 해당 환경의 Cloud Storage 버킷에 있는 /data 폴더를 사용합니다. 이 폴더는 Airflow 작업자의 /home/airflow/gcs/data/ 디렉터리로 동기화됩니다. Airflow CLI 명령어에서 FILEPATH 매개변수에 /home/airflow/gcs/data/를 지정합니다.

gcloud

  1. Cloud Composer 1 환경에서 변수를 내보냅니다.

    gcloud composer environments run \
        COMPOSER_1_ENV \
        --location COMPOSER_1_LOCATION \
         variables -- -e /home/airflow/gcs/data/variables.json
    

    다음과 같이 바꿉니다.

    • COMPOSER_1_ENV를 Cloud Composer 1 환경 이름으로 바꿉니다.
    • COMPOSER_1_LOCATION을 Cloud Composer 1 환경이 있는 리전으로 바꿉니다.
  2. Cloud Composer 1 환경에서 풀을 내보냅니다.

    gcloud composer environments run COMPOSER_1_ENV \
        --location COMPOSER_1_LOCATION \
         pool -- -e /home/airflow/gcs/data/pools.json
    

    다음과 같이 바꿉니다.

    • COMPOSER_1_ENV를 Cloud Composer 1 환경 이름으로 바꿉니다.
    • COMPOSER_1_LOCATION을 Cloud Composer 1 환경이 있는 리전으로 바꿉니다.
  3. Cloud Composer 2 환경의 버킷 URI를 가져옵니다.

    1. 다음 명령어를 실행합니다.

      gcloud composer environments describe COMPOSER_2_ENV \
          --location COMPOSER_2_LOCATION \
           --format="value(config.dagGcsPrefix)"
      

      다음과 같이 바꿉니다.

      • COMPOSER_2_ENV를 Cloud Composer 2 환경 이름으로 바꿉니다.
      • COMPOSER_2_LOCATION을 환경이 위치한 리전으로 바꿉니다.
    2. 출력에서 /dags 폴더를 삭제합니다. 결과는 Cloud Composer 2 환경의 버킷의 URI입니다.

      예를 들어 gs://us-central1-example-916807e1-bucket/dagsgs://us-central1-example-916807e1-bucket으로 변경합니다.

  4. 변수와 풀을 포함한 JSON 파일을 Cloud Composer 2 환경으로 전송합니다.

    gcloud composer environments storage data export \
        --destination=COMPOSER_2_BUCKET/data \
        --environment=COMPOSER_1_ENV \
        --location=COMPOSER_1_LOCATION \
        --source=variables.json
    
    gcloud composer environments storage data export \
        --destination=COMPOSER_2_BUCKET/data \
        --environment=COMPOSER_1_ENV \
        --location=COMPOSER_1_LOCATION \
        --source=pools.json
    

    다음과 같이 바꿉니다.

    • COMPOSER_2_BUCKET을 이전 단계에서 가져온 Cloud Composer 2 환경 버킷의 URI로 바꿉니다.
    • COMPOSER_1_ENV를 Cloud Composer 1 환경 이름으로 바꿉니다.
    • COMPOSER_1_LOCATION을 Cloud Composer 1 환경이 있는 리전으로 바꿉니다.
  5. 변수 및 풀을 Cloud Composer 2로 가져옵니다.

    gcloud composer environments run \
        COMPOSER_2_ENV \
        --location COMPOSER_2_LOCATION \
        variables import \
        -- /home/airflow/gcs/data/variables.json
    
    gcloud composer environments run \
        COMPOSER_2_ENV \
        --location COMPOSER_2_LOCATION \
        pools import \
        -- /home/airflow/gcs/data/pools.json
    
  6. 변수 및 풀을 가져왔는지 확인합니다.

    gcloud composer environments run \
        COMPOSER_2_ENV \
        --location COMPOSER_2_LOCATION \
        variables list
    
    gcloud composer environments run \
        COMPOSER_2_ENV \
        --location COMPOSER_2_LOCATION \
        pools list
    
  7. 버킷에서 JSON 파일을 삭제합니다.

    gcloud composer environments storage data delete \
        variables.json \
        --environment=COMPOSER_2_ENV \
        --location=COMPOSER_2_LOCATION
    
    gcloud composer environments storage data delete \
        pools.json \
        --environment=COMPOSER_2_ENV \
        --location=COMPOSER_2_LOCATION
    
    gcloud composer environments storage data delete \
        variables.json \
        --environment=COMPOSER_1_ENV \
        --location=COMPOSER_1_LOCATION
    
    gcloud composer environments storage data delete \
        pools.json \
        --environment=COMPOSER_1_ENV \
        --location=COMPOSER_1_LOCATION
    

7단계: Cloud Composer 1 환경 버킷에서 기타 데이터 전송

Cloud Composer 1 환경 버킷에서 플러그인 및 기타 데이터 전송

gcloud

  1. 플러그인을 Cloud Composer 2 환경으로 전송합니다. 이렇게 하려면 Cloud Composer 1 환경의 버킷에서 Cloud Composer 2 환경의 버킷에 있는 /plugins 폴더로 플러그인을 내보냅니다.

    gcloud composer environments storage plugins export \
        --destination=COMPOSER_2_BUCKET/plugins \
        --environment=COMPOSER_1_ENV \
        --location=COMPOSER_1_LOCATION
    
  2. /plugins 폴더를 성공적으로 가져왔는지 확인합니다.

    gcloud composer environments storage plugins list \
        --environment=COMPOSER_2_ENV \
        --location=COMPOSER_2_LOCATION
    
  3. Cloud Composer 1 환경에서 Airflow 2 환경으로 /data 폴더를 내보냅니다.

    gcloud composer environments storage data export \
        --destination=COMPOSER_2_BUCKET/data \
        --environment=COMPOSER_1_ENV \
        --location=COMPOSER_1_LOCATION
    
  4. /data 폴더를 성공적으로 가져왔는지 확인합니다.

    gcloud composer environments storage data list \
        --environment=COMPOSER_2_ENV \
        --location=COMPOSER_2_LOCATION
    

8단계: 연결 전송

Airflow 1.10.15는 기존 연결을 지원하지 않습니다. 연결을 전송하려면 Cloud Composer 2 환경에서 Cloud Composer 1 환경의 연결을 수동으로 만들어야 합니다.

gcloud

  1. Cloud Composer 1 환경에서 연결 목록을 가져오려면 다음을 실행합니다.

    gcloud composer environments run COMPOSER_1_ENV \
        --location COMPOSER_1_LOCATION \
         connections -- --list
    
  2. Cloud Composer 2 환경에서 새 연결을 만들려면 gcloud를 통해 connections Airflow CLI 명령어를 실행합니다. 예를 들면 다음과 같습니다.

    gcloud composer environments run \
        COMPOSER_2_ENV \
        --location COMPOSER_2_LOCATION \
        connections add \
        -- --conn-host postgres.example.com \
        --conn-port 5432 \
        --conn-type postgres \
        --conn-login example_user \
        --conn-password example_password \
        --conn-description "Example connection" \
        example_connection
    

9단계: 사용자 계정 전송

이 단계에서는 사용자를 수동으로 만들어서 이를 전송하는 방법을 설명합니다.

Airflow 1.10.15에서는 사용자 내보내기가 지원되지 않습니다. 사용자 및 연결을 전송하려면 Airflow 2 환경에서 Cloud Composer 1 환경의 새 사용자 계정을 수동으로 만듭니다.

Airflow UI

  1. Cloud Composer 1 환경에서 사용자 목록을 보려면 다음 안내를 따르세요.

    1. Cloud Composer 1 환경에 대해 Airflow 웹 인터페이스를 엽니다.

    2. 관리자 > 사용자로 이동합니다.

  2. Cloud Composer 2 환경에서 사용자를 만들려면 다음 안내를 따르세요.

    1. Cloud Composer 2 환경에 대해 Airflow 웹 인터페이스를 엽니다.

    2. 보안 > 사용자 나열로 이동합니다.

    3. 새 레코드 추가를 클릭합니다.

gcloud

  1. Airflow 1에서는 gcloud를 통해 사용자 목록을 볼 수 없습니다. Airflow UI를 사용하세요.

  2. Cloud Composer 2 환경에서 새 사용자 계정을 만들려면 gcloud를 통해 users create Airflow CLI 명령어를 실행합니다. 예를 들면 다음과 같습니다.

    gcloud composer environments run \
        COMPOSER_2_ENV \
        --location COMPOSER_2_LOCATION \
        users create \
        -- --username example_username \
        --firstname Example-Name \
        --lastname Example-Surname \
        --email example-user@example.com \
        --use-random-password \
        --role Op
    

    다음과 같이 바꿉니다.

    • COMPOSER_2_ENV를 Cloud Composer 2 환경 이름으로 바꿉니다.
    • COMPOSER_2_LOCATION을 Cloud Composer 2 환경이 있는 리전으로 바꿉니다.
    • 사용자 역할을 포함하여 모든 사용자 구성 매개변수를 Cloud Composer 1 환경의 값으로 바꿉니다.

10단계: DAG가 Airflow 2에 맞게 준비되었는지 확인

DAG를 Cloud Composer 1 환경으로 전송하기 전 다음을 확인합니다.

  1. DAG의 업그레이드 확인 스크립트가 성공적으로 실행되었고 남아 있는 호환성 문제가 없습니다.

  2. DAG에서 올바른 가져오기 문을 사용합니다.

    예를 들어 BigQueryCreateDataTransferOperator의 새 가져오기 문은 다음과 같습니다.

    from airflow.providers.google.cloud.operators.bigquery_dts \
        import BigQueryCreateDataTransferOperator
    
  3. DAG가 Airflow 2에 맞게 업그레이드되었습니다. 이 변경사항은 Airflow 1.10.14 이상 버전과 호환됩니다.

11단계: DAG를 Cloud Composer 2 환경에 전송

환경 간에 DAG를 전송할 때는 다음과 같은 잠재적 문제가 발생할 수 있습니다.

  • 두 환경 모두에 DAG가 사용 설정(일시중지되지 않음)된 경우 각 환경은 예약된 일정에 따라 자체 DAG 사본을 실행합니다. 그로 인해 동일한 데이터 및 실행 시간에 중복된 DAG 실행이 발생할 수 있습니다.

  • DAG 포착 때문에 Airflow에서 DAG에 지정된 시작 날짜부터 시작되는 추가 DAG 실행을 예약합니다. 새 Airflow 인스턴스가 Cloud Composer 1 환경의 DAG 실행 기록을 고려하지 않기 때문입니다. 이로 인해 지정된 시작 날짜부터 시작되는 다수의 DAG 실행 작업이 예약될 수 있습니다.

중복된 DAG 실행 방지

Cloud Composer 2 환경, Airflow 2 환경에서 dags_are_paused_at_creation 옵션에 대해 Airflow 구성 옵션 재정의를 추가합니다. 이 변경 후에는 모든 새로운 DAG가 기본적으로 일시중지됩니다.

섹션
core dags_are_paused_at_creation True

추가 또는 누락 DAG 실행 방지

실행 날짜가 달라지거나 겹치지 않도록 하려면 Cloud Composer 2에서 catchup을 사용 중지합니다. 이렇게 하면 Cloud Composer 2 환경에 DAG를 업로드한 후 Airflow가 Cloud Composer 1 환경에서 이미 실행된 DAG 실행을 예약하지 않습니다. catchup_by_default 옵션에 대해 Airflow 구성 옵션 재정의를 추가합니다.

섹션
scheduler catchup_by_default False

DAG를 Cloud Composer 2 환경으로 전송

DAG를 Cloud Composer 2 환경으로 전송하려면 다음 안내를 따르세요.

  1. Cloud Composer 1 환경에서 Cloud Composer 2 환경으로 DAG를 업로드합니다. airflow_monitoring.py DAG를 건너뜁니다.

  2. DAG는 구성 재정의로 인해 Cloud Composer 2 환경에서 일시 중지됩니다. 따라서 DAG 실행이 예약되지 않습니다.

  3. Airflow 웹 인터페이스에서 DAG로 이동하여 보고된 DAG 구문 오류를 확인합니다.

  4. DAG를 전송할 계획인 경우:

    1. Cloud Composer 1 환경에서 DAG를 일시 중지합니다.

    2. Cloud Composer 2 환경에서 DAG 일시 중지를 취소합니다.

    3. 새 DAG 실행이 올바른 시간에 예약되었는지 확인합니다.

    4. Cloud Composer 2 환경에서 DAG가 실행되도록 기다린 후 실행이 성공했는지 확인합니다. DAG 실행에 성공했으면 Cloud Composer 1 환경에서 일시 중지를 취소합니다. 이렇게 하면 동일한 시간 및 날짜의 DAG 실행이 Cloud Composer 1 환경에서 수행됩니다.

  5. 특정 DAG 실행이 실패하면 Cloud Composer 2에서 성공적으로 실행될 때까지 DAG 문제 해결을 시도합니다.

    필요한 경우 언제든지 DAG의 Cloud Composer 1 버전으로 대체하고 Cloud Composer 2에서 실패한 DAG 실행을 Cloud Composer 1 환경에서 실행할 수 있습니다.

    1. Cloud Composer 2 환경에서 DAG를 일시 중지합니다.

    2. Cloud Composer 1 환경에서 DAG의 일시 중지를 취소합니다. 이 일정은 Cloud Composer 1 환경에서 DAG가 일시 중지된 시간 동안 DAG 실행을 catchup합니다.

12단계: Cloud Composer 2 환경 모니터링

모든 DAG 및 구성을 Cloud Composer 2 환경으로 전송한 후 잠재적인 문제, 실패한 DAG 실행, 전반적인 환경 상태를 모니터링합니다. Cloud Composer 2 환경이 충분한 시간 동안 문제없이 실행되면 Cloud Composer 1 환경을 삭제해도 됩니다.

다음 단계