환경 스냅샷 저장 및 로드

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

이 페이지에서는 환경 스냅샷을 사용하여 환경 상태를 저장 및 로드하는 방법을 설명합니다.

스냅샷을 자동으로 저장하도록 환경을 구성할 수 있습니다. 자세한 내용은 예약된 스냅샷 구성을 참조하세요.

환경 스냅샷 정보

환경 스냅샷에는 해당 환경의 상태가 저장됩니다. 필요에 따라 환경 스냅샷을 저장 및 로드할 수 있습니다.

스냅샷을 사용하면 다음을 수행할 수 있습니다.

  • 환경을 이전 상태로 복원합니다. 스냅샷을 사용해서 환경 백업을 만들고 스냅샷 중 하나를 로드해서 환경을 복원합니다. 예를 들어 환경을 성공적으로 업데이트한 후에도 PyPI 패키지를 설치하거나 Airflow 구성 옵션을 재정의하는 업데이트 작업을 롤백할 수 있습니다.

  • 단계별 업그레이드를 수행하고 환경을 복사합니다. 기존 환경의 스냅샷을 만들고, 동일 버전 또는 이후 버전의 Cloud Composer를 사용하는 새 환경을 만들고, 스냅샷을 이 새 환경에 적용합니다. 이 절차는 마이그레이션과 비슷합니다. DAG가 중복 실행되지 않도록 하려면 스냅샷을 만들기 전 DAG를 일시중지해야 합니다.

스냅샷 저장 방법

환경 스냅샷은 환경 상태를 설명하고 환경 데이터 백업이 저장된 파일 집합입니다.

환경 스냅샷은 여러 개를 만들 수 있습니다. 환경 스냅샷은 증분식이 아닙니다. 스냅샷은 다른 스냅샷과 독립적으로 사용할 수 있습니다.

Cloud Composer에서는 사용자가 환경을 삭제할 때 스냅샷이 삭제되지 않습니다.

기본적으로 Cloud Composer에서는 환경 버킷의 snapshots/ 폴더에 스냅샷이 저장됩니다. 스냅샷을 만들 때는 커스텀 위치도 지정할 수 있습니다.

편의를 위해 Cloud Storage UI에서 데이터가 폴더로 표시되지만 버킷은 플랫 파일 구조로 작동합니다. 그래도 Google Cloud 콘솔에서는 스냅샷을 저장 및 로드할 때 방식이 달라지지 않지만 버킷의 파일에서 직접 작업을 수행할 때는 이 점에 유의해야 합니다. 자세한 내용은 객체 네임스페이스를 참조하세요.

스냅샷에 대한 보안 고려사항

이러한 보안 위험을 해결하기 위해서는 키 또는 비밀번호와 같은 Airflow DAG에 사용되는 민감한 정보를 Secret Manager에서 저장할 수 있습니다. 자세한 내용은 환경의 Secret Manager 구성을 참조하세요.

환경 버킷의 보안 권한을 확인합니다. 커스텀 버킷에 환경 스냅샷을 저장할 때는 액세스 권한이 프로젝트에 올바르게 구성되었는지 확인합니다. 권한을 할당할 때는 환경의 서비스 계정에 스냅샷을 저장하고 버킷에서 로드하는 데 필요한 권한이 충분한지 확인합니다.

스냅샷에 저장되는 데이터

Cloud Composer에서 스냅샷에 저장되는 데이터는 다음과 같습니다.

  • Airflow 구성 재정의
  • 환경 변수
  • 커스텀 PyPI 패키지 목록(요구사항)
  • 수행된 태스크 상태, DAG 실행 기록을 포함한 Airflow 데이터베이스 백업
  • 환경 버킷의 /dags, /data, /plugins 폴더 백업
  • 환경의 퍼넷 키
  • 환경 규모, 성능 매개변수와 같은 환경 구성과 관련된 기타 정보 Cloud Composer에서 스냅샷을 로드할 때는 이 정보가 사용되지 않습니다.

스냅샷에서 로드되는 데이터

Cloud Composer에서 스냅샷에서 로드되는 데이터는 다음과 같습니다.

  • Airflow 구성 재정의
  • 환경 변수
  • 커스텀 PyPI 패키지(설치 건너뛰기를 선택한 경우 제외)

  • 수행된 태스크 및 DAG 실행 기록을 포함한 Airflow 데이터베이스의 콘텐츠

  • 스냅샷에서 /dags, /data, /plugins 폴더 콘텐츠가 환경 버킷에 로드됩니다.

  • 스냅샷의 퍼넷 키는 환경 자체 퍼넷 키를 사용하여 스냅샷의 데이터를 다시 암호화하기 위해 사용됩니다. 환경의 퍼넷 키는 변경되지 않은 상태로 유지됩니다.

