Configuração de um domínio personalizado para o servidor Web do Apache Airflow - Amazon Managed Workflows for Apache Airflow

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configuração de um domínio personalizado para o servidor Web do Apache Airflow

O Amazon Managed Workflows for Apache Airflow (Amazon MWAA) permite configurar um domínio personalizado para o servidor Web do Apache Airflow (Amazon MWAA). Com um domínio personalizado, você pode acessar o servidor Web do Apache Airflow gerenciado pelo Amazon MWAA do seu ambiente usando a interface de usuário do Apache Airflow, a CLI do Apache Airflow ou o servidor Web do Apache Airflow.

nota

Você só pode usar o domínio personalizado com um servidor Web privado sem acesso à Internet.

Casos de uso de um domínio personalizado no Amazon MWAA
  1. Compartilhe o domínio do servidor Web na sua aplicação de nuvem na AWS: usar um domínio personalizado permite definir um URL fácil de usar para acessar o servidor Web, em vez do nome de domínio do serviço gerado. Você pode armazenar esse domínio personalizado e compartilhá-lo como uma variável de ambiente nas aplicações.

  2. Acesse um servidor Web privado: caso queira configurar o acesso a um servidor Web em uma VPC sem acesso à Internet, usar um domínio personalizado simplifica o fluxo de trabalho de redirecionamento de URL.

Configurar o domínio personalizado

Para configurar o recurso de domínio personalizado, você precisa fornecer o valor dele por meio da configuração webserver.base_url do Apache Airflow ao criar ou atualizar o ambiente do Amazon MWAA. As seguintes restrições se aplicam ao nome de domínio personalizado:

  • O valor deve ser um nome de domínio totalmente qualificado (FQDN) sem protocolos ou caminhos. Por exemplo, your-custom-domain.com.

  • O Amazon MWAA não permite um caminho no URL. Por exemplo, your-custom-domain.com/dags/ não é um nome de domínio personalizado válido.

  • O tamanho do URL está limitado a 255 caracteres ASCII.

  • Se você fornecer uma string vazia, por padrão, o ambiente será criado com um URL de servidor Web gerado pelo Amazon MWAA.

O exemplo a seguir mostra o uso da AWS CLI para criar um ambiente com um nome de domínio 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

Depois que o ambiente for criado ou atualizado, você precisará configurar a infraestrutura de rede na conta da AWS para acessar o servidor Web privado por meio do domínio personalizado.

Para voltar ao URL padrão gerado pelo serviço, atualize seu ambiente privado e remova a opção de configuração webserver.base_url.

Configurar a infraestrutura da rede

Use as etapas a seguir para configurar a infraestrutura de rede necessária para usar com seu domínio personalizado na conta da AWS.

  1. Obtenha os endereços IP das interfaces de rede de endpoint (ENI) da Amazon VPC. Para fazer isso, primeiro use get-environment para encontrar o WebserverVpcEndpointService do ambiente.

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

    Se bem-sucedido, você verá uma saída semelhante à mostrada a seguir.

    {
        "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 o valor de WebserverVpcEndpointService e use-o para web-server-vpc-endpoint-service no próximo comando describe-vpc-endpoints do Amazon EC2 e --filters Name=service-name,Values=web-server-vpc-endpoint-service-id no comando seguinte.

  2. Recupere os detalhes do endpoint da Amazon VPC. Esse comando busca detalhes sobre endpoints da Amazon VPC que correspondem a um nome de serviço específico, retornando o ID do endpoint e os IDs de interface de rede associados em 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. Obtenha os detalhes da interface de rede. Esse comando recupera endereços IP privados para cada interface de rede associada aos endpoints da Amazon VPC identificados na etapa 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. Use create-target-group para criar um grupo de destino. Você usará esse grupo de destino para registrar os endereços IP dos endpoints da Amazon VPC do seu 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 os endereços IP usando o comando register-targets.

    $ aws elbv2 register-targets \ --target-group-arn target-group-arn \ --targets Id=ip-address-1 Id=ip-address-2
  5. Solicitar um certificado do ACM. Ignore esta etapa se estiver usando um certificado existente.

    $ aws acm request-certificate \ --domain-name my-custom-domain.com \ --validation-method DNS
  6. Configure um Application Load Balancer. Primeiro, crie o balanceador de carga e, em seguida, um receptor para ele. Especifique o certificado do ACM criado na etapa 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

    Caso use um Network Load Balancer em uma sub-rede privada, configure um bastion host ou túnel AWS VPN para acessar o servidor Web.

  7. Crie uma zona hospedada usando o Route 53 para o domínio.

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

    Crie um registro A para o domínio. Para fazer isso com a AWS CLI, obtenha o ID da zona hospedada usando list-hosted-zones-by-name e aplique o registro com change-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. Atualize as regras do grupo de segurança do servidor Web do endpoint da Amazon VPC para seguir o princípio do privilégio mínimo, permitindo o tráfego HTTPS somente das sub-redes públicas em que o Application Load Balancer está localizado. Salve o JSON a seguir localmente. Por exemplo, 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" } ] }

    Execute o comando do Amazon EC2 a seguir para atualizar suas regras de grupo de segurança de entrada. Especifique o arquivo JSON para --ip-permissions.

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

    Execute o comando do Amazon EC2 a seguir para atualizar suas regras de saída.

    $ 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 o console do Amazon MWAA e navegue até a interface de usuário do Apache Airflow. Se você estiver configurando um Network Load Balancer em uma sub-rede privada em vez do Application Load Balancer usado aqui, será necessário acessar o servidor Web com uma das opções a seguir.