Kelola koneksi Airflow

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Halaman ini menjelaskan cara mengelola Koneksi Airflow di dan mengaksesnya dari DAG Anda.

Tentang koneksi Airflow

Koneksi AIflow menyimpan kredensial dan informasi koneksi lainnya, seperti nama pengguna, {i>string<i} koneksi, dan {i>password<i}. DAG Anda menggunakan koneksi untuk berkomunikasi dan mengakses resource di Google Cloud serta layanan lainnya dari DAG.

Operator Airflow di DAG Anda menggunakan koneksi default untuk operator, atau menentukan nama koneksi kustom.

Tentang keamanan koneksi

Sebagian besar operator Airflow tidak menerima kredensial secara langsung. Sebagai gantinya, mereka menggunakan Koneksi Airflow.

Saat membuat lingkungan baru, Cloud Composer akan membuat kunci fernet yang unik dan permanen untuk lingkungan dan mengamankan tambahan koneksi secara {i>default<i}. Anda dapat melihat fernet_key di halaman Configuration pada UI Airflow.

Untuk informasi selengkapnya tentang bagaimana koneksi dan {i> password<i} diamankan di Aliran udara, lihat Mengamankan Koneksi dan Menyembunyikan data sensitif.

Tentang jenis koneksi

Airflow menggunakan koneksi dari berbagai jenis untuk terhubung ke layanan tertentu. Misalnya, Jenis koneksi Google Cloud terhubung ke layanan lain di Google Cloud. Sebagai contoh lain, koneksi S3 terhubung ke bucket Amazon S3.

Untuk menambahkan jenis koneksi ke Airflow, menginstal paket PyPI dengan jenis koneksi tersebut. Beberapa paket sudah diinstal lebih dulu di lingkungan Anda. Sebagai Misalnya, Anda dapat menggunakan koneksi dari apache-airflow-providers-google paket tanpa menginstal paket PyPI khusus.

Koneksi yang telah dikonfigurasi sebelumnya

Cloud Composer mengonfigurasi koneksi default berikut di lingkungan fleksibel App Engine. Anda dapat menggunakan koneksi ini untuk mengakses resource di project Anda tanpa perlu mengonfigurasinya.

  • google_cloud_default
  • bigquery_default
  • google_cloud_datastore_default
  • google_cloud_storage_default

Menambahkan koneksi di Secret Manager

Anda dapat menyimpan koneksi di Secret Manager, tanpa menambahkan ke Airflow. Sebaiknya gunakan pendekatan ini saat menyimpan kredensial dan informasi sensitif lainnya.

Untuk menambahkan koneksi di Secret Manager:

  1. Konfigurasi Secret Manager untuk lingkungan Anda.

  2. Tambahkan rahasia dengan nama yang sesuai dengan pola koneksi.

    Misalnya: airflow-connections-example_connection. Di DAG, gunakan nama koneksi tanpa awalan: example_connection.

  3. Tambahkan parameter untuk koneksi:

    Format JSON

    Tambahkan representasi JSON koneksi Anda sebagai nilai rahasia. Contoh:

    {
      "conn_type": "mysql",
      "host": "example.com",
      "login": "login",
      "password": "password",
      "port": "9000"
    }
    

    Untuk informasi selengkapnya tentang format koneksi JSON, lihat Dokumentasi Airflow.

    Format URI

    Tambahkan representasi URI koneksi Anda sebagai nilai dari rahasia:

    • Rahasia harus menyimpan sebuah Representasi URI dari dengan koneksi yang mereka miliki dari mana pun. Contoh, mysql://login:password@example.com:9000.

    • URI harus dienkode ke URL. Sebagai misalnya, sandi yang memiliki simbol spasi di dalamnya harus dienkode ke URL sebagai berikut: mysql://login:secret%20password@example.com:9000.

    Airflow memiliki yang praktis untuk membuat URI koneksi. Contoh cara mengenkode URL kompleks dengan tambahan JSON tersedia di Dokumentasi Airflow.

  4. Pastikan semua parameter koneksi membaca dari Secret Manager dengan benar.

Menambahkan koneksi di Airflow

Sebagai alternatif untuk menyimpan koneksi Anda di Secret Manager, Anda dapat menyimpannya di Airflow.

