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
-
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.
-
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.
-
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 paraweb-server-vpc-endpoint-service
no próximo comandodescribe-vpc-endpoints
do Amazon EC2 e--filters Name=service-name,Values=
no comando seguinte.web-server-vpc-endpoint-service-id
-
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 -
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 -
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-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 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
-
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 -
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 \ --subnetssubnet-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.
-
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 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 } } } ] }' -
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-groupload-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.