베하~
안녕하세요 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)
4단계: 변수 및 풀 전송
- Cloud Composer 1 환경에서 변수를 내보냅니다.
gcloud composer environments run \ COMPOSER_1_ENV \ --location COMPOSER_1_LOCATION \ variables export -- /home/airflow/gcs/data/variables.json
- Cloud Composer 1 환경에서 풀을 내보냅니다.
gcloud composer environments run \ COMPOSER_1_ENV \ --location COMPOSER_1_LOCATION \ pools export -- /home/airflow/gcs/data/pools.json
- Cloud Composer 2 환경의 버킷 URI를 가져옵니다.
- 다음 명령어를 실행합니다.
gcloud composer environments describe COMPOSER_2_ENV \ --location COMPOSER_2_LOCATION \ --format="value(config.dagGcsPrefix)"
- 출력에서 /dags 폴더를 삭제합니다. 결과는 Cloud Composer 2 환경의 버킷의 URI입니다.
- 예를 들어 gs://us-central1-example-916807e1-bucket/dags를 gs://us-central1-example-916807e1-bucket으로 변경합니다.
- 다음 명령어를 실행합니다.
- 변수와 풀을 포함한 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로 바꿉니다.
- 변수 및 풀을 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
- 변수 및 풀을 가져왔는지 확인합니다.
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
- 버킷에서 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 환경 버킷에서 기타 데이터 전송
- 플러그인을 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
- /plugins 폴더를 성공적으로 가져왔는지 확인합니다.
gcloud composer environments storage plugins list \ --environment=COMPOSER_2_ENV \ --location=COMPOSER_2_LOCATION
- 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
- /data 폴더를 성공적으로 가져왔는지 확인합니다.
gcloud composer environments storage data list \ --environment=COMPOSER_2_ENV \ --location=COMPOSER_2_LOCATION
6단계: 사용자 계정 전송
- 사용자 계정을 해당 환경 버킷의 /data 폴더에 있는 파일로 내보냅니다.
gcloud composer environments run \ COMPOSER_1_ENV \ --location COMPOSER_1_LOCATION \ users export -- /home/airflow/gcs/data/users.json
- 이 파일을 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
- 이 파일에서 Cloud Composer 2 환경으로 사용자 계정을 가져옵니다.
gcloud composer environments run \ COMPOSER_2_ENV \ --location COMPOSER_2_LOCATION \ users import \ -- /home/airflow/gcs/data/users.json
- 두 환경 모두에서 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를 전송할 계획
- Cloud Composer 1 환경에서 DAG를 일시 중지합니다.
- Cloud Composer 2 환경에서 DAG 일시 중지를 취소합니다.
- 새 DAG 실행이 올바른 시간에 예약되었는지 확인합니다.
- 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 |
댓글