Configurando um domínio personalizado para o servidor web 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á.

Configurando um domínio personalizado para o servidor web Apache Airflow

O Amazon Managed Workflows for Apache Airflow (Amazon MWAA) permite que você configure um domínio personalizado para o servidor web Apache Airflow gerenciado. Usando um domínio personalizado, você pode acessar o servidor web 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 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 em seu aplicativo de nuvem no AWS — O uso de um domínio personalizado permite definir uma URL amigável para acessar o servidor da 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 — Se você quiser configurar o acesso a um servidor web em uma VPC sem acesso à Internet, o uso de 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 do domínio personalizado por meio da configuração do webserver.base_url Apache Airflow ao criar ou atualizar seu ambiente 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 nenhum protocolo ou caminho. 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 uma URL de servidor web gerada pelo Amazon MWAA.

Use o exemplo a seguir para criar um ambiente com um nome de domínio de servidor web personalizado usando o. AWS CLI

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

Depois que o ambiente for criado ou atualizado, você precisará configurar a infraestrutura de rede 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 em seu 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 for bem-sucedido, você obterá um resultado semelhante ao seguinte.

    {
      "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 WebserverVpcEndpointService valor e use-o web-server-vpc-endpoint-service no seguinte EC2 describe-vpc-endpoints comando da Amazon. --filters Name=service-name,Values=web-server-vpc-endpoint-service-idno comando a seguir.

  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 a IDs interface de rede associada 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-alvo para registrar os endereços IP dos endpoints 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

    Se você usa um Network Load Balancer em uma sub-rede privada, configure um bastion host ou AWS VPN túnel 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 usando o AWS CLI, obtenha o ID da zona hospedada usando list-hosted-zones-by-name e aplique o registro comchange-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 para o endpoint Amazon VPC do servidor web para seguir o princípio do menor privilégio, 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 seguinte EC2 comando da Amazon 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 seguinte EC2 comando da Amazon 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, você deve acessar o servidor web com uma das seguintes opções.