Menyiapkan domain khusus untuk server web Apache Airflow - Amazon Managed Workflows for Apache Airflow (MWAA)

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menyiapkan domain khusus untuk server web Apache Airflow

Alur Kerja Terkelola Amazon untuk Apache Airflow (Amazon MWAA) memungkinkan Anda menyiapkan domain khusus untuk server web Apache Airflow yang dikelola. Dengan menggunakan domain khusus, Anda dapat mengakses server web Apache Airflow yang dikelola Amazon MWAA di lingkungan Anda menggunakan Apache Airflow UI, Apache Airflow CLI, atau server web Apache Airflow.

catatan

Anda hanya dapat menggunakan domain khusus dengan server web pribadi tanpa akses internet.

Kasus penggunaan untuk domain khusus di Amazon MWAA
  1. Bagikan domain server web di seluruh aplikasi cloud Anda AWS — Menggunakan domain khusus memungkinkan Anda menentukan URL yang mudah digunakan untuk mengakses server web, bukan nama domain layanan yang dihasilkan. Anda dapat menyimpan domain kustom ini dan membagikannya sebagai variabel lingkungan dalam aplikasi Anda.

  2. Akses server web pribadi — Jika Anda ingin mengonfigurasi akses untuk server web di VPC tanpa akses internet, menggunakan domain khusus menyederhanakan alur kerja pengalihan URL.

Konfigurasikan domain kustom

Untuk mengonfigurasi fitur domain kustom, Anda perlu memberikan nilai domain khusus melalui konfigurasi webserver.base_url Apache Airflow saat membuat atau memperbarui lingkungan Amazon MWAA Anda. Batasan berikut berlaku untuk nama domain kustom Anda:

  • Nilai harus berupa nama domain yang sepenuhnya memenuhi syarat (FQDN) tanpa protokol atau jalur apa pun. Misalnya, your-custom-domain.com.

  • Amazon MWAA tidak mengizinkan jalur di URL. Misalnya, your-custom-domain.com/dags/ bukan nama domain kustom yang valid.

  • Panjang URL dibatasi hingga 255 karakter ASCII.

  • Jika Anda memberikan string kosong, secara default, lingkungan akan dibuat dengan URL server web yang dihasilkan oleh Amazon MWAA.

Contoh berikut menunjukkan penggunaan AWS CLI untuk membuat lingkungan dengan nama domain server web kustom.

$ aws mwaa create-environment \ --name my-mwaa-env \ --source-bucket-arn arn:aws:s3:::my-bucket \ --airflow-configuration-options '{"webserver.base_url":"my-custom-domain.com"}' \ --network-configuration '{"SubnetIds":["subnet-0123456789abcdef","subnet-fedcba9876543210"]}' \ --execution-role-arn arn:aws:iam::123456789012:role/my-execution-role

Setelah lingkungan dibuat atau diperbarui, Anda perlu mengatur infrastruktur jaringan di AWS akun Anda untuk mengakses server web pribadi melalui domain khusus.

Untuk kembali ke URL default yang dihasilkan layanan, perbarui lingkungan pribadi Anda dan hapus opsi konfigurasi. webserver.base_url

Menyiapkan infrastruktur jaringan

