Configuración de un dominio personalizado para el servidor web Apache Airflow
Amazon Managed Workflows para Apache Airflow (Amazon MWAA) le permite configurar un dominio personalizado para el servidor web Apache Airflow administrado. Con un dominio personalizado, puede acceder al servidor web Apache Airflow administrado por Amazon MWAA de su entorno mediante la UI 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
-
Comparta el dominio del servidor web con una aplicación en la nube en 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.
-
Acceda a un servidor web privado: si quiere 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 la URL.
Configuración del dominio personalizado
Para configurar la característica de dominio personalizado, debe proporcionar el valor de dominio personalizado mediante la configuración webserver.base_url de Apache Airflow cuando crea o actualiza el entorno Amazon MWAA. Las siguientes limitaciones se aplican a su nombre de dominio personalizado:
-
El valor debe ser un nombre de dominio completo (FQDN) sin protocolo o ruta. Por ejemplo,
your-custom-domain.com. -
Amazon MWAA no permite ninguna ruta en la URL. Por ejemplo,
your-custom-domain.com/dags/no 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:::amzn-s3-demo-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 que se crea o actualiza el entorno, debe configurar la infraestructura de red en su Cuenta de AWS para acceder al servidor web privado a través del dominio personalizado.
Para volver a la URL predeterminada generada por el servicio, actualice su entorno privado y elimine la opción de configuración webserver.base_url.
Configuración de la infraestructura de red
Siga los siguientes pasos para configurar la infraestructura de red necesaria para usarla con el dominio personalizado en su Cuenta de AWS.
-
Obtenga las direcciones IP de las interfaces de red de puntos de conexión (ENI) de Amazon VPC. Para ello, utilice primero
get-environmentpara buscar el WebserverVpcEndpointServiceadecuado para su entorno.aws mwaa get-environment --nameyour-environment-nameSi la operación se realiza correctamente, 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" } }Tome nota del valor
WebserverVpcEndpointServicey utilícelo paraweb-server-vpc-endpoint-serviceen el siguiente comandodescribe-vpc-endpointsde Amazon EC2. Use--filters Name=service-name,Values=en el siguiente comando.web-server-vpc-endpoint-service-id -
Recupere los detalles del punto de conexión de Amazon VPC. Este comando obtiene detalles sobre los puntos de conexión de Amazon VPC que coinciden con un nombre de servicio específico, y devuelve el ID del punto de conexión y los ID de las interfaces de red asociadas 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 -
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 conexión 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 -
Utilice
create-target-grouppara crear un grupo de destino. Debe usar este grupo objetivo para registrar las direcciones IP para los puntos de conexión de Amazon VPC de su servidor web.aws elbv2 create-target-group \ --namenew-target-group-namne\ --protocol HTTPS \ --port 443 \ --vpc-idweb-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 comando
register-targets.aws elbv2 register-targets \ --target-group-arntarget-group-arn\ --targets Id=ip-address-1Id=ip-address-2 -
Solicite un certificado de ACM. Omita este paso si utiliza un certificado existente.
aws acm request-certificate \ --domain-namemy-custom-domain.com\ --validation-method DNS -
Configure un Application Load Balancer. En primer lugar, cree el equilibrador de carga y, a continuación, cree un oyente para el equilibrador de carga. Especifique el certificado de ACM que creó en el paso anterior.
aws elbv2 create-load-balancer \ --namemy-mwaa-lb\ --type application \ --subnetssubnet-id-1subnet-id-2aws elbv2 create-listener \ --load-balancer-arnload-balancer-arn\ --protocol HTTPS \ --port 443 \ --ssl-policy ELBSecurityPolicy-2016-08 \ --certificates CertificateArn=acm-certificate-arn\ --default-actions Type=forward,TargetGroupArn=target-group-arnSi usa un equilibrador de carga de red en una subred privada, configure un host bastión o un túnel de Site-to-Site VPN para acceder al servidor web.
-
Cree una zona alojada mediante Route 53 para el dominio.
aws route53 create-hosted-zone --name my-custom-domain.com \ --caller-reference 1Cree un registro A para el dominio. Para hacer esto mediante el uso de la AWS CLI, obtenga el ID de la zona alojada mediante
list-hosted-zones-by-name, luego 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 } } } ] }' -
Actualice las reglas del grupo de seguridad para el punto de conexión de Amazon VPC del servidor web para seguir el principio de privilegio mínimo. De ese modo, se permite tráfico HTTPS solo desde las subredes públicas donde se encuentra el equilibrador de carga de aplicación. Guarde el siguiente JSON de forma local. Por ejemplo, como
sg-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.jsonEjecute el siguiente comando de Amazon EC2 para actualizar las reglas de salida.
aws ec2 authorize-security-group-egress \ --group-idwebserver-vpc-endpoint-security-group-id\ --protocol tcp \ --port 443 \ --source-groupload-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 equilibrador de carga de red en una subred privada en lugar del equilibrador de carga de aplicación que se usa aquí, debe acceder al servidor web con una de las siguientes opciones.