{GCP Cloud Composer}環境のスナップショットの保存と読み込み

https://cloud.google.com/composer/docs/composer-2/save-load-snapshots?hl=ja

 

Airflow バージョン: 2.6.3
Composer バージョン: 2.4.6

 


-- 1. 前作業

gcloud init
gcloud auth list

gcloud --version

gcloud projects create project01-9999999 \
--name="project01"

gcloud config list
gcloud config set project project01-9999999
gcloud config set compute/region asia-northeast1 --quiet
gcloud config set compute/zone asia-northeast1-a --quiet

gcloud beta billing accounts list
gcloud beta billing projects link project01-9999999 --billing-account=111111-111111-111111

gcloud services enable compute.googleapis.com --project project01-9999999

gcloud components update


-- 2. バケットの作成


gcloud storage buckets create gs://bucket123 \
--default-storage-class=Standard \
--no-enable-autoclass \
--location=us \
--public-access-prevention \
--uniform-bucket-level-access

gcloud storage ls


-- 3. Cloud Composer の有効化

gcloud services list --enabled


gcloud services enable composer.googleapis.com --project project01-9999999


-- 4. サービス アカウントへ権限付与

gcloud projects get-iam-policy project01-9999999

service-00000000000@cloudcomposer-accounts.iam.gserviceaccount.com
へ権限付与

 

gcloud projects add-iam-policy-binding project01-9999999 \
--member="serviceAccount:service-00000000000@cloudcomposer-accounts.iam.gserviceaccount.com" \
--role="roles/owner"

 


-- 5. 環境の作成


gcloud composer environments create env01 \
--location asia-northeast1 \
--image-version composer-2.4.6-airflow-2.6.3

 

GKEやバケットが作成される
30分程度かかる

 

gcloud composer environments list \
--locations asia-northeast1

gcloud composer environments describe env01 \
--location asia-northeast1

 

 


-- 6. DAGファイルの作成

mkdir -p test

vim ./test/dag01.py


import datetime
import airflow
from airflow.operators import bash_operator

# If you are running Airflow in more than one time zone
# see https://airflow.apache.org/docs/apache-airflow/stable/timezone.html
# for best practices
YESTERDAY = datetime.datetime.now() - datetime.timedelta(days=1)

default_args = {
    'owner': 'Composer Example',
    'depends_on_past': False,
    'email': [''],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': datetime.timedelta(minutes=5),
    'start_date': YESTERDAY,
}

with airflow.DAG(
        'dag01',
        catchup=False,
        default_args=default_args,
        schedule_interval=datetime.timedelta(days=1)) as dag:

    # Print the dag_run id from the Airflow logs
    task01 = bash_operator.BashOperator(
        task_id='task01', bash_command='echo {{ dag_run.id }}')

 

-- 7. DAGファイルをGCSにアップロードする


gcloud composer environments storage dags list \
--environment=env01 \
--location=asia-northeast1

gcloud composer environments storage dags import \
--environment=env01 \
--location=asia-northeast1 \
--source=./test

 

-- 8. 環境のスナップショットを保存する


gcloud beta composer environments snapshots save \
env01 \
--location asia-northeast1 \
--snapshot-location "gs://bucket123/snapshots"


gcloud storage ls gs://bucket123/snapshots/*

 

-- 9. DAGファイルを削除する

gcloud composer environments storage dags list \
--environment=env01 \
--location=asia-northeast1

gcloud composer environments storage dags delete dags/test/dag01.py \
--environment=env01 \
--location=asia-northeast1 

→ なぜか削除できないので画面から実行


-- 10. 環境のスナップショットを読み込む

gcloud beta composer environments snapshots load \
env01 \
--location asia-northeast1 \
--snapshot-path "gs://bucket123/snapshots/project01-9999999_asia-northeast1_env01_2023-12-09T13-01-30"


→ DAG復旧を確認


-- 11. 環境のスナップショット スケジュールを有効にする

gcloud beta composer environments update env01 \
--location asia-northeast1 \
--enable-scheduled-snapshot-creation \
--snapshot-location "gs://bucket123/snapshots" \
--snapshot-creation-schedule "0 4 * * *" \
--snapshot-schedule-timezone "UTC+09"

 

 

-- 12. クリーンアップ
gcloud storage rm gs://bucket123 --recursive

gcloud storage ls

 

gcloud composer environments delete env01 \
--location asia-northeast1 \
--quiet

gcloud composer environments list \
--locations asia-northeast1

 

gcloud projects list

gcloud projects delete project01-9999999 \
--quiet