알려진 문제

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

이 페이지에는 알려진 Cloud Composer 문제가 나열되어 있습니다. 이러한 문제의 수정은 현재 진행 중이며 향후 버전에서 제공될 예정입니다.

일부 문제는 이전 버전에 영향을 미치며 환경을 업그레이드하여 해결할 수 있습니다.

RFC 1918 이외의 주소 범위는 포드 및 서비스에 부분적으로 지원됩니다.

Cloud Composer는 GKE에 의존하여 포드 및 서비스에 비RFC 1918 주소를 지원합니다. 현재 Cloud Composer에서 RFC 1918 이외의 범위 목록만 지원됩니다.

  • 100.64.0.0/10
  • 192.0.0.0/24
  • 192.0.2.0/24
  • 192.88.99.0/24
  • 198.18.0.0/15
  • 198.51.100.0/24
  • 203.0.113.0/24
  • 240.0.0.0/4

Composer 1.10.2 및 Composer 1.10.3에서 DAG 직렬화가 사용 설정된 경우 Airflow UI에 작업 로그가 표시되지 않습니다.

Composer 버전 1.10.2 및 1.10.3을 사용하는 환경에서 DAG 직렬화를 사용 설정하면 로그가 Airflow 웹 서버에 표시되지 않습니다. 이 문제를 해결하려면 버전 1.10.4 이상으로 업그레이드하세요.

Cloud Composer에서 예약 중에 간헐적 태스크 실패

이 문제는 태스크 실행 중에 태스크 인스턴스의 Airflow 스케줄러에 표시됩니다. 그러나 로그에서는 태스크 실패 원인을 설명하지 않으며 Airflow 작업자와 Airflow 스케줄러는 비교적 정상 상태로 보입니다.

Airflow 스케줄러의 오류 메시지는 다음 오류와 비슷할 수 있습니다.

Executor reports task instance <TaskInstance: xx.xxxx scheduled__2022-04-21T06:00:00+00:00 [queued]> finished (failed) although the task says its queued. (Info: None) Was the task killed externally?

또는 Airflow 작업자에 다음 오류와 비슷한 오류가 있을 수 있습니다.

Log file is not found: gs://$BUCKET_NAME/logs/$DAG_NAME/$TASK_NAME/2023-01-25T05:01:17.044759+00:00/1.log.
The task might not have been executed or worker executing it might have finished abnormally (e.g. was evicted).

Airflow의 오래된 문제로 인해 발생하는 오류를 방지하려면 사전에 태스크 및 DAG 수준 모두에서 적절한 재시도 전략을 구현하는 것이 좋습니다. 이러한 조치를 통합하면 시스템에서 이러한 오류의 영향을 효과적으로 완화할 수 있으므로 워크플로의 전반적인 안정성과 복원력이 강화됩니다.

GKE 워크로드 아이덴티티는 지원되지 않음

이 문제는 Cloud Composer 1 환경에만 적용됩니다. Cloud Composer 2 환경에는 워크로드 아이덴티티가 사용됩니다.

Cloud Composer 환경 클러스터에는 워크로드 아이덴티티를 사용 설정할 수 없습니다. 따라서 Security Command Center에 WORKLOAD_IDENTITY_DISABLED 결과가 표시될 수 있습니다.

업데이트 중에 추가된 환경 라벨은 완전히 반영되지 않습니다.

업데이트된 환경 라벨은 Compute Engine VM에 적용되지 않습니다. 이 문제를 해결하려면 수동으로 라벨을 적용합니다.

CVE-2020-14386 문제와 관련하여 GKE 업그레이드

Google에서는 모든 Cloud Composer 환경의 CVE-2020-14386 취약점을 해결하기 위해 노력하고 있습니다. 이 수정사항의 일환으로 기존의 모든 Cloud Composer의 GKE 클러스터가 새 버전으로 업데이트됩니다.

취약점을 즉시 해결하고자 하는 고객은 다음 고려사항에 대한 안내에 따라 Composer GKE 클러스터를 업그레이드할 수 있습니다.

1단계: 1.7.2 이전 버전의 Cloud Composer를 사용하는 경우 Cloud Composer의 최신 버전으로 업그레이드합니다. 버전 1.7.2 이상을 이미 사용 중이면 다음 단계로 이동합니다.

2단계: GKE 클러스터(마스터 및 노드)를 이 취약점에 대한 수정사항이 포함된 최신 1.15 패치 버전으로 업그레이드합니다.

Airflow 1.9.0에서 Airflow 1.10.x로 업그레이드한 뒤에는 Airflow 웹 서버에서 Airflow 작업 로그를 사용할 수 없습니다.

Airflow 1.10.x는 로그 파일의 이름 지정 규칙에 이전 버전과 호환되지 않는 변경사항을 도입했습니다. 이제 영역 정보가 Airflow 작업의 로그 이름에 추가됩니다.

Airflow 1.9.0은 로그 이름을 BUCKET/logs/DAG/2020-03-30T10:29:06/1.log 같은 형식으로 저장하고 예상합니다. Airflow 1.10.x는 로그 이름을 BUCKET/logs/DAG/2020-03-30T10:29:06+00:00/1.log 형식으로 저장하고 추정합니다.

따라서 Airflow 1.9.0에서 Airflow 1.10.x로 업그레이드하고 Airflow 1.9.0으로 실행되는 작업의 로그를 읽으려고 하면 Airflow 웹 서버에 다음과 같은 오류 메시지가 표시됩니다. Unable to read remote log from BUCKET/logs/DAG/2020-03-30T10:29:06+00:00/1.log