Cloud Composer에서 환경 구성에 대한 일부 정보가 스냅샷에 저장되지만 스냅샷을 로드할 때 사용되지 않습니다. 환경의 다음 매개변수는 스냅샷을 로드할 때 변경되지 않습니다.

  • 환경 규모 및 성능 매개변수와 같은 환경 구성
  • 환경의 네트워킹 구성
  • /dags, /data, /plugins 폴더 외부에 있는 환경 버킷의 콘텐츠
  • 환경 라벨

Cloud Composer API를 사용하지 않고 Cloud Composer 인프라에 적용한 모든 설정은 스냅샷을 로드할 때 손실됩니다.

부분적으로 완료된 작업 정보

스냅샷을 로드할 때는 작업이 성공하거나, 실패하거나, 부분적으로 완료될 수도 있습니다.

  • 작업이 성공하면 스냅샷의 모든 데이터가 로드됩니다.
  • 작업이 실패하면 항목이 변경되지 않습니다.
  • 작업이 부분적으로 완료될 경우에는 스냅샷의 데이터가 일부만 로드됩니다. 이러한 작업은 실패로 보고되지만 오류 메시지에 성공적으로 로드된 데이터가 표시됩니다. 예를 들어 PyPI 패키지가 설치되었지만 Airflow 구성 옵션 재정의가 성공하지 못했으면 이를 나타내는 오류 메시지가 표시됩니다.

부분적으로 완료된 작업의 경우 동일한 스냅샷을 다시 로드하도록 시도할 수 있습니다. Cloud Composer에서 이전 시도로 성공한 단계는 건너뜁니다. 예를 들어 제한 시간으로 인해 작업이 실패했지만 데이터베이스가 성공적으로 로드되었으면 다음에 시도할 때 데이터베이스를 다시 로드하지 않습니다.

시작하기 전에

  • 스냅샷은 Cloud Composer 2 버전 2.0.9 이상에서 지원됩니다. Cloud Composer 1은 1.18.5 이상 버전에서 환경 스냅샷 저장을 지원합니다.

  • 스냅샷으로 환경이 생성되지는 않습니다. 한 환경의 스냅샷을 다른 환경에 로드하려면 먼저 새 환경을 만들고 여기에 스냅샷을 로드해야 합니다.

  • 오류 상태의 환경에는 스냅샷을 로드할 수 없습니다. 이러한 환경 문제는 스냅샷을 로드한다고 해서 해결되지 않습니다. 새 환경에는 기존 스냅샷을 계속 로드할 수 있습니다.

  • 동일한 버전 또는 이후 버전의 Cloud Composer 또는 Airflow에만 스냅샷을 로드할 수 있습니다. 예를 들어 Cloud Composer 2.0.2에서 만든 스냅샷을 Cloud Composer 2.0.1 환경에 로드할 수 없습니다. 또한 Airflow 2.2.3의 스냅샷을 Airflow 2.1.4에 로드할 수 없습니다.

  • 스냅샷으로 Cloud Composer 버전이 변경되지 않습니다. 환경을 이후 버전의 Cloud Composer로 업그레이드하고 이전 버전의 스냅샷을 로드하면 환경이 현재 버전의 Cloud Composer로 유지됩니다. 예를 들어 Cloud Composer 2.0.1의 스냅샷을 Cloud Composer 2.0.2에 로드하면 환경이 Cloud Composer 2.0.1로 돌아가지 않습니다.

  • 스냅샷을 지원하는 Airflow 데이터베이스의 최대 크기는 20GB입니다. 환경 데이터베이스에 20GB를 초과하는 데이터가 사용될 경우에는 스냅샷을 저장하기 전 Airflow 데이터베이스 크기를 줄입니다.

  • 스냅샷을 만들려면 환경 버킷의 /dags, /plugins, /data 폴더에 있는 총 객체 수가 100,000개 미만이어야 합니다.

  • XCom 메커니즘을 사용하여 파일을 전송하는 경우 [Airflow 가이드라인에 따라 사용][ext-airflow-xcom-backend]해야 합니다. XCom을 사용하여 큰 파일이나 다수의 파일을 전송하면 Airflow 데이터베이스 성능이 영향을 받고 스냅샷을 로드하거나 환경을 업그레이드할 때 오류가 발생할 수 있습니다. 대용량 데이터를 전송하려면 Cloud Storage와 같은 대안을 사용하는 것이 좋습니다.

  • 환경 버킷에서 객체 이름의 최대 길이는 기호 1,024개 이하여야 합니다. 그렇지 않으면 스냅샷을 만들 수 없습니다.

  • 환경 버킷 외부에 스냅샷을 저장할 경우 해당 환경의 서비스 계정에 지정된 위치에 대한 읽기 및 쓰기 권한이 있어야 합니다. 예를 들어 스토리지 객체 관리자 역할에 그러한 권한이 포함되어 있습니다. 프로젝트 또는 특정 버킷에 이를 적용할 수 있습니다.

  • 스냅샷을 만들고 저장하면 Cloud Storage와 관련된 추가 비용이 발생합니다. 자세한 내용은 가격 책정을 참조하세요.