Untuk menambahkan koneksi di Airflow:

CLI Airflow

Jalankan connections add CLI Airflow melalui Google Cloud CLI. Contoh:

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  connections add -- \
    --conn-type "mysql" \
    --conn-host "example.com" \
    --conn-port "9000" \
    --conn-login "login" \
    --conn-password "password" \
    example_connection

Anda juga dapat menggunakan argumen --conn-uri:

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  connections add -- \
    --conn-uri "mysql://login:password@example.com:9000" \
    example_connection

Ganti kode berikut:

  • ENVIRONMENT_NAME: nama lingkungan Anda.
  • LOCATION: wilayah tempat lingkungan berada.

UI Airflow

Ikuti dokumentasi Airflow tentang membuat koneksi.

Memeriksa apakah Airflow membaca koneksi dengan benar

Anda dapat menjalankan perintah connections get Airflow CLI melalui Google Cloud CLI untuk memeriksa bahwa koneksi dibaca dengan benar. Misalnya, jika Anda menyimpan koneksi di {i>Secret Manager<i}, ini memberi cara untuk memeriksa apakah semua parameter koneksi dibaca oleh Airflow dari secret.

gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION \
    connections get \
    -- CONNECTION_NAME

Ganti:

  • ENVIRONMENT_NAME dengan nama lingkungan.
  • LOCATION dengan region tempat lingkungan berada.
  • CONNECTION_NAME dengan nama koneksi. Jika koneksi Anda yang disimpan di Secret Manager, gunakan nama koneksi tanpa awalan koneksi. Misalnya, tentukan example_connection, bukan airflow-connections-example_connection_json.

Contoh:

gcloud composer environments run example-environment \
    --location us-central1 \
    connections get \
    -- example_connection -o json

Menggunakan koneksi Airflow di DAG Anda

Bagian ini menunjukkan cara mengakses koneksi Anda dari DAG.

Menggunakan koneksi Secret Manager

Gunakan nama koneksi tanpa awalan. Misalnya, jika rahasia Anda bernama airflow-connections-aws_s3, tentukan aws_s3.

transfer_dir_from_s3 = S3ToGCSOperator(
    task_id='transfer_dir_from_s3',
    aws_conn_id='aws_s3',
    prefix='data-for-gcs',
    bucket='example-s3-bucket-transfer-operators',
    dest_gcs='gs://us-central1-example-environ-361f4221-bucket/data/from-s3/')

Jika Anda menyimpan koneksi default di Secret Manager, Anda dapat menghilangkan nama koneksi. Lihat dokumentasi Airflow untuk operator tertentu guna mendapatkan nama koneksi {i>default<i} yang digunakan oleh operator. Misalnya, Operator Airflow S3ToGCSOperator menggunakan koneksi aws_default dengan secara default. Anda dapat menyimpan koneksi {i>default<i} ini dalam rahasia bernama airflow-connections-aws_default.

Menggunakan koneksi yang disimpan di Airflow

Gunakan nama koneksi, seperti yang ditentukan di Airflow:

transfer_dir_from_s3 = S3ToGCSOperator(
    task_id='transfer_dir_from_s3',
    aws_conn_id='aws_s3',
    prefix='data-for-gcs',
    bucket='example-s3-bucket-transfer-operators',
    dest_gcs='gs://us-central1-example-environ-361f4221-bucket/data/from-s3/')

Untuk menggunakan koneksi default untuk operator, hilangkan nama koneksi. Lihat Dokumentasi Airflow untuk operator tertentu guna mendapatkan koneksi default yang digunakan oleh operator. Misalnya, operator Airflow S3ToGCSOperator menggunakan koneksi aws_default secara default.

Pemecahan masalah

Jika lingkungan Anda tidak dapat mengakses rahasia yang disimpan di Secret Manager:

  1. Pastikan Secret Manager dikonfigurasi di lingkungan fleksibel App Engine.

  2. Pastikan nama koneksi di Secret Manager sesuai ke koneksi yang digunakan oleh Airflow. Misalnya, untuk koneksi bernama example_connection, nama rahasianya adalah airflow-connections-example_connection.

  3. Periksa apakah Airflow membaca koneksi dengan benar.

Langkah selanjutnya