Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Halaman ini menjelaskan cara mentransfer DAG, data, dan konfigurasi dari lingkungan Airflow 1.10.* yang ada ke lingkungan dengan Airflow 2 dan versi Airflow yang lebih baru.
Panduan migrasi lainnya
Dari | Ke | Metode | Panduan |
---|---|---|---|
Cloud Composer 1, Airflow 2 | Cloud Composer 2, Airflow 2 | Berdampingan, menggunakan snapshot | Panduan migrasi (snapshot) |
Cloud Composer 1, Airflow 1 | Cloud Composer 2, Airflow 2 | Berdampingan, menggunakan snapshot | Panduan migrasi (snapshot) |
Cloud Composer 1, Airflow 2 | Cloud Composer 2, Airflow 2 | Transfer manual berdampingan | Panduan migrasi manual |
Cloud Composer 1, Airflow 1 | Cloud Composer 2, Airflow 2 | Transfer manual berdampingan | Panduan migrasi manual |
Aliran udara 1 | Airflow 2 | Transfer manual berdampingan | Panduan ini (migrasi manual) |
Upgrade berdampingan
Cloud Composer menyediakan skrip transfer database Cloud Composer untuk memigrasikan database metadata, DAG, data, dan plugin dari lingkungan Cloud Composer dengan Airflow 1.10.14 dan Airflow 1.10.15 ke lingkungan Cloud Composer yang ada dengan Airflow 2.0.1 dan versi Airflow yang lebih baru.
Ini adalah jalur alternatif dari jalur yang dijelaskan dalam panduan ini. Beberapa bagian panduan ini masih berlaku saat menggunakan skrip yang disediakan. Misalnya, Anda dapat memeriksa kompatibilitas DAG dengan Airflow 2 sebelum memigrasikannya, atau untuk memastikan bahwa DAG serentak tidak berjalan, dan tidak ada DAG yang berjalan tambahan atau tidak ada.
Sebelum memulai
Sebelum Anda mulai menggunakan lingkungan Cloud Composer dengan Airflow 2, pertimbangkan perubahan yang dibawa Airflow 2 ke lingkungan Cloud Composer.
HA Penjadwal
Anda dapat menggunakan lebih dari satu penjadwal Airflow di lingkungan Anda. Anda dapat menetapkan jumlah penjadwal saat membuat lingkungan, atau dengan memperbarui lingkungan yang ada.
Eksekutor Celery+Kubernetes
Celery+Kubernetes Executor Airflow 2 didukung di Cloud Composer 3.
Perubahan yang dapat menyebabkan gangguan
Airflow 2 memperkenalkan banyak perubahan besar, beberapa di antaranya dapat menyebabkan gangguan:
- DAG yang ada dari Airflow 1.10.* tidak dijamin akan berfungsi dengan Airflow 2. Model ini perlu diuji dan mungkin disesuaikan.
- Operator, transfer, hook dimigrasikan ke paket penyedia. Pernyataan impor di DAG harus menggunakan paket penyedia baru. Pernyataan impor lama mungkin tidak lagi berfungsi di Airflow 2.
- Beberapa konfigurasi Airflow 1.10.* mungkin tidak lagi didukung karena Airflow 2 tidak lagi mendukung opsi konfigurasi tertentu.
- Beberapa paket PyPI kustom mungkin tidak kompatibel dengan Airflow atau Python versi baru.
- UI Airflow dengan Kontrol Akses adalah UI Airflow 2 default. Airflow 2 tidak mendukung jenis UI Airflow lainnya.
- REST API eksperimental diganti dengan Airflow API yang stabil. REST API eksperimental dinonaktifkan secara default di Airflow 2.
- Perubahan utama lainnya di Airflow 2.0.0
- Perubahan utama lainnya di Airflow 2.0.1
Perbedaan antara lingkungan dengan Airflow 2 dan Airflow 1.10.*
Perbedaan utama antara lingkungan Cloud Composer dengan Airflow 1.10.* dan lingkungan dengan Airflow 2:
- Lingkungan dengan Airflow 2 menggunakan Python 3.8. Ini adalah versi yang lebih baru dari yang digunakan di lingkungan Airflow 1.10.*. Python 2, Python 3.6, Python 3.7 tidak didukung.
- Airflow 2 menggunakan format CLI yang berbeda. Cloud Composer mendukung format baru di lingkungan dengan Airflow 2 melalui perintah
gcloud composer environments run
. - Paket PyPI yang telah diinstal sebelumnya berbeda di lingkungan Airflow 2. Untuk mengetahui daftar paket PyPI yang telah diinstal sebelumnya, lihat daftar versi Cloud Composer.
- Serialisasi DAG selalu diaktifkan di Airflow 2. Oleh karena itu, pemuatan DAG asinkron tidak lagi diperlukan, dan tidak didukung di Airflow 2. Akibatnya, mengonfigurasi parameter
[core]store_serialized_dags
dan[core]store_dag_code
tidak didukung untuk Airflow 2, dan upaya untuk menyetelnya akan dilaporkan sebagai error. - Plugin server web Airflow tidak didukung. Hal ini tidak memengaruhi plugin penjadwal atau pekerja, termasuk operator dan sensor Airflow.
- Di lingkungan Airflow 2, peran pengguna Airflow default adalah
Op
. Untuk lingkungan dengan Airflow 1.10.*, peran defaultnya adalahAdmin
.
Langkah 1: Periksa kompatibilitas dengan Airflow 2
Untuk memeriksa potensi konflik dengan Airflow 2, lihat panduan Mengupgrade ke Airflow 2.0+, di bagian tentang mengupgrade DAG.
Salah satu masalah umum yang mungkin Anda temui terkait dengan jalur impor yang tidak kompatibel. Untuk informasi selengkapnya tentang cara mengatasi masalah kompatibilitas ini, dalam panduan Mengupgrade ke Airflow 2.0+, lihat bagian tentang penyedia backport.
Langkah 2: Buat lingkungan Airflow 2, transfer penggantian konfigurasi, dan variabel lingkungan
Buat lingkungan Airflow 2 dan transfer penggantian konfigurasi dan variabel lingkungan:
Ikuti langkah-langkah untuk membuat lingkungan. Sebelum membuat lingkungan, tentukan juga penggantian konfigurasi dan variabel lingkungan, seperti yang dijelaskan lebih lanjut.
Saat memilih gambar, pilih gambar dengan Airflow 2.
Transfer parameter konfigurasi secara manual dari lingkungan Airflow 1.10.* ke lingkungan Airflow 2 yang baru.
Konsol
Saat membuat lingkungan, luaskan bagian Jaringan, penggantian konfigurasi Airflow, dan fitur tambahan.
Di bagian Penggantian konfigurasi Airflow, klik Tambahkan penggantian konfigurasi Airflow.
Salin semua penggantian konfigurasi dari lingkungan Airflow 1.10.*.
Beberapa opsi konfigurasi menggunakan nama dan bagian yang berbeda di Airflow 2. Untuk informasi selengkapnya, lihat Perubahan konfigurasi.
Di bagian Environment variables, klik Add environment variable
Salin semua variabel lingkungan dari lingkungan Airflow 1.10.* Anda.
Klik Create untuk membuat lingkungan.
Langkah 3: Instal paket PyPI ke lingkungan Airflow 2
Setelah lingkungan Airflow 2 dibuat, instal paket PyPI ke dalamnya:
Konsol
Di konsol Google Cloud, buka halaman Environments.
Pilih lingkungan Airflow 2 Anda.
Buka tab Paket PyPI, lalu klik Edit.
Salin persyaratan paket PyPI dari lingkungan Airflow 1.10.* Anda. Klik Save dan tunggu hingga lingkungan diperbarui.
Karena lingkungan Airflow 2 menggunakan kumpulan paket bawaan yang berbeda dan versi Python yang berbeda, Anda mungkin mengalami konflik paket PyPI yang sulit diselesaikan. Salah satu cara untuk mendiagnosis masalah dependensi paket adalah dengan memeriksa error paket PyPI dengan menginstal paket di pod pekerja Airflow.
Langkah 4: Transfer variabel dan kumpulan ke Airflow 2
Airflow 1.10.* mendukung ekspor variabel dan kumpulan ke file JSON. Kemudian, Anda dapat mengimpor file ini ke lingkungan Airflow 2.
Anda hanya perlu mentransfer kumpulan jika memiliki kumpulan kustom selain
default_pool
. Jika tidak, lewati perintah yang mengekspor dan mengimpor kumpulan.
gcloud
Ekspor variabel dari lingkungan Airflow 1.10.*:
gcloud composer environments run AIRFLOW_1_ENV \ --location AIRFLOW_1_LOCATION \ variables -- -e /home/airflow/gcs/data/variables.json
Ganti:
AIRFLOW_1_ENV
dengan nama lingkungan Airflow 1.10.* Anda.AIRFLOW_1_LOCATION
dengan region tempat lingkungan berada.
Mengekspor kumpulan dari lingkungan Airflow 1.10.*:
gcloud composer environments run AIRFLOW_1_ENV \ --location AIRFLOW_1_LOCATION \ pool -- -e /home/airflow/gcs/data/pools.json
Dapatkan URI bucket lingkungan Airflow 2.
Jalankan perintah berikut:
gcloud composer environments describe AIRFLOW_2_ENV \ --location AIRFLOW_2_LOCATION \ --format="value(config.dagGcsPrefix)"
Ganti:
AIRFLOW_2_ENV
dengan nama lingkungan Airflow 2 Anda.AIRFLOW_2_LOCATION
dengan region tempat lingkungan berada.
Dalam output, hapus folder
/dags
. Hasilnya adalah URI bucket lingkungan Airflow 2 Anda.Misalnya, ubah
gs://us-central1-example-916807e1-bucket/dags
menjadigs://us-central1-example-916807e1-bucket
.
Transfer file JSON dengan variabel dan kumpulan ke lingkungan Airflow 2 Anda:
gcloud composer environments storage data export \ --destination=AIRFLOW_2_BUCKET/data \ --environment=AIRFLOW_1_ENV \ --location=AIRFLOW_1_LOCATION \ --source=variables.json gcloud composer environments storage data export \ --destination=AIRFLOW_2_BUCKET/data \ --environment=AIRFLOW_1_ENV \ --location=AIRFLOW_1_LOCATION \ --source=pools.json
Ganti
AIRFLOW_2_BUCKET
dengan URI bucket lingkungan Airflow 2 yang diperoleh pada langkah sebelumnya.Mengimpor variabel dan kumpulan ke Airflow 2:
gcloud composer environments run \ AIRFLOW_2_ENV \ --location AIRFLOW_2_LOCATION \ variables import \ -- /home/airflow/gcs/data/variables.json gcloud composer environments run \ AIRFLOW_2_ENV \ --location AIRFLOW_2_LOCATION \ pools import \ -- /home/airflow/gcs/data/pools.json
Pastikan variabel dan kumpulan diimpor:
gcloud composer environments run \ AIRFLOW_2_ENV \ --location AIRFLOW_2_LOCATION \ variables list gcloud composer environments run \ AIRFLOW_2_ENV \ --location AIRFLOW_2_LOCATION \ pools list
Hapus file JSON dari bucket:
gcloud composer environments storage data delete \ variables.json \ --environment=AIRFLOW_2_ENV \ --location=AIRFLOW_2_LOCATION gcloud composer environments storage data delete \ pools.json \ --environment=AIRFLOW_2_ENV \ --location=AIRFLOW_2_LOCATION gcloud composer environments storage data delete \ variables.json \ --environment=AIRFLOW_1_ENV \ --location=AIRFLOW_1_LOCATION gcloud composer environments storage data delete \ pools.json \ --environment=AIRFLOW_1_ENV \ --location=AIRFLOW_1_LOCATION
Langkah 5: Transfer data lain dari bucket lingkungan Airflow 1.10.*
gcloud
Transfer plugin ke lingkungan Airflow 2 Anda. Untuk melakukannya, ekspor plugin dari bucket lingkungan Airflow 1.10.* ke folder
/plugins
di bucket lingkungan Airflow 2:gcloud composer environments storage plugins export \ --destination=AIRFLOW_2_BUCKET/plugins \ --environment=AIRFLOW_1_ENV \ --location=AIRFLOW_1_LOCATION
Pastikan folder
/plugins
berhasil diimpor:gcloud composer environments storage plugins list \ --environment=AIRFLOW_2_ENV \ --location=AIRFLOW_2_LOCATION
Ekspor folder
/data
dari lingkungan Airflow 1.10.* ke lingkungan Airflow 2:gcloud composer environments storage data export \ --destination=AIRFLOW_2_BUCKET/data \ --environment=AIRFLOW_1_ENV \ --location=AIRFLOW_1_LOCATION
Pastikan folder
/data
berhasil diimpor:gcloud composer environments storage data list \ --environment=AIRFLOW_2_ENV \ --location=AIRFLOW_2_LOCATION
Langkah 6: Transfer koneksi dan pengguna
Airflow 1.10.* tidak mendukung ekspor pengguna dan koneksi. Untuk mentransfer pengguna dan koneksi, buat akun pengguna dan koneksi baru secara manual di lingkungan Airflow 2 Anda.
gcloud
Untuk mendapatkan daftar koneksi di lingkungan Airflow 1.10.*, jalankan:
gcloud composer environments run AIRFLOW_1_ENV \ --location AIRFLOW_1_LOCATION \ connections -- --list
Untuk membuat koneksi baru di lingkungan Airflow 2, jalankan perintah
connections
Airflow CLI melalui gcloud. Contoh:gcloud composer environments run \ AIRFLOW_2_ENV \ --location AIRFLOW_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
Untuk melihat daftar pengguna di lingkungan Airflow 1.10.*:
Buka antarmuka web Airflow untuk lingkungan Airflow 1.10.* Anda.
Buka Admin > Users.
Untuk membuat akun pengguna baru di lingkungan Airflow 2, jalankan perintah
users create
Airflow CLI melalui gcloud. Contoh:gcloud composer environments run \ AIRFLOW_2_ENV \ --location AIRFLOW_2_LOCATION \ users create \ -- --username example_username \ --firstname Example-Name \ --lastname Example-Surname \ --email example-user@example.com \ --use-random-password \ --role Admin
Langkah 7: Pastikan DAG Anda siap untuk Airflow 2
Sebelum mentransfer DAG ke lingkungan Airflow 2, pastikan:
DAG Anda berhasil berjalan dan tidak ada masalah kompatibilitas yang tersisa.
DAG Anda menggunakan pernyataan impor yang benar.
Misalnya, pernyataan impor baru untuk
BigQueryCreateDataTransferOperator
dapat terlihat seperti ini:from airflow.providers.google.cloud.operators.bigquery_dts \ import BigQueryCreateDataTransferOperator
DAG Anda diupgrade untuk Airflow 2. Perubahan ini kompatibel dengan Airflow 1.10.14 dan versi yang lebih baru.
Langkah 8: Transfer DAG ke lingkungan Airflow 2
Potensi masalah berikut dapat terjadi saat Anda mentransfer DAG di antara lingkungan:
Jika DAG diaktifkan (tidak dijeda) di kedua lingkungan, setiap lingkungan akan menjalankan salinan DAG-nya sendiri, seperti yang dijadwalkan. Hal ini dapat menyebabkan DAG serentak berjalan untuk data dan waktu eksekusi yang sama.
Karena penyesuaian DAG, Airflow menjadwalkan operasi DAG tambahan, mulai dari tanggal mulai yang ditentukan dalam DAG Anda. Hal ini terjadi karena instance Airflow baru tidak memperhitungkan histori DAG yang berjalan dari lingkungan 1.10.*. Hal ini dapat menyebabkan banyak DAG berjalan yang dijadwalkan mulai dari tanggal mulai yang ditentukan.
Mencegah operasi DAG serentak
Di lingkungan Airflow 2,
ganti opsi konfigurasi Airflow dags_are_paused_at_creation
. Setelah Anda melakukan perubahan ini, semua DAG baru akan
dijeda secara default.
Bagian | Kunci | Nilai |
---|---|---|
core |
dags_are_paused_at_creation |
True |
Mencegah operasi DAG tambahan atau yang tidak ada
Tentukan tanggal mulai statis baru di DAG yang Anda transfer ke lingkungan Airflow 2.
Untuk menghindari kesenjangan dan tumpang-tindih dalam tanggal eksekusi, eksekusi DAG pertama harus terjadi di lingkungan Airflow 2 pada terjadinya interval jadwal berikutnya. Untuk melakukannya, tetapkan tanggal mulai baru di DAG Anda sebelum tanggal operasi terakhir di lingkungan Airflow 1.10.*.
Misalnya, jika DAG Anda berjalan pada pukul 15.00, 17.00, dan 21.00 setiap hari di lingkungan Airflow 1.10.*, DAG terakhir berjalan pada pukul 15.00, dan Anda berencana mentransfer DAG pada pukul 15.15, maka tanggal mulai untuk lingkungan Airflow 2 dapat dilakukan hari ini pukul 14.45. Setelah Anda mengaktifkan DAG di lingkungan Airflow 2, Airflow akan menjadwalkan DAG berjalan pada pukul 17.00.
Sebagai contoh lain, jika DAG Anda berjalan pada pukul 00.00 setiap hari di lingkungan Airflow 1.10.*, DAG terakhir berjalan pada pukul 00.00 pada 26 April 2021, dan Anda berencana untuk mentransfer DAG pada pukul 13.00 pada 26 April 2021, maka tanggal mulai untuk lingkungan Airflow 2 dapat berupa 23.45 pada 25 April 2021. Setelah Anda mengaktifkan DAG di lingkungan Airflow 2, Airflow akan menjadwalkan DAG berjalan pada pukul 00.00 pada 27 April 2021.
Mentransfer DAG satu per satu ke lingkungan Airflow 2
Untuk setiap DAG, ikuti prosedur ini untuk mentransfernya:
Pastikan tanggal mulai baru di DAG ditetapkan seperti yang dijelaskan di bagian sebelumnya.
Upload DAG yang diperbarui ke lingkungan Airflow 2. DAG ini dijeda di lingkungan Airflow 2 karena penggantian konfigurasi, sehingga belum ada DAG yang dijalankan.
Di antarmuka web Airflow, buka DAG dan periksa error sintaksis DAG yang dilaporkan.
Pada saat Anda berencana mentransfer DAG:
Jeda DAG di lingkungan Airflow 1.10.*.
Batalkan jeda DAG di lingkungan Airflow 2.
Pastikan DAG baru dijalankan pada waktu yang tepat.
Tunggu hingga operasi DAG terjadi di lingkungan Airflow 2 dan periksa apakah operasi berhasil.
Bergantung pada apakah operasi DAG berhasil:
Jika operasi DAG berhasil, Anda dapat melanjutkan dan menggunakan DAG dari lingkungan Airflow 2. Pada akhirnya, pertimbangkan untuk menghapus DAG versi Airflow 1.10.*.
Jika operasi DAG gagal, coba pecahkan masalah DAG hingga berhasil berjalan di Airflow 2.
Jika diperlukan, Anda dapat selalu kembali ke DAG versi Airflow 1.10.*:
Jeda DAG di lingkungan Airflow 2.
Batalkan jeda DAG di lingkungan Airflow 1.10.*. Tindakan ini menjadwalkan operasi DAG baru untuk tanggal dan waktu yang sama dengan operasi DAG yang gagal.
Jika Anda siap melanjutkan dengan DAG versi Airflow 2, sesuaikan tanggal mulai, upload DAG versi baru ke lingkungan Airflow 2, lalu ulangi prosedurnya.
Langkah 9: Memantau lingkungan Airflow 2
Setelah Anda mentransfer semua DAG dan konfigurasi ke lingkungan Airflow 2, monitor untuk mengetahui potensi masalah, kegagalan DAG berjalan, dan kesehatan lingkungan secara keseluruhan. Jika lingkungan Airflow 2 berjalan tanpa masalah selama periode waktu yang memadai, Anda dapat menghapus lingkungan Airflow 1.10.*.
Langkah selanjutnya
- Memecahkan masalah DAG
- Memecahkan masalah pembuatan lingkungan
- Memecahkan masalah update lingkungan
- Menggunakan paket backport