Gunakan langkah-langkah berikut untuk menyiapkan infrastruktur jaringan yang diperlukan untuk digunakan dengan domain kustom Anda di AWS akun Anda.

  1. Dapatkan alamat IP untuk Antarmuka Jaringan Endpoint Amazon VPC (ENI). Untuk melakukan ini, pertama, gunakan get-environmentWebserverVpcEndpointServiceuntuk menemukan lingkungan Anda.

    $ aws mwaa get-environment --name your-environment-name

    Jika berhasil, Anda akan melihat output yang mirip dengan berikut ini.

    {
        "Environment": {
            "AirflowConfigurationOptions": {},
            "AirflowVersion": "latest-version",
            "Arn": "environment-arn",
            "CreatedAt": "2024-06-01T01:00:00-00:00",
            "DagS3Path": "dags",
            .
            .
            .
            "WebserverVpcEndpointService": "web-server-vpc-endpoint-service",
            "WeeklyMaintenanceWindowStart": "TUE:21:30"
        }
    }

    Perhatikan WebserverVpcEndpointService nilainya dan gunakan untuk web-server-vpc-endpoint-service perintah Amazon EC2 describe-vpc-endpoints berikut. --filters Name=service-name,Values=web-server-vpc-endpoint-service-iddalam perintah berikut.

  2. Ambil detail titik akhir VPC Amazon. Perintah ini mengambil detail tentang titik akhir VPC Amazon yang cocok dengan nama layanan tertentu, mengembalikan ID titik akhir dan ID antarmuka jaringan terkait dalam format teks.

    $ aws ec2 describe-vpc-endpoints \ --filters Name=service-name,Values=web-server-vpc-endpoint-service \ --query 'VpcEndpoints[*].{EndpointId:VpcEndpointId,NetworkInterfaceIds:NetworkInterfaceIds}' \ --output text
  3. Dapatkan detail antarmuka jaringan. Perintah ini mengambil alamat IP pribadi untuk setiap antarmuka jaringan yang terkait dengan titik akhir VPC Amazon yang diidentifikasi pada langkah sebelumnya.

    $ for eni_id in $( aws ec2 describe-vpc-endpoints \ --filters Name=service-name,Values=service-id \ --query 'VpcEndpoints[*].NetworkInterfaceIds' \ --output text ); do aws ec2 describe-network-interfaces \ --network-interface-ids $eni_id \ --query 'NetworkInterfaces[*].PrivateIpAddresses[*].PrivateIpAddress' \ --output text done
  4. Gunakan create-target-group untuk membuat grup target baru. Anda akan menggunakan grup target ini untuk mendaftarkan alamat IP untuk server web Anda titik akhir Amazon VPC.

    $ aws elbv2 create-target-group \ --name new-target-group-namne \ --protocol HTTPS \ --port 443 \ --vpc-id web-server-vpc-id \ --target-type ip \ --health-check-protocol HTTPS \ --health-check-port 443 \ --health-check-path / \ --health-check-enabled \ --matcher 'HttpCode="200,302"'

    Daftarkan alamat IP menggunakan register-targets perintah.

    $ aws elbv2 register-targets \ --target-group-arn target-group-arn \ --targets Id=ip-address-1 Id=ip-address-2
  5. Minta sertifikat ACM. Lewati langkah ini jika Anda menggunakan sertifikat yang ada.

    $ aws acm request-certificate \ --domain-name my-custom-domain.com \ --validation-method DNS
  6. Konfigurasikan Application Load Balancer. Pertama, buat penyeimbang beban, lalu buat pendengar untuk penyeimbang beban. Tentukan sertifikat ACM yang Anda buat pada langkah sebelumnya.

    $ aws elbv2 create-load-balancer \ --name my-mwaa-lb \ --type application \ --subnets subnet-id-1 subnet-id-2
    $ aws elbv2 create-listener \ --load-balancer-arn load-balancer-arn \ --protocol HTTPS \ --port 443 \ --ssl-policy ELBSecurityPolicy-2016-08 \ --certificates CertificateArn=acm-certificate-arn \ --default-actions Type=forward,TargetGroupArn=target-group-arn

    Jika Anda menggunakan Network Load Balancer di subnet pribadi, siapkan host bastion atau AWS VPN terowongan untuk mengakses server web.

  7. Buat zona yang dihosting menggunakan Route 53 untuk domain.

    $ aws route53 create-hosted-zone --name my-custom-domain.com \ --caller-reference 1

    Buat catatan A untuk domain. Untuk melakukan ini menggunakan AWS CLI, dapatkan ID zona yang dihosting menggunakan list-hosted-zones-by-name lalu terapkan catatan denganchange-resource-record-sets.

    $ HOSTED_ZONE_ID=$(aws route53 list-hosted-zones-by-name \ --dns-name my-custom-domain.com \ --query 'HostedZones[0].Id' --output text)
    $ aws route53 change-resource-record-sets \ --hosted-zone-id $HOSTED_ZONE_ID \ --change-batch '{ "Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name": "my-custom-domain.com", "Type": "A", "AliasTarget": { "HostedZoneId": "load-balancer-hosted-zone-id>", "DNSName": "load-balancer-dns-name", "EvaluateTargetHealth": true } } } ] }'
  8. Perbarui aturan grup keamanan untuk server web Amazon VPC endpoint untuk mengikuti prinsip hak istimewa terkecil dengan mengizinkan lalu lintas HTTPS hanya dari subnet publik tempat Application Load Balancer berada. Simpan JSON berikut secara lokal. Misalnya, sebagaisg-ingress-ip-permissions.json.

    { "IpProtocol": "tcp", "FromPort": 443, "ToPort": 443, "UserIdGroupPairs": [ { "GroupId": "load-balancer-security-group-id" } ], "IpRanges": [ { "CidrIp": "public-subnet-1-cidr" }, { "CidrIp": "public-subnet-2-cidr" } ] }

    Jalankan perintah Amazon EC2 berikut untuk memperbarui aturan grup keamanan ingress Anda. Tentukan file JSON untuk--ip-permissions.

    $ aws ec2 authorize-security-group-ingress \ --group-id <security-group-id> \ --ip-permissions file://sg-ingress-ip-permissions.json

    Jalankan perintah Amazon EC2 berikut untuk memperbarui aturan jalan keluar Anda.

    $ aws ec2 authorize-security-group-egress \ --group-id webserver-vpc-endpoint-security-group-id \ --protocol tcp \ --port 443 \ --source-group load-balancer-security-group-id

Buka konsol Amazon MWAA dan arahkan ke Apache Airflow UI. Jika Anda menyiapkan Network Load Balancer di subnet pribadi alih-alih Application Load Balancer yang digunakan di sini, Anda harus mengakses server web dengan salah satu opsi berikut.