해결 방법: Cloud Storage 버킷에서 Airflow 1.9.0에서 생성한 로그의 이름을 BUCKET/logs/DAG/2020-03-30T10:29:06+00:00/1.log 형식을 사용하여 바꿉니다.

조직 정책 제약조건/compute.disableSerialPortLogging이 적용된 상태에서 Cloud Composer 환경을 만들 수 없습니다.

대상 프로젝트에 constraints/compute.disableSerialPortLogging이 적용되면 Cloud Composer 환경 생성이 실패합니다.

진단

이 문제의 영향을 받는지 확인하려면 다음 절차를 따르세요.

Google Cloud 콘솔에서 GKE 메뉴로 이동합니다. GKE 메뉴로 이동

그런 다음 새로 만든 클러스터를 선택합니다. 다음 오류를 확인합니다.

Not all instances running in IGM after 123.45s.
Expect <number of desired instances in IGM>. Current errors:

Constraint constraints/compute.disableSerialPortLogging violated for
project <target project number>.

해결 방법:

  1. Cloud Composer 환경이 생성될 프로젝트에서 조직 정책을 사용 중지합니다.

    조직 정책은 상위 리소스(조직 또는 폴더)에서 사용 설정되었더라도 프로젝트 수준에서 언제든지 사용 중지할 수 있습니다. 자세한 내용은 부울 제약조건에 대한 정책 맞춤설정을 참조하세요.

  2. 제외 필터 사용

    직렬 포트 로그에 제외 필터를 사용하면 Logging에 직렬 콘솔 로그가 있으므로 조직 정책 사용 중지와 동일한 목표를 달성합니다. 자세한 내용은 제외 필터 페이지를 참조하세요.

Deployment Manager를 사용하여 VPC 서비스 제어로 보호되는 Google Cloud 리소스 관리

Composer는 Deployment Manager를 사용하여 Cloud Composer 환경의 구성요소를 만듭니다.

2020년 12월에 Deployment Manager를 사용하여 VPC 서비스 제어로 보호되는 리소스를 관리하려면 VPC 서비스 제어 구성을 추가로 수행해야 할 수 있다는 정보가 수신되었을 수 있습니다.

Composer를 사용하며 Deployment Manager의 공지에 언급된 Google Cloud 리소스를 관리하기 위해 Deployment Manager를 직접 사용하지 않는 경우에는 별도의 조치가 필요하지 않습니다.

GKE 클러스터가 삭제된 후 환경을 삭제할 수 없음

환경 자체를 삭제하기 전에 환경의 클러스터를 삭제하고 환경을 삭제하려고 시도하면 다음 오류가 발생합니다.

 Got error "" during CP_DEPLOYMENT_DELETING [Rerunning Task. ]

GKE 클러스터가 이미 삭제되었을 때 환경을 삭제하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 Deployment Manager 페이지를 엽니다.

    Deployment Manager 페이지 열기

  2. 다음 라벨로 표시된 모든 배포를 찾습니다.

    • goog-composer-environment:<environment-name>
    • goog-composer-location:<environment-location>.

    다음 설명 라벨로 표시된 두 가지 배포가 표시됩니다.

    • 이름이 <environment-location>-<environment-name-prefix>-<hash>-sd인 배포
    • 이름이 addons-<uuid>인 배포
  3. 이러한 두 배포에 아직 나열되어 있고 프로젝트에 있는(예: Pub/Sub 주제 및 구독) 리소스를 수동으로 삭제합니다. 방법은 다음과 같습니다.

    1. 배포를 선택합니다.

    2. 삭제를 클릭합니다.

    3. 2개 배포와 이러한 배포로 생성된 모든 리소스(예: VM, 부하 분산기, 디스크) 삭제 옵션을 선택하고 모두 삭제를 클릭합니다.

    삭제 작업이 실패하지만 남아 있던 리소스가 삭제됩니다.

  4. 다음 옵션 중 하나를 사용하여 배포를 삭제합니다.

    • Google Cloud 콘솔에서 두 배포를 다시 선택합니다. 삭제를 클릭한 후 2개 배포를 삭제하지만 생성된 리소스는 유지 옵션을 선택합니다.

    • gcloud 명령어를 실행하여 ABANDON 정책으로 배포를 삭제합니다.

      gcloud deployment-manager deployments delete addons-<uuid> \
          --delete-policy=ABANDON
      
      gcloud deployment-manager deployments delete <location>-<env-name-prefix>-<hash>-sd \
          --delete-policy=ABANDON
      
  5. Cloud Composer 환경을 삭제합니다.

Deployment Manager에 지원되지 않는 기능에 대한 정보 표시

Deployment Manager 탭에 다음 경고가 표시될 수 있습니다.

The deployment uses actions, which are an unsupported feature. We recommend
that you avoid using actions.

Cloud Composer가 소유하는 Deployment Manager의 배포의 경우 이 경고를 무시해도 됩니다.

'echo-airflow_monitoring' DAG에 속하는 'echo' 태스크의 중복 항목 경고

Airflow 로그에 다음 항목이 표시될 수 있습니다.