환경 스냅샷 저장

Cloud Composer는 지정한 폴더를 기준으로 하는 하위 폴더에 환경 스냅샷을 저장합니다. 폴더 이름에는 프로젝트 ID, 환경 위치, 환경 이름, 스냅샷이 저장되었을 때의 타임스탬프가 포함됩니다. 예를 들면 /snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00입니다.

콘솔

환경의 스냅샷을 만들려면 다음 안내를 따르세요.

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

    환경으로 이동

  2. 환경 목록에서 환경 이름을 클릭합니다. 환경 세부정보 페이지가 열립니다.

  3. 스냅샷 저장을 클릭합니다.

  4. 스냅샷 저장 대화상자에서 스냅샷을 저장할 위치를 선택합니다.

    • 환경 버킷의 /snapshots 폴더에 스냅샷을 저장하려면 환경 버킷에서 스냅샷 폴더 사용(기본값)을 선택합니다.

    • 커스텀 폴더에 스냅샷을 저장하려면 다른 버킷의 커스텀 폴더 사용을 선택한 후 위치를 지정합니다.

  5. 저장을 클릭합니다.

gcloud

gcloud beta composer environments snapshots save 명령어는 환경의 스냅샷을 저장합니다.

  • snapshot-location 인수는 스냅샷이 저장되는 폴더를 지정합니다. 기본적으로 스냅샷은 환경 버킷의 /snapshots 폴더에 저장됩니다. 예를 들면 gs://us-central1-example-916807e1-bucket/snapshots입니다. 다른 폴더를 지정할 수도 있습니다.

환경의 스냅샷을 저장하려면 다음을 실행합니다.

gcloud beta composer environments snapshots save \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --snapshot-location "SNAPSHOTS_FOLDER"

다음과 같이 바꿉니다.

  • ENVIRONMENT_NAME을 환경 이름으로 바꿉니다.
  • LOCATION을 환경이 위치한 리전으로 바꿉니다.
  • (선택사항) SNAPSHOTS_FOLDER를 스냅샷을 저장할 버킷 폴더의 URI로 바꿉니다. 이 인수를 생략하면 Cloud Composer가 해당 환경 버킷의 /snapshots 폴더에 스냅샷을 저장합니다.

다음 예시에서는 기본 위치가 사용됩니다.

gcloud beta composer environments snapshots save \
  example-environment \
  --location us-central1

다음 예시에서는 커스텀 폴더에 저장합니다.

gcloud beta composer environments snapshots save \
  example-environment \
  --location us-central1 \
  --snapshot-location "gs://example-bucket/environment_snapshots"

API

  1. environments.saveSnapshot API 요청을 생성합니다.

  2. 요청 본문의 snapshotLocation 필드에 스냅샷을 저장할 폴더를 지정합니다.

{
  "snapshotLocation": "SNAPSHOTS_FOLDER"
}

다음과 같이 바꿉니다.

  • SNAPSHOTS_FOLDER를 스냅샷을 저장할 버킷 폴더의 URI로 바꿉니다.

예를 들면 다음과 같습니다.

// POST https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment:saveSnapshot

{
  "snapshotLocation": "gs://us-central1-example-916807e1-bucket/snapshots"
}

Terraform

Terraform에서는 환경 스냅샷을 저장하고 로드할 수 없습니다.

스냅샷 저장 및 로드는 환경에서 수행되는 작업이고 결과 스냅샷은 환경 정의의 일부가 아닙니다. Terraform은 Cloud Composer 환경 구성만 관리하기 때문에 여기에서 환경 스냅샷을 저장하거나 로드할 수 없습니다.

환경 스냅샷 로드

다음 상황을 고려해보세요. 예를 들어 catch-up이 사용 설정되어 있고 Airflow가 스냅샷이 생성된 시간과 로드된 시간 사이에 일정에 따라 DAG를 실행합니다. 이 경우 스냅샷이 로드된 다음 수행된 DAG 실행에 대한 정보가 Airflow에 없기 때문에 Airflow가 동일한 시간에 동일한 데이터에 대해 DAG를 다시 실행합니다.

