본문 바로가기
CSP (Cloud Service Provider)/GCP

composer 업데이트 (수동 마이그레이션)

by BTC_XOXO 2023. 6. 9.

베하~

안녕하세요 3대 5000의 man, xoxo 입니다.

지난 주에 이어 이번주에는 composer 업데이트 (수동 마이그레이션)에 대해서 알아보겠습니다.


composer 환경 구성 목표


현재 환경 버전 -> 목표 환경 버전

Composer 버전 1.18.7 → Composer버전 2.1.15
Airflow 버전 2.2.3→ Airflow버전 2.5.1

지난주와 다른 것은 지난주는 Airflow도 1버전이였지만 이번주는 Airflow가 2일 때 쓰는 업데이트 방법입니다.

  • 마이그레이션 시 기존 composer 이름을 사용하지 못함

작업 방법

  • COMPOSER_1_ENV를 Cloud Composer 1 환경 이름으로 바꿉니다.
  • COMPOSER_1_LOCATION을 Cloud Composer 1 환경이 있는 리전으로 바꿉니다.
  • COMPOSER_2_ENV를 Cloud Composer 2 환경 이름으로 바꿉니다.
  • COMPOSER_2_LOCATION을 환경이 위치한 리전으로 바꿉니다.

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

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

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)"

 

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

- 자신이 원하는 사양에 알맞게 Composer 2 생성

 

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

- composer 1 환경에서 쓰던 PyPI 패키지를 console에서 설치합니다.

- 형식은 Name / Version (==을 붙이고 버전을 기입 ex. ==4.2.3)

composer 2 환경에서 PYPI PACKAGES 탭에서 설치 가능

4단계: 변수 및 풀 전송

 

  1. Cloud Composer 1 환경에서 변수를 내보냅니다.
    gcloud composer environments run \
        COMPOSER_1_ENV \
        --location COMPOSER_1_LOCATION \
         variables export -- /home/airflow/gcs/data/variables.json
    
     
  2. Cloud Composer 1 환경에서 풀을 내보냅니다.
    gcloud composer environments run \
        COMPOSER_1_ENV \
        --location COMPOSER_1_LOCATION \
         pools export -- /home/airflow/gcs/data/pools.json
    
  3. Cloud Composer 2 환경의 버킷 URI를 가져옵니다.
    1. 다음 명령어를 실행합니다.
      gcloud composer environments describe COMPOSER_2_ENV \
          --location COMPOSER_2_LOCATION \
           --format="value(config.dagGcsPrefix)"
      
    2. 출력에서 /dags 폴더를 삭제합니다. 결과는 Cloud Composer 2 환경의 버킷의 URI입니다.
    3. 예를 들어 gs://us-central1-example-916807e1-bucket/dags를 gs://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로 바꿉니다.
  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

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

  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

6단계: 사용자 계정 전송

  1. 사용자 계정을 해당 환경 버킷의 /data 폴더에 있는 파일로 내보냅니다.
    gcloud composer environments run \
        COMPOSER_1_ENV \
        --location COMPOSER_1_LOCATION \
        users export -- /home/airflow/gcs/data/users.json
    
  2. 이 파일을 Cloud Composer 2 환경 버킷으로 내보냅니다.
    gcloud composer environments storage data export \
        --destination=COMPOSER_2_BUCKET/data \
        --environment=COMPOSER_1_ENV \
        --location=COMPOSER_1_LOCATION \
        --source=users.json
    
  3. 이 파일에서 Cloud Composer 2 환경으로 사용자 계정을 가져옵니다.
    gcloud composer environments run \
        COMPOSER_2_ENV \
        --location COMPOSER_2_LOCATION \
        users import \
        -- /home/airflow/gcs/data/users.json
    
  4. 두 환경 모두에서 JSON 파일을 삭제합니다.
    gcloud composer environments storage data delete \
        --environment=COMPOSER_1_ENV \
        --location=COMPOSER_1_LOCATION  \
        users.json
    
     
    gcloud composer environments storage data delete \
        --environment=COMPOSER_2_ENV \
        --location=COMPOSER_2_LOCATION  \
        users.json
  • COMPOSER_2_BUCKET을 이전 단계에서 가져온 Cloud Composer 2 환경 버킷의 URI로 바꿉니다.

 

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

7 - 1. 중복된 DAG 실행 방지

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

섹션키값
core dags_are_paused_at_creation True

참고: 모든 DAG를 Cloud Composer 2 환경으로 전송한 후 이 재정의를 삭제할 수 있습니다.

 

7 - 2. 추가 또는 누락 DAG 실행 방지

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

섹션키값
scheduler catchup_by_default False

위와 같이 설정 한 화면

7 - 3. 기존 환경 (composer 1에서 dag 파일 전송하기)

 

DAG를 전송할 계획

  1. Cloud Composer 1 환경에서 DAG를 일시 중지합니다.
  2. Cloud Composer 2 환경에서 DAG 일시 중지를 취소합니다.
  3. 새 DAG 실행이 올바른 시간에 예약되었는지 확인합니다.
  4. Cloud Composer 2 환경에서 DAG가 실행되도록 기다린 후 실행이 성공했는지 확인합니다.

8단계: DAG 오류 확인 및 추후 1버전 삭제

  • 충분한 시간 모니터링 후 기존 composer 1 삭제

 

다들 위의 내용을 참고하여 composer 환경을 1에서 2로 업그레이드 하는데에 도움이 되었으면 좋겠습니다~

 

| 참조


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

 

 

 

'CSP (Cloud Service Provider) > GCP' 카테고리의 다른 글

Google Cloud SQL 특징과 hands-on  (1) 2023.06.09
Site to Site VPN (GCP)  (0) 2023.06.09
composer 업데이트 (스냅샷을 이용한 마이그레이션)  (0) 2023.06.02
Shared VPC  (0) 2023.05.29
[GCP] BeyondCorp Enterprise  (0) 2023.05.24

댓글