in _query db.query(q) File "/opt/python3.6/lib/python3.6/site-packages/MySQLdb/
connections.py", line 280, in query _mysql.connection.query(self, query)
_mysql_exceptions.IntegrityError: (1062, "Duplicate entry
'echo-airflow_monitoring-2020-10-20 15:59:40.000000' for key 'PRIMARY'")

이 오류는 Airflow DAG 및 태스크 처리에 영향을 주지 않으므로 무시해도 됩니다.

Airflow 로그에 이러한 경고가 표시되지 않도록 Cloud Composer 서비스를 개선하는 중입니다.

IAP(Identity-Aware Proxy) API가 VPC 서비스 제어 경계에 추가된 프로젝트에서 환경 생성 실패

VPC 서비스 제어가 사용 설정된 프로젝트에서 cloud-airflow-prod@system.gserviceaccount.com 계정은 환경을 만들기 위해 보안 경계에서 명시적인 액세스 권한이 필요합니다.

환경을 만들려면 다음 솔루션 중 하나를 사용하면 됩니다.

  • Cloud Identity-Aware Proxy APIIAP(Identity-Aware Proxy) TCP API를 보안 경계에 추가하지 않습니다.

  • YAML 조건 파일에서 다음 구성을 사용하여 cloud-airflow-prod@system.gserviceaccount.com 서비스 계정을 보안 경계의 구성원으로 추가합니다.

     - members:
        - serviceAccount:cloud-airflow-prod@system.gserviceaccount.com
    

compute.requireOsLogin 정책이 사용 설정되었을 때 Cloud Composer 1 환경 만들기가 실패함

프로젝트에서 compute.requireOsLogin 정책이 true로 설정된 경우 Cloud Composer 1 v1 환경 만들기 작업이 실패합니다.

Cloud Composer 1 환경을 만들려면 프로젝트에서 이 정책을 사용 중지합니다.

이 조직 정책에 대한 자세한 내용은 조직 정책 제약조건을 참조하세요.

compute.vmExternalIpAccess가 사용 중지되면 Cloud Composer 환경 만들기 또는 업그레이드가 실패함

공개 IP 모드에 구성된 Cloud Composer 소유의 GKE 클러스터는 해당 VM에 대해 외부 연결이 필요합니다. 따라서 compute.vmExternalIpAccess 정책은 외부 IP 주소를 사용한 VM 만들기를 금지할 수 없습니다. 이 조직 정책에 대한 자세한 내용은 조직 정책 제약조건을 참조하세요.

compute.vmCanIpForward 정책이 사용 중지되었을 때 Cloud Composer 환경 만들기가 실패함

VPC 기반이 아닌(별칭 IP 사용) 모드로 생성된 Cloud Composer 1 환경에서는 이 정책을 사용하여 사용 설정된 'IP 전달' 기능으로 VM 만들기를 허용해야 합니다. 이 조직 정책에 대한 자세한 내용은 조직 정책 제약조건을 참조하세요.

업로드된 DAG 파일의 첫 번째 DAG 실행에서 여러 개의 태스크가 실패함

DAG 파일을 업로드하면 첫 DAG의 처음 몇 개 태스크가 Unable to read remote log... 오류와 함께 실패하는 경우가 있습니다. 이 문제는 환경의 버킷, Airflow 작업자, 환경의 Airflow 스케줄러 간에 DAG 파일이 동기화되어 발생합니다. 이러한 동기화는 독립적으로 수행됩니다. 스케줄러가 DAG 파일을 가져와서 작업자가 실행하도록 예약하고, 작업자에 아직 DAG 파일이 없으면 태스크 실행이 실패합니다.

이 문제를 해결하기 위해 Cloud Composer 1.17.0-preview.9 이상의 버전에서 Airflow 2 환경은 기본적으로 실패한 태스크에 대해 재시도를 두 번 수행하도록 구성됩니다. 태스크가 실패하면 5분 간격으로 두 번 재시도됩니다.

Airflow 1에서 이 문제의 해결 방법을 사용하려면 core-default_task_retries Airflow 구성 옵션을 재정의하고 2 이상의 수로 설정합니다.

태스크가 Airflow 1.10.15 이하 버전에서 'OSError: [Errno 5] Input/output error'로 실패

Airflow 1 버전의 버그로 인해 일부 드문 경우에 Redis 큐에 태스크가 두 번 추가됩니다.

경우에 따라 로그 파일에 경합 상태가 발생하여 후속 태스크가 실패할 수 있습니다. Cloud Logging에서 OSError: [Errno 5] Input/output error, 태스크 시도 로그에서 Task is in the 'running' state which is not a valid state for execution.이 발생하면 태스크가 실패합니다.

이 버그는 Airflow 2에서 수정됩니다. Airflow 1의 장기 실행 태스크에서 이 문제가 발생할 경우 [celery_broker_transport_options]visibility_timeout Airflow 구성 옵션의 값을 늘립니다(기본값은 Composer 1.17.0의 경우 604800, 이전 환경의 경우 21600). 단기 실행 태스크의 경우 영향을 받는 태스크에 대해 추가 시도를 늘리거나 환경을 Airflow 2로 마이그레이션할 수 있습니다.

Dataproc/Dataflow 연산자가 Negsignal.SIGSEGV와 함께 실패함

이것은 Celery 작업자에서 사용될 때 grcpio 라이브러리의 간헐적인 문제입니다. 이 문제는 Airflow 1.10.14 이상 버전에 영향을 줍니다.

해결 방법은 해당 환경에 GRPC_POLL_STRATEGY=epoll1 환경 변수를 추가하여 grpcio 폴링 전략을 변경하는 것입니다. 이 해결 방법은 Cloud Composer 1.17.1 및 이상 버전에 이미 적용되어 있습니다.

GKE 버전에서 지원 중단된 베타 API의 지원 삭제 알림

Cloud Composer는 기본 Cloud Composer 소유의 GKE 클러스터를 관리합니다. DAG 및 코드에서 이러한 API를 명시적으로 사용하지 않는 한 GKE API 지원 중단에 대한 알림을 무시해도 됩니다. 필요한 경우 Cloud Composer가 마이그레이션을 처리합니다.

CVE-2021-25741 보안 문제와 관련하여 GKE 업그레이드

모든 기존 Cloud Composer의 GKE 클러스터는 CVE-2021-25741에 설명된 문제를 해결하여 새로운 GKE 버전으로 자동 업그레이드됩니다.

이 취약점을 즉시 해결하려면 클러스터 업그레이드 안내에 따라 환경의 GKE 클러스터를 업그레이드합니다.

  • Cloud Composer 1 환경 및 GKE 버전 1.18.x 이하가 설치된 경우 1.18.20-gke.4501로 업그레이드합니다.

  • Cloud Composer 1 환경 및 GKE 버전 1.19.x가 설치된 경우 1.19.14-gke.301로 업그레이드합니다.

  • Cloud Composer 2 환경 및 GKE 버전 1.21.x가 설치된 경우 1.21.4-gke.301로 업그레이드합니다.

Cloud Composer는 Apache Log4j 2 취약점(CVE-2021-44228)의 영향을 받지 않음

Apache Log4j 2 취약점(CVE-2021-44228)에 대한 대응으로 Cloud Composer는 자세한 조사를 실시했으며 Cloud Composer는 이 취약점 공격에 노출되지 않는다고 보고 있습니다.

환경의 Cloud Storage 버킷에 액세스할 때 Airflow 작업자 또는 스케줄러에 문제가 발생할 수 있음

Cloud Composer는 gcsfuse를 사용하여 환경 버킷의 /data 폴더에 액세스하고 Airflow 태스크 로그를 /logs 디렉터리에 저장합니다(사용 설정된 경우). gcsfuse가 과부하되거나 환경 버킷을 사용할 수 없는 경우 Airflow 태스크 인스턴스 실패가 발생하고 Airflow 로그에 Transport endpoint is not connected 오류가 표시될 수 있습니다.

해결책:

  • 환경 버킷에 로그 저장을 사용 중지합니다. Cloud Composer 2.8.0 이상 버전을 사용하여 환경을 만든 경우 이 옵션은 기본적으로 사용 중지되어 있습니다.
  • Cloud Composer 2.8.0 이상 버전으로 업그레이드합니다.
  • 대신 [celery]worker_concurrency를 줄이고 Airflow 작업자 수를 늘립니다.
  • DAG 코드에서 생성되는 로그의 양을 줄입니다.
  • DAG 구현을 위한 추천 및 권장사항을 따르고 태스크 재시도를 사용 설정합니다.

Airflow UI가 변경되면 플러그인이 다시 로드되지 않을 수 있음

플러그인이 다른 모듈을 가져오는 여러 파일로 구성된 경우 Airflow UI에서 플러그인이 다시 로드되어야 한다는 사실을 인식하지 못할 수 있습니다. 이 경우 Airflow 웹 서버를 다시 시작해야 합니다. 환경 변수를 추가하거나 PYPI 종속 항목을 설치 또는 제거하면 됩니다. Airflow 웹 서버를 다시 시작할 수도 있습니다.

Airflow 메타데이터 데이터베이스와 통신할 때의 간헐적인 문제

이 알려진 문제는 Cloud Composer 1에만 적용됩니다.

2021년 8월 12일 이전에 생성된 일부 Cloud Composer 1 환경(1.16.3 이하)에는 Airflow 메타데이터 DB와의 통신과 관련된 일시적인 문제가 발생할 수 있습니다.

이 문제가 발생하면 Airflow 태스크 로그에 다음 오류 메시지가 표시됩니다.

"Can't connect to MySQL server on 'airflow-sqlproxy-service.default.svc.cluster.local' (104)"

Cloud Composer팀은 이 문제를 해결하기 위해 노력하고 있습니다. 그동안 이 문제의 영향을 크게 받는다고 생각되면 다음을 수행하여 문제를 해결할 수 있습니다.

  1. Google Cloud 콘솔에서 영향을 받는 Cloud Composer 환경의 환경 구성 페이지로 이동합니다.
  2. 클러스터 세부정보 보기 링크를 따라 환경의 기본 GKE 클러스터로 이동합니다.
  3. 노드 탭으로 이동하여 노드 풀 섹션에 보이는 기본 풀을 클릭하세요.

    노드 풀 목록의 기본 풀
    그림 1. 노드 풀 목록의 기본 풀(확대하려면 클릭)
  4. 페이지 상단의 수정을 클릭합니다.

  5. 이미지 유형을 containerd를 포함한 Container-Optimized OS로 변경하고 구성을 다음과 같이 저장합니다.

    Docker에서 containerd로 노드 풀 이미지 유형 변경
    그림 2. Docker에서 containerd로 노드 풀 이미지 유형 변경(확대하려면 클릭)
  6. 변경사항이 제출되면 containerd를 컨테이너 런타임으로 사용하도록 default-pool 노드 풀이 재구성됩니다. 노드 풀을 재구성하는 동안 Airflow 태스크 일부가 실패할 수 있습니다. 이러한 태스크에서 재시도를 구성한 경우 노드 풀에서 작업이 완료되면 Airflow가 태스크를 다시 실행합니다.

환경 클러스터에 예약할 수 없는 상태의 워크로드가 있음

이 알려진 문제는 Cloud Composer 2에만 적용됩니다.

Cloud Composer 2에서는 환경이 생성된 후 환경 클러스터의 여러 워크로드가 예약할 수 없는 상태로 유지됩니다.

환경이 수직 확장되면 새 작업자 포드가 생성되고 Kubernetes에서 이를 실행하려고 시도합니다. 실행할 수 있는 무료 리소스가 없으면 작업자 포드는 예약 불가능으로 표시됩니다.

이 경우 클러스터 자동 확장 처리에서 노드를 더 추가하며 이는 몇 분 정도 걸립니다. 완료될 때까지 포드는 예약 불가능 상태로 유지되며 어떠한 태스크도 실행하지 않습니다.

Airflow 구성요소가 없는 노드에서 시작할 수 없는 composer-gcsfusecomposer-fluentd라는 예약 불가능한 DaemonSet 워크로드는 환경에 영향을 미치지 않습니다.

이 문제가 장시간(1시간 이상) 지속되면 클러스터 자동 확장 처리 로그를 확인할 수 있습니다. 다음 필터를 사용하여 로그 뷰어에서 로그를 찾을 수 있습니다.

resource.type="k8s_cluster"
logName="projects/<project-name>/logs/container.googleapis.com%2Fcluster-autoscaler-visibility"
resource.labels.cluster_name="<cluster-name>"

여기에는 클러스터 자동 확장 처리의 결정에 대한 정보가 포함됩니다. 클러스터를 수직 확장하거나 축소할 수 없는 이유를 알아보려면 noDecisionStatus를 펼칩니다.

Airflow UI에 액세스할 때 504 오류 발생

Airflow UI에 액세스할 때 504 Gateway Timeout 오류가 발생할 수 있습니다. 이 오류의 원인은 다음과 같습니다.

  • 일시적인 통신 문제입니다. 이 경우 나중에 Airflow UI에 액세스해 보세요. Airflow 웹 서버를 다시 시작할 수도 있습니다.
  • (Cloud Composer 2만 해당) 연결 문제입니다. Airflow UI를 영구적으로 사용할 수 없고 제한 시간 또는 504 오류가 발생하는 경우 환경에서 *.composer.cloud.google.com에 액세스할 수 있는지 확인하세요. 비공개 Google 액세스를 사용하고 private.googleapis.com 가상 IP를 통해 트래픽을 전송하거나, VPC 서비스 제어를 사용하고 restricted.googleapis.com 가상 IP를 통해 트래픽을 전송할 경우 Cloud DNS가 *.composer.cloud.google.com 도메인 이름으로도 구성됐는지 확인하세요.
  • 응답 없는 Airflow 웹 서버 오류 504가 지속되더라도 특정 시점에 Airflow UI에 계속 액세스할 수 있으면 과부하가 발생하여 Airflow 웹 서버가 응답하지 않을 수 있습니다. 웹 서버의 확장 및 성능 매개변수를 늘려보세요.

Airflow UI에 액세스할 때 502 오류 발생

502 Internal server exception 오류는 Airflow UI가 들어오는 요청을 처리할 수 없음을 나타냅니다. 이 오류의 원인은 다음과 같습니다.

  • 일시적인 통신 문제입니다. 나중에 Airflow UI에 액세스해 보세요.

  • 웹 서버를 시작할 수 없습니다. 웹 서버를 시작하려면 먼저 구성 파일을 동기화해야 합니다. 웹 서버 로그에서 GCS sync exited with 1: gcloud storage cp gs://<bucket-name>/airflow.cfg /home/airflow/gcs/airflow.cfg.tmp 또는 GCS sync exited with 1: gcloud storage cp gs://<bucket-name>/env_var.json.cfg /home/airflow/gcs/env_var.json.tmp와 비슷하게 표시된 로그 항목을 확인합니다. 이러한 오류가 표시되면 오류 메시지에 언급된 파일이 아직 환경의 버킷에 있는지 확인합니다.

    보관 정책 구성 등으로 인해 실수로 삭제된 경우 복원할 수 있습니다.

    1. 환경에 새 환경 변수를 설정합니다. 모든 변수 이름과 값을 사용할 수 있습니다.

    2. Airflow 구성 옵션을 재정의합니다. 존재하지 않는 Airflow 구성 옵션을 사용할 수 있습니다.

Airflow 2.2.3 이전 버전의 Airflow UI는 CVE-2021-45229에 취약함

CVE-2021-45229에 명시된 것처럼 'Trigger DAG with config(구성으로 DAG 트리거)' 화면은 origin 쿼리 인수를 통한 XSS 공격에 취약했습니다.

권장사항: Airflow 2.2.5를 지원하는 최신 Cloud Composer 버전으로 업그레이드하세요.

작업자에 이전 Airflow 버전보다 더 많은 메모리가 필요함

증상:

  • Cloud Composer 2 환경에서 Airflow 작업자의 모든 환경 클러스터 워크로드는 CrashLoopBackOff 상태이며 태스크를 실행하지 않습니다. 이 문제의 영향을 받는 경우 OOMKilling 경고가 생성되어 표시될 수도 있습니다.

  • 이 문제로 인해 환경 업그레이드가 방지될 수 있습니다.

원인:

  • [celery]worker_concurrency Airflow 구성 옵션의 커스텀 값과 Airflow 작업자에 대한 커스텀 메모리 설정을 사용하는 경우 리소스 소비가 한도에 가까워지면 이 문제가 발생할 수 있습니다.
  • Python 3.11을 사용하는 Airflow 2.6.3의 Airflow 작업자 메모리 요구사항은 이전 버전의 작업자에 비해 10% 더 높습니다.
  • Airflow 2.3 이상 버전에서의 Airflow 작업자 메모리 요구사항은 Airflow 2.2 또는 Airflow 2.1의 작업자에 비해 30% 더 높습니다.

해결책:

  • Cloud Composer가 이 값을 자동으로 계산하도록 worker_concurrency에 대한 재정의를 삭제합니다.
  • worker_concurrency에 커스텀 값을 사용하는 경우 더 낮은 값으로 설정합니다. 자동 계산된 값을 시작점으로 사용할 수 있습니다.
  • 또는 Airflow 작업자가 사용할 수 있는 메모리 양을 늘릴 수 있습니다.
  • 이 문제로 인해 환경을 이후 버전으로 업그레이드할 수 없으면 업그레이드 전에 제안된 솔루션 중 하나를 적용합니다.

Cloud Run 함수를 사용하여 비공개 네트워크를 통해 DAG 트리거

VPC 커넥터를 사용해서 비공개 네트워크를 통해 Cloud Run 함수로 DAG를 트리거하는 것은 Cloud Composer에서 지원되지 않습니다.

권장사항: Cloud Run 함수를 사용하여 Pub/Sub에 메시지를 게시하세요. 이러한 이벤트는 Pub/Sub 센서를 활성화하여 Airflow DAG를 트리거하거나 지연 가능한 연산자를 기반으로 접근 방법을 구현할 수 있습니다.

410.0.0 버전의 gcloud composer 명령어 문제

gcloud 410.0.0 버전의 다음 Cloud Composer 명령어:

  • gcloud composer environments run
  • gcloud composer environments list-packages

0이 아닌 오류 코드를 반환하고 다음 오류 메시지를 표시합니다.

  (ERROR: gcloud crashed (TypeError): 'NoneType' object is not callable)

gcloud 명령어로 생성되는 정상적인 출력에 추가로 이러한 동작이 발생하며 이 동작은 기능에 영향을 미치지 않습니다.

이 문제가 작업에 영향을 미치지 않는다면 410.0.0 버전을 계속 사용하고 잘못된 오류 메시지를 무시할 수 있습니다. 410.0.0 버전을 사용해야 하고 프로그래매틱 방식으로 gcloud 명령어를 사용하는 경우 0이 아닌 오류 코드와 출력의 오류 스택 트레이스 정보를 무시하는 추가 로직을 구현하세요. 해결책 섹션에서 다른 해결 방법을 살펴볼 수도 있습니다.

해결책

스케줄러 및 작업자의 빈 폴더

Cloud Composer는 Airflow 작업자 및 스케줄러에서 빈 폴더를 적극적으로 삭제하지 않습니다. 이러한 항목은 해당 폴더가 버킷에 있었고 결국 삭제되었을 때 환경 버킷 동기화 프로세스로 인해 생성될 수 있습니다.

권장사항: 이러한 빈 폴더를 건너뛸 수 있도록 DAG를 조정합니다.

이러한 항목은 Cloud Composer 클러스터의 축소 또는 유지보수 작업의 결과 등에 따라 해당 구성요소를 다시 시작할 때 결국 Airflow 스케줄러 및 작업자의 로컬 스토리지에서 삭제됩니다.

Kerberos 지원

Cloud Composer는 아직 Airflow Kerberos 구성을 지원하지 않습니다.

Cloud Composer 2에서 컴퓨팅 클래스 지원

Cloud Composer 2는 범용 컴퓨팅 클래스만 지원합니다. 즉, 다른 컴퓨팅 클래스(예: 분산 또는 수평 확장)를 요청하는 포드를 실행할 수 없습니다.

범용 클래스를 사용하면 컴퓨팅 클래스 최대 요청에 설명된 대로 최대 110GB의 메모리와 최대 30개의 CPU를 요청하는 포드를 실행할 수 있습니다.

ARM 기반 아키텍처를 사용하거나 CPU와 메모리가 더 필요하다면 Cloud Composer 2 클러스터 내에서 지원되지 않는 다른 컴퓨팅 클래스를 사용해야 합니다.

권장사항: GKEStartPodOperator를 사용하여 선택한 컴퓨팅 클래스를 지원하는 다른 클러스터에서 Kubernetes 포드를 실행하세요. 다른 컴퓨팅 클래스가 필요한 커스텀 포드를 실행하는 경우 Cloud Composer 2 이외의 클러스터에서도 실행해야 합니다.

Google Campaign Manager 360 연산자 지원

Cloud Composer 2.1.13 이전 버전의 Google Campaign Manager 연산자는 지원 중단된 Campaign Manager 360 v3.5 API를 기반으로 하며 지원 종료일은 2023년 5월 1일입니다.

Google Campaign Manager 연산자를 사용하는 경우 환경을 Cloud Composer 버전 2.1.13 이상으로 업그레이드합니다.

Google Display 및 Video 360 연산자 지원

Cloud Composer 2.1.13 이전 버전의 Google Display 및 Video 360 연산자는 지원 중단된 Display 및 Video 360 v1.1 API를 기반으로 하며 지원 종료일은 2023년 4월 27일입니다.

Google Display 및 Video 360 연산자를 사용하는 경우 환경을 Cloud Composer 버전 2.1.13 이상으로 업그레이드합니다. 또한 일부 Google Display 및 Video 360 연산자가 지원 중단되고 새 연산자로 대체되기 때문에 DAG를 변경해야 할 수 있습니다.

  • GoogleDisplayVideo360CreateReportOperator를 이제 지원 중단했습니다. 대신 GoogleDisplayVideo360CreateQueryOperator를 사용하세요. 이 연산자는 report_id 대신 query_id를 반환합니다.
  • GoogleDisplayVideo360RunReportOperator를 이제 지원 중단했습니다. 대신 GoogleDisplayVideo360RunQueryOperator를 사용하세요. 이 연산자는 report_id 대신 query_idreport_id를 반환하고 매개변수로 report_id 대신 query_id를 필요로 합니다.
  • 보고서가 준비되었는지 확인하려면 query_idreport_id 매개변수를 사용하는 새로운 GoogleDisplayVideo360RunQuerySensor 센서를 사용합니다. 지원 중단된 GoogleDisplayVideo360ReportSensor 센서에는 report_id만 필요합니다.
  • GoogleDisplayVideo360DownloadReportV2Operator에는 이제 query_idreport_id 매개변수가 모두 필요합니다.
  • GoogleDisplayVideo360DeleteReportOperator에는 DAG에 영향을 줄 수 있는 변경사항이 없습니다.

보조 범위 이름 제한사항

CVE-2023-29247(UI의 태스크 인스턴스 세부정보 페이지가 저장된 XSS에 취약함)

2.0.x에서 2.5.x로 Airflow 버전의 Airflow UI는 CVE-2023-29247에 취약합니다.

2.4.2 이전 버전의 Cloud Composer를 사용하여 취약점 공격에 노출될 수 있다고 의심되는 경우 다음 설명과 가능한 솔루션을 읽어보세요.

Cloud Composer에서 Airflow UI에 대한 액세스는 IAM으로 보호되고 Airflow UI 액세스 제어로 보호됩니다.

즉, Airflow UI 취약점을 공격하려면 공격자는 먼저 필요한 IAM 권한 및 역할과 함께 프로젝트에 대한 액세스 권한이 있어야 합니다.

솔루션:

  • 개별 사용자에게 할당된 Cloud Composer 역할을 포함하여 프로젝트의 IAM 권한 및 역할을 확인하세요. 승인된 사용자만 Airflow UI에 액세스할 수 있도록 유의해야 합니다.

  • Airflow UI 액세스 제어 메커니즘을 통해 사용자에게 할당된 역할을 확인하세요(Airflow UI에 대해 보다 세부적인 액세스를 제공하는 별도의 메커니즘). 승인된 사용자만 Airflow UI에 액세스할 수 있고 모든 신규 사용자가 적절한 역할로 등록되었는지 확인합니다.

  • VPC 서비스 제어를 사용하여 더욱 강화하는 것이 좋습니다.

Cloud Composer 2 Composer 환경의 Airflow 모니터링 DAG는 삭제 후 다시 생성되지 않음

Airflow 모니터링 DAG는 composer-2.1.4-airflow-2.4.3이 포함된 Composer 환경에서 사용자가 삭제하거나 버킷에서 이동한 경우 자동으로 다시 생성되지 않습니다.

솔루션:

  • 이 취약점은 composer-2.4.2-airflow-2.5.3 등의 이후 버전에서 수정되었습니다. 권장 방법은 환경을 최신 버전으로 업그레이드하는 것입니다.
  • 환경 업그레이드에 대한 대안 또는 임시 해결 방법은 동일한 버전의 다른 환경에서 airflow_monitoring DAG를 복사하는 것입니다.

Sentry가 사용 설정된 경우 업그레이드 작업이 실패할 수 있음

환경에서 Sentry를 구성하고 [sentry]sentry_on 설정을 true로 설정하면 Cloud Composer 환경에 대한 업그레이드 작업이 실패할 수 있습니다.

솔루션:

  • 환경에서 Sentry를 사용 중지하고 업그레이드를 수행한 다음 Sentry를 다시 구성합니다.

Cloud SQL 스토리지를 줄일 수 없음

Cloud Composer는 Cloud SQL을 사용하여 Airflow 데이터베이스를 실행합니다. 시간이 지나면서 Cloud SQL 인스턴스의 디스크 스토리지가 증가할 수 있는데 이는 Airway 데이터베이스 증가 시 Cloud SQL 작업으로 저장된 데이터에 맞춰 디스크가 확장되기 때문입니다.

Cloud SQL 디스크 크기를 축소할 수는 없습니다.

최소 Cloud SQL 디스크 크기를 사용하려면 스냅샷을 사용하여 Cloud Composer 환경을 다시 만들면 됩니다.

Cloud SQL에서 레코드를 삭제한 후 데이터베이스 디스크 사용량 측정항목이 축소되지 않음

Postgres 또는 MySQL과 같은 관계형 데이터베이스는 삭제되거나 업데이트될 때 행을 물리적으로 삭제하지 않습니다. 대신 데이터 일관성을 유지하고 동시 실행 트랜잭션 차단을 방지하기 위해 이를 '데드 튜플'로 표시합니다.

MySQL과 Postgres는 모두 레코드 삭제 후 공간을 회수하는 메커니즘을 구현합니다.

데이터베이스가 사용되지 않은 디스크 공간을 강제로 회수하도록 할 수 있지만 이 작업은 리소스를 많이 소모하므로 데이터베이스를 추가로 잠가 Cloud Composer를 사용할 수 없게 됩니다. 따라서 사용되지 않은 공간을 회수하는 빌드 메커니즘을 사용하는 것이 좋습니다.

액세스 차단됨: 승인 오류

이 문제가 사용자에게 영향을 미치면 액세스 차단됨: 승인 오류 대화상자에 Error 400: admin_policy_enforced 메시지가 포함됩니다.

API 컨트롤 > 구성되지 않은 서드 파티 앱 > 사용자의 서드 파티 앱에 액세스를 허용하지 않음 옵션이 Google Workspace에 사용 설정되어 있고 Cloud Composer 앱의 Apache Airflow가 명시적으로 허용되지 않은 경우 사용자가 명시적으로 애플리케이션을 허용하지 않으면 Airflow UI에 액세스할 수 없습니다.

액세스를 허용하려면 Google Workspace에서 Airflow UI에 대한 액세스 허용의 단계를 수행합니다.

FAILED로 표시된 과거에 성공한 태스크 인스턴스

일부 상황 및 드문 경우에 이전에 성공한 Airflow 태스크 인스턴스가 FAILED로 표시될 수 있습니다.

이 문제가 발생했다면 일반적으로 환경 업데이트나 업그레이드 작업 또는 GKE 유지보수에 의해 트리거된 것입니다.

참고: 문제 자체가 환경 문제를 나타내지는 않으며 태스크 실행 시 실질적인 실패를 유발하지는 않습니다.

이 문제는 Cloud Composer 버전 2.6.5 이상에서 해결되었습니다.

Cloud Composer 구성의 다른 부분과 통신할 때 Airflow 구성요소에 문제가 있음

매우 드문 경우지만 Compute Engine 메타데이터 서버와의 통신 속도가 느려서 Airflow 구성요소가 최적으로 작동하지 않을 수 있습니다. 예를 들어 Airflow 스케줄러가 다시 시작되면 Airflow 태스크를 다시 시도하거나 태스크 시작 시간이 더 길어질 수 있습니다.

증상

다음 오류가 Airflow 구성요소 로그에 표시됩니다(예: Airflow 스케줄러, 작업자 또는 웹 서버).

Authentication failed using Compute Engine authentication due to unavailable metadata server

Compute Engine Metadata server unavailable on attempt 1 of 3. Reason: timed out
...
Compute Engine Metadata server unavailable on attempt 2 of 3. Reason: timed out
...
Compute Engine Metadata server unavailable on attempt 3 of 3. Reason: timed out

해결책:

환경 변수 GCE_METADATA_TIMEOUT=30을 설정합니다.

Airflow 웹 서버에서 /data 폴더를 사용할 수 없음

Cloud Composer 2에서 Airflow 웹 서버는 대부분 읽기 전용 구성요소이며 Cloud Composer는 data/ 폴더를 이 구성요소에 동기화하지 않습니다.

경우에 따라 Airflow 웹 서버를 포함한 모든 Airflow 구성요소 간에 공통 파일을 공유해야 할 수 있습니다.

해결책:

  • 웹 서버와 공유할 파일을 PYPI 모듈에 래핑하고 일반 PYPI 패키지로 설치합니다. PYPI 모듈이 환경에 설치된 후에는 파일이 Airflow 구성요소의 이미지에 추가되고 이를 사용할 수 있습니다.

  • 파일을 plugins/ 폴더에 추가합니다. 이 폴더는 Airflow 웹 서버와 동기화됩니다.

모니터링의 비연속 DAG 파싱 시간 및 DAG 모음 크기 다이어그램

모니터링 대시보드에 비연속 DAG 파싱 시간 및 DAG 모음 크기 다이어그램이 표시되면 DAG 파싱 시간이 길어(5분 초과) 문제가 있음을 나타냅니다.

일련의 비연속 간격을 보여주는 Airflow DAG 파싱 시간 및 DAG 모음 크기 그래프
그림 3. 비연속 DAG 파싱 시간 및 DAG 모음 크기 그래프(확대하려면 클릭)

해결책: 총 DAG 파싱 시간을 5분 미만으로 유지하는 것이 좋습니다. DAG 파싱 시간을 줄이려면 DAG 작성 가이드라인을 따르세요.

태스크 로그가 지연되어 표시됨

이 알려진 문제는 Cloud Composer 3에 적용됩니다.

증상

  • Cloud Composer 3에서는 Airflow 태스크 로그가 즉시 표시되지 않고 몇 분 정도 지연됩니다.

원인:

환경에서 동시에 많은 태스크를 실행하는 경우 환경 인프라 크기가 모든 로그를 충분히 빠르게 처리하기에 작으므로 태스크 로그가 지연될 수 있습니다.

해결책:

  • 성능을 높이려면 환경 인프라 크기를 늘리는 것이 좋습니다.
  • 태스크가 동시에 실행되지 않도록 시간 경과에 따라 DAG 실행을 분산합니다.

다음 단계