Configuration d'un domaine personnalisé pour le serveur Web Apache Airflow - Amazon Managed Workflows for Apache Airflow

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration d'un domaine personnalisé pour le serveur Web Apache Airflow

Amazon Managed Workflows for Apache Airflow (Amazon MWAA) vous permet de configurer un domaine personnalisé pour le serveur Web Apache Airflow géré. À l'aide d'un domaine personnalisé, vous pouvez accéder au serveur Web Apache Airflow géré par Amazon MWAA de votre environnement à l'aide de l'interface utilisateur Apache Airflow, de la CLI Apache Airflow ou du serveur Web Apache Airflow.

Note

Vous ne pouvez utiliser un domaine personnalisé qu'avec un serveur Web privé sans accès à Internet.

Cas d'utilisation d'un domaine personnalisé sur Amazon MWAA
  1. Partagez le domaine du serveur Web dans votre application cloud sur AWS  : l'utilisation d'un domaine personnalisé vous permet de définir une URL conviviale pour accéder au serveur Web, au lieu du nom de domaine de service généré. Vous pouvez stocker ce domaine personnalisé et le partager en tant que variable d'environnement dans vos applications.

  2. Accès à un serveur Web privé : si vous souhaitez configurer l'accès à un serveur Web dans un VPC sans accès à Internet, l'utilisation d'un domaine personnalisé simplifie le flux de redirection d'URL.

Configuration du domaine personnalisé

Pour configurer la fonctionnalité de domaine personnalisé, vous devez fournir la valeur de domaine personnalisée via la configuration webserver.base_url Apache Airflow lors de la création ou de la mise à jour de votre environnement Amazon MWAA. Les contraintes suivantes s'appliquent à votre nom de domaine personnalisé :

  • La valeur doit être un nom de domaine complet (FQDN) sans protocole ni chemin. Par exemple, your-custom-domain.com.

  • Amazon MWAA n'autorise pas de chemin dans l'URL. Par exemple, your-custom-domain.com/dags/ il ne s'agit pas d'un nom de domaine personnalisé valide.

  • La longueur de l'URL est limitée à 255 caractères ASCII.

  • Si vous fournissez une chaîne vide, par défaut, l'environnement sera créé avec une URL de serveur Web générée par Amazon MWAA.

L'exemple suivant montre comment utiliser le AWS CLI pour créer un environnement avec un nom de domaine de serveur Web personnalisé.

$ 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

Une fois l'environnement créé ou mis à jour, vous devez configurer l'infrastructure réseau de votre AWS compte pour accéder au serveur Web privé via le domaine personnalisé.

Pour revenir à l'URL générée par le service par défaut, mettez à jour votre environnement privé et supprimez l'webserver.base_urloption de configuration.

Configuration de l'infrastructure réseau

Suivez les étapes ci-dessous pour configurer l'infrastructure réseau requise à utiliser avec votre domaine personnalisé dans votre AWS compte.

  1. Obtenez les adresses IP des interfaces réseau (ENI) Amazon VPC Endpoint. Pour ce faire, utilisez d'abord le get-environmentpour trouver celui qui WebserverVpcEndpointService convient à votre environnement.

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

    En cas de réussite, vous obtiendrez un résultat similaire à ce qui suit.

    {
        "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"
        }
    }

    Notez la WebserverVpcEndpointService valeur et utilisez-la web-server-vpc-endpoint-service dans la commande Amazon EC2 describe-vpc-endpoints suivante. --filters Name=service-name,Values=web-server-vpc-endpoint-service-iddans la commande suivante.

  2. Récupérez les détails du point de terminaison Amazon VPC. Cette commande récupère des informations sur les points de terminaison Amazon VPC qui correspondent à un nom de service spécifique, en renvoyant l'ID du point de terminaison et les identifiants d'interface réseau associés au format texte.

    $ aws ec2 describe-vpc-endpoints \ --filters Name=service-name,Values=web-server-vpc-endpoint-service \ --query 'VpcEndpoints[*].{EndpointId:VpcEndpointId,NetworkInterfaceIds:NetworkInterfaceIds}' \ --output text
  3. Obtenez les détails de l'interface réseau. Cette commande récupère les adresses IP privées pour chaque interface réseau associée aux points de terminaison Amazon VPC identifiés à l'étape précédente.

    $ 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. create-target-groupÀ utiliser pour créer un nouveau groupe cible. Vous utiliserez ce groupe cible pour enregistrer les adresses IP des points de terminaison Amazon VPC de votre serveur Web.

    $ 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"'

    Enregistrez les adresses IP à l'aide de la register-targets commande.

    $ aws elbv2 register-targets \ --target-group-arn target-group-arn \ --targets Id=ip-address-1 Id=ip-address-2
  5. Demandez un certificat ACM. Ignorez cette étape si vous utilisez un certificat existant.

    $ aws acm request-certificate \ --domain-name my-custom-domain.com \ --validation-method DNS
  6. Configurez un Application Load Balancer. Créez d'abord l'équilibreur de charge, puis créez un écouteur pour l'équilibreur de charge. Spécifiez le certificat ACM que vous avez créé à l'étape précédente.

    $ 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

    Si vous utilisez un Network Load Balancer dans un sous-réseau privé, configurez un hôte bastion ou un AWS VPN tunnel pour accéder au serveur Web.

  7. Créez une zone hébergée en utilisant Route 53 pour le domaine.

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

    Créez un enregistrement A pour le domaine. Pour ce faire, utilisez le AWS CLI, obtenez l'ID de zone hébergée en utilisant list-hosted-zones-by-name puis appliquez l'enregistrement avecchange-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. Mettez à jour les règles du groupe de sécurité pour le point de terminaison Amazon VPC du serveur Web afin de respecter le principe du moindre privilège en autorisant le trafic HTTPS uniquement depuis les sous-réseaux publics où se trouve l'Application Load Balancer. Enregistrez le code JSON suivant localement. Par exemple, commesg-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" } ] }

    Exécutez la commande Amazon EC2 suivante pour mettre à jour les règles de votre groupe de sécurité d'entrée. Spécifiez le fichier JSON pour--ip-permissions.

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

    Exécutez la commande Amazon EC2 suivante pour mettre à jour vos règles de sortie.

    $ 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

Ouvrez la console Amazon MWAA et accédez à l'interface utilisateur d'Apache Airflow. Si vous configurez un Network Load Balancer dans un sous-réseau privé au lieu de l'Application Load Balancer utilisé ici, vous devez accéder au serveur Web avec l'une des options suivantes.