또 다른 예로 매일 실행되는 DAG가 있습니다. 스냅샷을 만든 후 Airflow에서 이 DAG가 실행되고, 이후 사용자가 같은 날 스냅샷을 로드한다고 가정해보세요. 이 경우에는 밀린 작업을 수행하는 캐치업 기능이 사용 중지되어 있더라도 Airflow에서 DAG가 다시 실행됩니다.

콘솔

Cloud Composer 2 환경에 스냅샷을 로드하려면 다음 안내를 따르세요.

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

    환경으로 이동

  2. 환경 목록에서 환경 이름을 클릭합니다. 환경 세부정보 페이지가 열립니다.

  3. 스냅샷 로드를 클릭합니다.

  4. 스냅샷 로드 대화상자에서 찾아보기를 클릭합니다.

  5. 스냅샷을 저장할 폴더를 선택합니다. 폴더 이름에는 프로젝트 ID, 환경 위치, 스냅샷이 저장된 시점의 타임스탬프가 나열됩니다. 예를 들면 /snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00입니다.

  6. (선택사항) 스냅샷에서 커스텀 PyPI 패키지 설치를 건너뛰려면 PyPI 패키지 설치 건너뛰기를 선택합니다. 커스텀 PyPI 패키지가 설치된 환경 스냅샷을 로드할 때 Cloud Composer가 이러한 커스텀 패키지를 설치하지 않습니다.

  7. 로드를 클릭하고 Cloud Composer가 스냅샷을 로드할 때까지 기다립니다.

gcloud

gcloud beta composer environments snapshots load 명령어는 환경에 스냅샷을 로드합니다.

  • --snapshot-path 인수는 스냅샷을 저장할 폴더를 지정합니다.

    폴더 이름에는 프로젝트 ID, 환경 위치, 스냅샷이 저장된 시점의 타임스탬프가 나열됩니다. 예를 들면 gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00입니다.

  • (선택사항) --skip-pypi-packages-installation 인수는 스냅샷에서 커스텀 PyPI 패키지 설치를 건너뜁니다. 커스텀 PyPI 패키지가 설치된 환경 스냅샷을 로드할 때 Cloud Composer가 이러한 커스텀 패키지를 설치하지 않습니다.

gcloud beta composer environments snapshots load \
  DESTINATION_ENVIRONMENT_NAME \
  --location LOCATION \
  --snapshot-path "SNAPSHOT_PATH"

다음과 같이 바꿉니다.

  • DESTINATION_ENVIRONMENT_NAME을 스냅샷을 로드하려는 환경의 이름으로 바꿉니다.
  • LOCATION을 환경이 위치한 리전으로 바꿉니다.
  • SNAPSHOT_PATH를 버킷 URI와 스냅샷 경로로 바꿉니다.

예를 들면 다음과 같습니다.

gcloud beta composer environments snapshots load \
  example-environment \
  --location us-central1 \
  --snapshot-path "gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00"

API

  1. environments.loadSnapshot API 요청을 생성합니다.

  2. 요청 본문의 snapshotPath 필드에 버킷 URI와 스냅샷 경로를 지정합니다. 폴더 이름에는 프로젝트 ID, 환경 위치, 스냅샷이 저장된 시점의 타임스탬프가 나열됩니다. 예를 들면 gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00입니다.

  3. (선택사항) 요청 본문의 skipPypiPackagesInstallation 필드에 Cloud Composer에서 스냅샷의 커스텀 PyPI 패키지 설치를 건너뛸지 여부를 지정합니다. 커스텀 PyPI 패키지가 설치된 환경 스냅샷을 로드할 때 Cloud Composer가 이러한 커스텀 패키지를 설치하지 않습니다.

    이 필드는 선택사항입니다. 이 필드를 생략하면 Cloud Composer가 스냅샷의 PyPI 패키지를 설치합니다.

{
  "snapshotPath": "SNAPSHOT_PATH"
}

다음과 같이 바꿉니다.

  • SNAPSHOT_PATH를 스냅샷을 저장할 버킷 폴더의 URI로 바꿉니다.

예를 들면 다음과 같습니다.

// POST https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment:loadSnapshot

{
  "snapshotPath": "gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00",
  "skipPypiPackagesInstallation": "False"
}

Terraform

Terraform을 사용해서는 환경 스냅샷을 저장하고 로드할 수 없습니다.

스냅샷 저장 및 로드는 환경에서 수행되는 작업이고 결과 스냅샷은 환경 정의의 일부가 아닙니다. Terraform은 Cloud Composer 환경 구성만 관리하기 때문에 여기에서 환경 스냅샷을 저장하거나 로드할 수 없습니다.

다음 단계