Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
이 페이지에서는 기존 Cloud Composer 1, Airflow 1 환경에서 Cloud Composer 2, Airflow 2로 DAG, 데이터, 구성을 전송하는 방법을 설명합니다.
기타 마이그레이션 가이드
| 보낸사람 | 받는사람 | 메서드 | 가이드 | 
|---|---|---|---|
| Cloud Composer 2 | Cloud Composer 3 | 마이그레이션 스크립트를 사용하여 단계별 마이그레이션 | 스크립트 이전 가이드 | 
| Cloud Composer 2 | Cloud Composer 3 | 스냅샷을 사용하여 단계별 마이그레이션 | 스냅샷 마이그레이션 가이드 | 
| Cloud Composer 1, Airflow 2 | Cloud Composer 3 | 스냅샷을 사용하여 단계별 마이그레이션 | 스냅샷 마이그레이션 가이드 | 
| Cloud Composer 1, Airflow 2 | Cloud Composer 2 | 스냅샷을 사용하여 단계별 마이그레이션 | 스냅샷 마이그레이션 가이드 | 
| Cloud Composer 1, Airflow 2 | Cloud Composer 2 | 단계별 수동 전송 | 수동 마이그레이션 가이드 | 
| Cloud Composer 1, Airflow 1 | Cloud Composer 2, Airflow 2 | 스냅샷을 사용하여 단계별 마이그레이션 | 스냅샷 마이그레이션 가이드 | 
| Cloud Composer 1, Airflow 1 | Cloud Composer 2, Airflow 2 | 단계별 수동 전송 | 이 가이드 | 
| Cloud Composer 1, Airflow 1 | Cloud Composer 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 2.0 이상으로 업그레이드 가이드의 DAG 업그레이드 섹션을 참조하세요.
발생할 수 있는 일반적인 문제 중에 호환되지 않는 가져오기 경로와 관련된 문제가 있습니다. 이 호환성 문제를 해결하는 방법에 대한 자세한 내용은 Airflow 2.0 이상으로 업그레이드 가이드의 백포트 제공업체 섹션을 참조하세요.
3단계: 구성 재정의, 커스텀 PyPI 패키지, 환경 변수 목록 가져오기
콘솔
Cloud Composer 1 환경의 구성 재정의 커스텀 PyPI 패키지, 환경 변수 목록을 가져옵니다.
- Google Cloud 콘솔에서 환경 페이지로 이동합니다. 
- Cloud Composer 1 환경을 선택합니다. 
- 환경 변수 탭에서 환경 변수를 확인합니다. 
- Airflow 구성 재정의 탭에서 구성 재정의를 확인합니다. 
- 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 환경을 만듭니다. 선택한 리소스 요구와 일치하는 환경 사전 설정으로 시작하고, 나중에 환경을 더 확장 및 최적화할 수 있습니다.
콘솔
Cloud Composer 2 환경을 만들고, 구성 재정의 및 환경 변수를 지정합니다.
또는 환경을 만든 후 Airflow 구성 및 환경 변수를 재정의할 수 있습니다.
Airflow 1의 일부 구성 옵션은 Airflow 2에서 다른 이름 및 섹션을 사용합니다. 자세한 내용은 구성 변경사항을 참조하세요.
gcloud
Cloud Composer 2 환경을 만들고, 구성 재정의 및 환경 변수를 지정합니다.
또는 환경을 만든 후 Airflow 구성 및 환경 변수를 재정의할 수 있습니다.
Airflow 1의 일부 구성 옵션은 Airflow 2에서 다른 이름 및 섹션을 사용합니다. 자세한 내용은 구성 변경사항을 참조하세요.
Terraform
Cloud Composer 1 환경의 구성에 따라 Cloud Composer 2 환경을 만듭니다.
- Cloud Composer 1 환경의 구성을 복사합니다.
- 환경의 이름을 변경합니다.
- google-beta제공업체를 사용합니다.- resource "google_composer_environment" "example_environment_composer_2" { provider = google-beta # ... }
- config.software_config블록에서 Cloud Composer 2 이미지를 지정합니다.- software_config { image_version = "composer-2.14.4-airflow-2.10.5" # ... }
- 아직 지정하지 않았으면 구성 재정의 및 환경 변수를 지정합니다. 
- config.software_config.pypi_packages블록에서 커스텀 PyPI 패키지를 지정합니다.- software_config { # ... pypi_packages = { numpy = "" scipy = ">=1.1.0" } }
5단계: Cloud Composer 2 환경에 PyPI 패키지 설치
Cloud Composer 2 환경이 생성된 다음 여기에 커스텀 PyPI 패키지를 설치합니다.
콘솔
- Google Cloud 콘솔에서 환경 페이지로 이동합니다. 
- Cloud Composer 2 환경을 선택합니다. 
- PyPI 패키지 탭으로 이동하여 편집을 클릭합니다. 
- Cloud Composer 1 환경에서 PyPI 패키지 요구사항을 복사합니다. 저장을 클릭하고 환경이 업데이트될 때까지 기다립니다. 
gcloud
- 커스텀 PyPI 패키지 목록이 포함된 - requirements.txt파일을 만듭니다.- numpy scipy>=1.1.0
- 환경을 업데이트하고 - 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
- 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 환경이 있는 리전으로 바꿉니다.
 
- 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 환경이 있는 리전으로 바꿉니다.
 
- Cloud Composer 2 환경의 버킷 URI를 가져옵니다. - 다음 명령어를 실행합니다. - gcloud composer environments describe COMPOSER_2_ENV \ --location COMPOSER_2_LOCATION \ --format="value(config.dagGcsPrefix)"- 다음과 같이 바꿉니다. - COMPOSER_2_ENV를 Cloud Composer 2 환경 이름으로 바꿉니다.
- COMPOSER_2_LOCATION을 환경이 위치한 리전으로 바꿉니다.
 
- 출력에서 - /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로 바꿉니다.
- COMPOSER_1_ENV를 Cloud Composer 1 환경 이름으로 바꿉니다.
- COMPOSER_1_LOCATION을 Cloud Composer 1 환경이 있는 리전으로 바꿉니다.
 
- 변수 및 풀을 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
7단계: Cloud Composer 1 환경 버킷에서 기타 데이터 전송
Cloud Composer 1 환경 버킷에서 플러그인 및 기타 데이터 전송
gcloud
- 플러그인을 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
8단계: 연결 전송
Airflow 1.10.15는 기존 연결을 지원하지 않습니다. 연결을 전송하려면 Cloud Composer 2 환경에서 Cloud Composer 1 환경의 연결을 수동으로 만들어야 합니다.
gcloud
- Cloud Composer 1 환경에서 연결 목록을 가져오려면 다음을 실행합니다. - gcloud composer environments run COMPOSER_1_ENV \ --location COMPOSER_1_LOCATION \ connections -- --list
- Cloud Composer 2 환경에서 새 연결을 만들려면 - gcloud를 통해- connectionsAirflow 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
- Cloud Composer 1 환경에서 사용자 목록을 보려면 다음 안내를 따르세요. - Cloud Composer 1 환경에 대해 Airflow 웹 인터페이스를 엽니다. 
- 관리자 > 사용자로 이동합니다. 
 
- Cloud Composer 2 환경에서 사용자를 만들려면 다음 안내를 따르세요. - Cloud Composer 2 환경에 대해 Airflow 웹 인터페이스를 엽니다. 
- 보안 > 사용자 나열로 이동합니다. 
- 새 레코드 추가를 클릭합니다. 
 
gcloud
- 
Airflow 1에서는 gcloud를 통해 사용자 목록을 볼 수 없습니다. Airflow UI를 사용하세요.
- Cloud Composer 2 환경에서 새 사용자 계정을 만들려면 - gcloud를 통해- users createAirflow 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 환경으로 전송하기 전 다음을 확인합니다.
- DAG가 성공적으로 실행되고 남아 있는 호환성 문제가 없습니다. 
- DAG에서 올바른 가져오기 문을 사용합니다. - 예를 들어 - BigQueryCreateDataTransferOperator의 새 가져오기 문은 다음과 같습니다.- from airflow.providers.google.cloud.operators.bigquery_dts \ import BigQueryCreateDataTransferOperator
- 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 환경으로 전송하려면 다음 안내를 따르세요.
- Cloud Composer 1 환경에서 Cloud Composer 2 환경으로 DAG를 업로드합니다. - airflow_monitoring.pyDAG를 건너뜁니다.
- DAG는 구성 재정의로 인해 Cloud Composer 2 환경에서 일시 중지됩니다. 따라서 DAG 실행이 예약되지 않습니다. 
- Airflow 웹 인터페이스에서 DAG로 이동하여 보고된 DAG 구문 오류를 확인합니다. 
- DAG를 전송할 계획인 경우: - Cloud Composer 1 환경에서 DAG를 일시 중지합니다. 
- Cloud Composer 2 환경에서 DAG 일시 중지를 취소합니다. 
- 새 DAG 실행이 올바른 시간에 예약되었는지 확인합니다. 
- Cloud Composer 2 환경에서 DAG가 실행되도록 기다린 후 실행이 성공했는지 확인합니다. DAG 실행에 성공했으면 Cloud Composer 1 환경에서 일시 중지를 취소합니다. 이렇게 하면 동일한 시간 및 날짜의 DAG 실행이 Cloud Composer 1 환경에서 수행됩니다. 
 
- 특정 DAG 실행이 실패하면 Cloud Composer 2에서 성공적으로 실행될 때까지 DAG 문제 해결을 시도합니다. - 필요한 경우 언제든지 DAG의 Cloud Composer 1 버전으로 대체하고 Cloud Composer 2에서 실패한 DAG 실행을 Cloud Composer 1 환경에서 실행할 수 있습니다. - Cloud Composer 2 환경에서 DAG를 일시 중지합니다. 
- 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 환경을 삭제해도 됩니다.