Configuración de un dominio personalizado para el servidor web Apache Airflow - Amazon Managed Workflows para Apache Airflow

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configuración de un dominio personalizado para el servidor web Apache Airflow

Amazon Managed Workflows for Apache Airflow (Amazon MWAA) le permite configurar un dominio personalizado para el servidor web Apache Airflow gestionado. Con un dominio personalizado, puede acceder al servidor web Apache Airflow gestionado por Amazon MWAA de su entorno mediante la interfaz de usuario de Apache Airflow, la CLI de Apache Airflow o el servidor web Apache Airflow.

nota

Solo puede usar un dominio personalizado con un servidor web privado sin acceso a Internet.

Casos de uso de un dominio personalizado en Amazon MWAA
  1. Comparta el dominio del servidor web con su aplicación en la nube AWS : el uso de un dominio personalizado le permite definir una URL fácil de usar para acceder al servidor web, en lugar del nombre de dominio de servicio generado. Puede almacenar este dominio personalizado y compartirlo como una variable de entorno en sus aplicaciones.

  2. Acceso a un servidor web privado: si desea configurar el acceso a un servidor web en una VPC sin acceso a Internet, el uso de un dominio personalizado simplifica el flujo de trabajo de redireccionamiento de URL.

Configura el dominio personalizado

Para configurar la función de dominio personalizado, debe proporcionar el valor de dominio personalizado a través de la configuración de webserver.base_url Apache Airflow al crear o actualizar su entorno Amazon MWAA. Se aplican las siguientes restricciones a su nombre de dominio personalizado:

  • El valor debe ser un nombre de dominio completo (FQDN) sin ningún protocolo o ruta. Por ejemplo, your-custom-domain.com.

  • Amazon MWAA no permite ninguna ruta en la URL. Por ejemplo, no your-custom-domain.com/dags/ es un nombre de dominio personalizado válido.

  • La longitud de la URL está limitada a 255 caracteres ASCII.

  • Si proporciona una cadena vacía, de forma predeterminada, el entorno se creará con una URL de servidor web generada por Amazon MWAA.

En el siguiente ejemplo, se muestra el uso de AWS CLI para crear un entorno con un nombre de dominio de servidor web personalizado.

$ 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

Una vez creado o actualizado el entorno, debe configurar la infraestructura de red de su AWS cuenta para acceder al servidor web privado a través del dominio personalizado.

Para volver a la URL predeterminada generada por el servicio, actualiza tu entorno privado y elimina la webserver.base_url opción de configuración.

Configure la infraestructura de red

Siga los siguientes pasos para configurar la infraestructura de red necesaria para usarla con el dominio personalizado de su AWS cuenta.

  1. Obtenga las direcciones IP de las interfaces de red de puntos finales (ENI) de Amazon VPC. Para ello, utilice primero get-environmentpara buscar la adecuada WebserverVpcEndpointService para su entorno.

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

    Si tiene éxito, verá un resultado similar al siguiente.

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

    Anote el WebserverVpcEndpointService valor y utilícelo web-server-vpc-endpoint-service en el siguiente comando de Amazon EC2describe-vpc-endpoints. --filters Name=service-name,Values=web-server-vpc-endpoint-service-iden el siguiente comando.

  2. Recupere los detalles del punto de conexión de Amazon VPC. Este comando obtiene detalles sobre los puntos de enlace de Amazon VPC que coinciden con un nombre de servicio específico y devuelve el ID del punto final y los ID de interfaz de red asociados en formato de texto.

    $ aws ec2 describe-vpc-endpoints \ --filters Name=service-name,Values=web-server-vpc-endpoint-service \ --query 'VpcEndpoints[*].{EndpointId:VpcEndpointId,NetworkInterfaceIds:NetworkInterfaceIds}' \ --output text
  3. Obtenga los detalles de la interfaz de red. Este comando recupera las direcciones IP privadas de cada interfaz de red asociada a los puntos de enlace de Amazon VPC identificados en el paso anterior.

    $ 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. Se utiliza create-target-group para crear un nuevo grupo objetivo. Utilizará este grupo objetivo para registrar las direcciones IP de los puntos de conexión de Amazon VPC de su servidor 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"'

    Registre las direcciones IP mediante el register-targets comando.

    $ aws elbv2 register-targets \ --target-group-arn target-group-arn \ --targets Id=ip-address-1 Id=ip-address-2
  5. Solicite un certificado ACM. Omita este paso si utiliza un certificado existente.

    $ aws acm request-certificate \ --domain-name my-custom-domain.com \ --validation-method DNS
  6. Configure un Application Load Balancer. En primer lugar, crea el balanceador de cargas y, a continuación, crea un agente de escucha para el balanceador de cargas. Especifique el certificado ACM que creó en el paso anterior.

    $ 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 usa un Network Load Balancer en una subred privada, configure un host o AWS VPN túnel bastión para acceder al servidor web.

  7. Cree una zona alojada con Route 53 para el dominio.

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

    Cree un registro A para el dominio. Para ello AWS CLI, obtenga el ID de la zona alojada y, a list-hosted-zones-by-name continuación, aplique el registro conchange-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. Actualice las reglas del grupo de seguridad para el punto final de Amazon VPC del servidor web para que sigan el principio de privilegios mínimos al permitir el tráfico HTTPS solo desde las subredes públicas en las que se encuentra el Application Load Balancer. Guarde el siguiente JSON de forma local. Por ejemplo, comosg-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" } ] }

    Ejecute el siguiente comando de Amazon EC2 para actualizar las reglas del grupo de seguridad de entrada. Especifique el archivo JSON para. --ip-permissions

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

    Ejecute el siguiente comando de Amazon EC2 para actualizar las reglas de salida.

    $ 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

Abra la consola de Amazon MWAA y navegue hasta la interfaz de usuario de Apache Airflow. Si va a configurar un Network Load Balancer en una subred privada en lugar del Application Load Balancer que se utiliza aquí, debe acceder al servidor web con una de las siguientes opciones.