Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Halaman ini menjelaskan cara menginstal paket Python untuk lingkungan Cloud Composer Anda.
Tentang paket di Cloud Composer
Bagian ini menjelaskan cara kerja paket PyPI di Cloud Composer.
Paket PyPI bawaan dan kustom dalam image Cloud Composer
Image Cloud Composer berisi paket PyPI bawaan dan kustom.
Paket PyPI yang sudah diinstal sebelumnya adalah paket yang disertakan dalam image Cloud Composer di lingkungan Anda. Setiap image Cloud Composer berisi paket PyPI yang khusus untuk versi Cloud Composer dan Airflow Anda.
Paket PyPI kustom adalah paket yang dapat Anda instal di lingkungan selain paket yang telah diinstal sebelumnya.
Opsi untuk mengelola paket PyPI untuk lingkungan Cloud Composer
Opsi | Gunakan jika |
---|---|
Menginstal dari PyPI | Cara default untuk menginstal paket di lingkungan Anda |
Menginstal dari repositori dengan alamat IP publik | Paket dihosting di repositori paket selain PyPI. Repositori ini memiliki alamat IP publik |
Menginstal dari repositori Artifact Registry | Paket dihosting di repositori Artifact Registry |
Menginstal dari repositori di jaringan project Anda | Lingkungan Anda tidak memiliki akses ke internet publik. Paket dihosting di repositori paket dalam jaringan project Anda. |
Menginstal sebagai library Python lokal |
Paket tidak dapat ditemukan di PyPI, dan library
tidak memiliki dependensi eksternal, seperti dist-packages . |
Menginstal plugin | Paket ini menyediakan fungsi khusus plugin, seperti mengubah antarmuka web Airflow. |
PythonVirtualenvOperator | Anda tidak ingin paket diinstal untuk semua worker Airflow, atau dependensi bertentangan dengan paket yang telah diinstal sebelumnya. Paket dapat ditemukan di PyPI dan tidak memiliki dependensi eksternal. |
KubernetesPodOperator dan operator GKE |
Anda memerlukan dependensi eksternal yang tidak dapat diinstal dari pip ,
seperti dist-packages , atau berada di server pip internal. Opsi
ini memerlukan lebih banyak penyiapan dan pemeliharaan. Pertimbangkan opsi ini hanya jika opsi lain tidak berhasil. |
Sebelum memulai
Anda harus memiliki peran yang dapat memicu operasi pembaruan lingkungan. Selain itu, akun layanan lingkungan harus memiliki peran yang memiliki izin yang memadai untuk melakukan operasi pembaruan.
Jika lingkungan Anda dilindungi oleh perimeter Kontrol Layanan VPC, maka sebelum menginstal dependensi PyPI, Anda harus memberikan identitas pengguna tambahan dengan akses ke layanan yang dilindungi perimeter layanan dan mengaktifkan dukungan untuk repositori PyPI pribadi.
Persyaratan harus mengikuti format yang ditentukan dalam PEP-508 dengan setiap persyaratan ditentukan dalam huruf kecil dan terdiri dari nama paket dengan tambahan opsional dan penentu versi.
Jika konflik dependensi menyebabkan update gagal, lingkungan Anda akan terus berjalan dengan dependensi yang ada. Jika operasi berhasil, Anda dapat mulai menggunakan dependensi Python yang baru diinstal di DAG Anda.
PythonVirtualenvOperator tidak menggunakan konfigurasi dari file
pip.conf
lingkungan Anda. Jika Anda ingin menggunakan dependensi tertentu, termasuk menginstalnya dari indeks kustom, teruskan persyaratan dalam parameterrequirements
sebagai daftar string. Untuk mengetahui informasi selengkapnya tentang format, lihat Format File Persyaratan dalam dokumentasi pip.
Melihat daftar paket PyPI
Anda bisa mendapatkan daftar paket untuk lingkungan Anda dalam beberapa format.
Melihat paket yang telah diinstal sebelumnya
Untuk melihat daftar paket yang telah diinstal sebelumnya untuk lingkungan Anda, lihat daftar paket untuk image Cloud Composer di lingkungan Anda.
Lihat semua paket
Untuk melihat semua paket (baik yang sudah diinstal maupun kustom) di lingkungan Anda:
gcloud
Perintah gcloud CLI berikut menampilkan hasil perintah python -m pip list
untuk pekerja Airflow di lingkungan Anda.
Anda dapat menggunakan argumen --tree
untuk mendapatkan hasil perintah
python -m pipdeptree --warn
.
gcloud beta composer environments list-packages \
ENVIRONMENT_NAME \
--location LOCATION
Ganti:
ENVIRONMENT_NAME
dengan nama lingkungan.LOCATION
dengan region tempat lingkungan berada.
Melihat paket PyPI kustom
Konsol
Di Google Cloud console, buka halaman Environments.
Dalam daftar lingkungan, klik nama lingkungan Anda. Halaman Environment details akan terbuka.
Buka tab Paket PyPI.
gcloud
gcloud composer environments describe ENVIRONMENT_NAME \
--location LOCATION \
--format="value(config.softwareConfig.pypiPackages)"
Ganti:
ENVIRONMENT_NAME
dengan nama lingkungan.LOCATION
dengan region tempat lingkungan berada.
Menginstal paket kustom di lingkungan Cloud Composer
Bagian ini menjelaskan berbagai metode untuk menginstal paket kustom di lingkungan Anda.
Menginstal paket dari PyPI
Paket dapat diinstal dari Python Package Index jika tidak memiliki dependensi eksternal atau konflik dengan paket yang sudah diinstal.
Untuk menambahkan, memperbarui, atau menghapus dependensi Python untuk lingkungan Anda:
Konsol
Di Google Cloud console, buka halaman Environments.
Dalam daftar lingkungan, klik nama lingkungan Anda. Halaman Environment details akan terbuka.
Buka tab Paket PyPI.
Klik Edit
Klik Tambahkan paket.
Di bagian PyPI packages, tentukan nama paket, dengan penentu versi dan ekstra opsional.
Contoh:
scikit-learn
scipy
,>=0.13.3
nltk
,[machine_learning]
Klik Simpan.
gcloud
gcloud CLI memiliki beberapa argumen untuk bekerja dengan paket PyPI kustom:
--update-pypi-packages-from-file
menggantikan semua paket PyPI kustom yang ada dengan paket yang ditentukan. Paket yang tidak Anda tentukan akan dihapus.--update-pypi-package
mengupdate atau menginstal satu paket.--remove-pypi-packages
menghapus paket yang ditentukan.--clear-pypi-packages
menghapus semua paket.
Menginstal persyaratan dari file
File requirements.txt
harus memiliki setiap
penentu persyaratan pada baris terpisah.
Contoh:
scipy>=0.13.3
scikit-learn
nltk[machine_learning]
Perbarui lingkungan Anda, dan tentukan file requirements.txt
dalam
argumen --update-pypi-packages-from-file
.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-packages-from-file requirements.txt
Ganti:
ENVIRONMENT_NAME
dengan nama lingkungan.LOCATION
dengan region tempat lingkungan berada.
Menginstal satu paket
Perbarui lingkungan Anda, dan tentukan paket, versi, dan tambahan di
argumen --update-pypi-package
.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-package PACKAGE_NAMEEXTRAS_AND_VERSION
Ganti:
ENVIRONMENT_NAME
dengan nama lingkungan.LOCATION
dengan region tempat lingkungan berada.PACKAGE_NAME
dengan nama paket.EXTRAS_AND_VERSION
dengan penentu versi dan tambahan opsional. Untuk menghilangkan versi dan tambahan, tentukan nilai kosong.
Contoh:
gcloud composer environments update example-environment \
--location us-central1 \
--update-pypi-package "scipy>=0.13.3"
Menghapus paket
Perbarui lingkungan Anda, dan tentukan paket yang ingin Anda hapus dalam argumen --remove-pypi-packages
:
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--remove-pypi-packages PACKAGE_NAMES
Ganti:
ENVIRONMENT_NAME
dengan nama lingkungan.LOCATION
dengan region tempat lingkungan berada.PACKAGE_NAMES
dengan daftar paket yang dipisahkan koma.
Contoh:
gcloud composer environments update example-environment \
--location us-central1 \
--remove-pypi-packages scipy,scikit-learn
API
Buat permintaan API environments.patch
.
Dalam permintaan ini:
Dalam parameter
updateMask
, tentukan mask:- Gunakan mask
config.softwareConfig.pypiPackages
untuk mengganti semua paket yang ada dengan paket yang ditentukan. Paket yang tidak Anda tentukan akan dihapus. - Gunakan
config.softwareConfig.envVariables.PACKAGE_NAME
untuk menambahkan atau memperbarui paket tertentu. Untuk menambahkan atau memperbarui beberapa paket, tentukan beberapa mask dengan koma.
- Gunakan mask
Dalam isi permintaan, tentukan paket dan nilai untuk versi dan tambahan:
{ "config": { "softwareConfig": { "pypiPackages": { "PACKAGE_NAME": "EXTRAS_AND_VERSION" } } } }
Ganti:
PACKAGE_NAME
dengan nama paket.EXTRAS_AND_VERSION
dengan penentu versi dan tambahan opsional. Untuk menghilangkan versi dan tambahan, tentukan nilai kosong.- Untuk menambahkan lebih dari satu paket, tambahkan entri tambahan untuk paket
ke
pypiPackages
.
Contoh:
// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.softwareConfig.pypiPackages.EXAMPLE_PACKAGE,
// config.softwareConfig.pypiPackages.ANOTHER_PACKAGE
{
"config": {
"softwareConfig": {
"pypiPackages": {
"EXAMPLE_PACKAGE": "",
"ANOTHER_PACKAGE": ">=1.10.3"
}
}
}
}
Terraform
Blok pypi_packages
dalam blok software_config
menentukan
paket.
resource "google_composer_environment" "example" {
name = "ENVIRONMENT_NAME"
region = "LOCATION"
config {
software_config {
pypi_packages = {
PACKAGE_NAME = "EXTRAS_AND_VERSION"
}
}
}
}
Ganti:
ENVIRONMENT_NAME
dengan nama lingkungan.LOCATION
dengan region tempat lingkungan berada.PACKAGE_NAME
dengan nama paket.EXTRAS_AND_VERSION
dengan penentu versi dan tambahan opsional. Untuk menghilangkan versi dan tambahan, tentukan nilai kosong.- Untuk menambahkan lebih dari satu paket, tambahkan entri tambahan untuk paket
ke
pypi_packages
.
Contoh:
resource "google_composer_environment" "example" {
name = "example-environment"
region = "us-central1"
config {
software_config {
pypi_packages = {
scipy = ">=1.10.3"
scikit-learn = ""
nltk = "[machine_learning]"
}
}
}
}
Menginstal paket dari repositori publik
Anda dapat menginstal paket yang dihosting di repositori lain yang memiliki alamat IP publik.
Paket harus dikonfigurasi dengan benar, sehingga alat pip
default dapat menginstalnya.
Untuk menginstal dari repositori paket yang memiliki alamat publik:
Buat file pip.conf dan sertakan informasi berikut dalam file, jika berlaku:
- URL repositori (dalam parameter
index-url
) - Kredensial akses untuk repositori
- Opsi penginstalan
pip
non-default
Contoh:
[global] index-url=https://example.com/
- URL repositori (dalam parameter
(Opsional) Dalam beberapa kasus, Anda mungkin ingin mengambil paket dari beberapa repositori, seperti saat repositori publik berisi beberapa paket tertentu yang ingin Anda instal, dan Anda ingin menginstal semua paket lainnya dari PyPI:
- Konfigurasi repositori virtual Artifact Registry.
- Tambahkan konfigurasi untuk beberapa repositori (termasuk PyPI, jika diperlukan)
dan tentukan urutan penelusuran repositori oleh
pip
. - Tentukan URL repositori virtual dalam parameter
index-url
.
Upload file pip.conf ke folder
/config/pip/
di bucket lingkungan Anda.Instal paket menggunakan salah satu metode yang tersedia.
Menginstal paket dari repositori Artifact Registry
Anda dapat menyimpan paket di repositori Artifact Registry dalam project Anda, dan mengonfigurasi lingkungan untuk menginstal dari repositori tersebut.
Mengonfigurasi peran dan izin:
Pastikan akun layanan Cloud Build memiliki izin untuk membaca dari repositori Artifact Registry Anda.
Jika lingkungan Anda membatasi akses ke layanan lain dalam project Anda, misalnya, jika Anda menggunakan Kontrol Layanan VPC:
Tetapkan izin untuk mengakses repositori Artifact Registry Anda ke akun layanan lingkungan, bukan akun layanan Cloud Build.
Pastikan konektivitas ke repositori Artifact Registry dikonfigurasi di project Anda.
Untuk menginstal paket PyPI kustom dari repositori Artifact Registry:
Buat file pip.conf dan sertakan informasi berikut dalam file, jika berlaku:
- URL repositori Artifact Registry (dalam parameter
index-url
) - Kredensial akses untuk repositori
- Opsi penginstalan
pip
non-default
Untuk repositori Artifact Registry, tambahkan
/simple/
ke URL repositori:[global] index-url = https://us-central1-python.pkg.dev/example-project/example-repository/simple/
- URL repositori Artifact Registry (dalam parameter
(Opsional) Dalam beberapa kasus, Anda mungkin ingin mengambil paket dari beberapa repositori, seperti saat repositori Artifact Registry Anda berisi beberapa paket tertentu yang ingin Anda instal, dan Anda ingin menginstal semua paket lainnya dari PyPI:
- Konfigurasi repositori virtual Artifact Registry.
- Tambahkan konfigurasi untuk beberapa repositori (termasuk PyPI, jika diperlukan)
dan tentukan urutan penelusuran repositori oleh
pip
. - Tentukan URL repositori virtual dalam parameter
index-url
.
Upload file pip.conf ini ke folder
/config/pip/
di bucket lingkungan Anda. Misalnya:gs://us-central1-example-bucket/config/pip/pip.conf
.Instal paket menggunakan salah satu metode yang tersedia.
Menginstal paket dari repositori pribadi
Anda dapat menghosting repositori pribadi di jaringan project dan mengonfigurasi lingkungan untuk menginstal paket Python dari repositori tersebut.
Mengonfigurasi peran dan izin:
Jika Anda menginstal paket PyPI kustom dari repositori di jaringan project Anda, dan repositori ini tidak memiliki alamat IP publik:
Tetapkan izin untuk mengakses repositori ini ke akun layanan lingkungan.
Pastikan konektivitas ke repositori ini dikonfigurasi di project Anda.
Untuk menginstal paket dari repositori pribadi yang dihosting di jaringan project Anda:
Buat file pip.conf dan sertakan informasi berikut dalam file, jika berlaku:
- Alamat IP repositori di jaringan project Anda
- Kredensial akses untuk repositori
- Opsi penginstalan
pip
non-default
Contoh:
[global] index-url=https://192.0.2.10/
(Opsional) Dalam beberapa kasus, Anda mungkin ingin mengambil paket dari beberapa repositori, seperti saat repositori pribadi berisi beberapa paket tertentu yang ingin Anda instal, dan Anda ingin menginstal semua paket lainnya dari PyPI:
- Konfigurasi repositori virtual Artifact Registry.
- Tambahkan konfigurasi untuk beberapa repositori (termasuk PyPI, jika diperlukan)
dan tentukan urutan penelusuran repositori oleh
pip
. - Tentukan URL repositori virtual dalam parameter
index-url
.
(Opsional) Anda dapat menggunakan sertifikat kustom saat menginstal paket dari repositori pribadi Anda. Untuk melakukannya:
Upload file sertifikat ke folder
/config/pip/
di bucket lingkungan Anda.Di pip.conf, tentukan nama file sertifikat dalam parameter
cert
. Jangan ubah folder/etc/pip/
.Contoh:
[global] cert =/etc/pip/example-certificate.pem
Upload file pip.conf ke folder
/config/pip/
di bucket lingkungan Anda. Misalnya:gs://us-central1-example-bucket/config/pip/pip.conf
.Instal paket menggunakan salah satu metode yang tersedia.
Menginstal library Python lokal
Untuk menginstal library Python internal atau lokal:
Tempatkan dependensi dalam subdirektori di folder
dags/
di bucket lingkungan Anda. Untuk mengimpor modul dari subdirektori, setiap subdirektori di jalur modul harus berisi file penanda paket__init__.py
.Dalam contoh berikut, dependensinya adalah
coin_module.py
:dags/ use_local_deps.py # A DAG file. dependencies/ __init__.py coin_module.py
Impor dependensi dari file definisi DAG.
Contoh:
Menggunakan paket yang bergantung pada library objek bersama
Paket PyPI tertentu bergantung pada library tingkat sistem. Meskipun Cloud Composer tidak mendukung library sistem, Anda dapat menggunakan opsi berikut:
Gunakan KubernetesPodOperator. Tetapkan image Operator ke image build kustom. Jika Anda mengalami kegagalan paket selama penginstalan karena dependensi sistem yang tidak terpenuhi, gunakan opsi ini.
Upload library objek bersama ke bucket lingkungan Anda. Gunakan opsi ini jika paket PyPI Anda telah berhasil diinstal, tetapi gagal saat runtime.
- Temukan secara manual library objek bersama untuk dependensi PyPI (file .so).
- Upload pustaka objek bersama ke folder
/plugins
di bucket lingkungan Anda. - Tetapkan variabel lingkungan berikut:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/airflow/gcs/plugins
Menginstal paket di lingkungan IP pribadi
Bergantung pada cara Anda mengonfigurasi project, lingkungan Anda mungkin tidak memiliki akses ke internet publik.
Secara default, lingkungan Cloud Composer 3 Anda dapat mengakses internet saat menginstal paket PyPI. Hal ini berfungsi di semua jenis jaringan lingkungan (IP Pribadi dan Publik). Misalnya, Anda dapat menginstal paket dari Python Package Index di lingkungan IP Pribadi.
Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi akses ke internet saat menginstal paket PyPI.
Lingkungan IP pribadi dengan akses internet publik
Jika lingkungan IP pribadi Anda dapat mengakses internet publik, Anda dapat menginstal paket menggunakan opsi untuk lingkungan IP publik:
- Instal dari PyPI. Dalam hal ini, tidak diperlukan konfigurasi khusus. Ikuti prosedur yang dijelaskan di Menginstal paket dari PyPI.
- Instal dari repositori dengan alamat IP publik. Ikuti prosedur yang dijelaskan di Menginstal paket dari repositori pribadi.
- Menginstal dari repositori PyPI pribadi yang dihosting di jaringan project Anda.
Lingkungan IP pribadi tanpa akses internet
Jika lingkungan IP pribadi Anda tidak memiliki akses ke internet publik, Anda dapat menginstal paket menggunakan salah satu cara berikut:
- Gunakan repositori PyPI pribadi yang dihosting di jaringan project Anda.
- Gunakan VM server proxy di jaringan project Anda untuk terhubung
ke repositori PyPI di internet publik. Tentukan alamat proxy di
file
/config/pip/pip.conf
di bucket lingkungan Anda. - Gunakan repositori Artifact Registry sebagai satu-satunya sumber
paket. Untuk melakukannya, tetapkan ulang parameter
index-url
, seperti yang dijelaskan. - Jika kebijakan keamanan Anda mengizinkan akses ke alamat IP eksternal dari jaringan VPC, Anda dapat mengaktifkan penginstalan paket dari repositori di internet publik dengan mengonfigurasi Cloud NAT.
- Masukkan dependensi Python ke folder
/dags
di bucket lingkungan Anda untuk menginstalnya sebagai library lokal. Opsi ini mungkin bukan opsi yang baik jika hierarki dependensi besar.
Menginstal ke lingkungan IP pribadi dengan batasan lokasi resource
Menjaga kesesuaian project Anda dengan persyaratan Pembatasan Lokasi Resource akan melarang penggunaan beberapa alat. Secara khusus, Cloud Build tidak dapat digunakan untuk penginstalan paket, sehingga mencegah akses langsung ke repositori di internet publik.
Untuk menginstal dependensi Python di lingkungan tersebut, ikuti panduan untuk lingkungan IP pribadi tanpa akses internet.
Menginstal dependensi Python ke lingkungan IP pribadi dalam perimeter Kontrol Layanan VPC
Melindungi project Anda dengan perimeter Kontrol Layanan VPC akan menghasilkan batasan keamanan lebih lanjut. Secara khusus, Cloud Build tidak dapat digunakan untuk penginstalan paket, sehingga mencegah akses langsung ke repositori di internet publik.
Untuk menginstal dependensi Python untuk lingkungan IP pribadi di dalam perimeter, ikuti panduan untuk lingkungan IP pribadi tanpa akses internet.