Apache Airflow 웹 서버의 사용자 지정 도메인 설정 - Amazon Managed Workflows for Apache Airflow

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Apache Airflow 웹 서버의 사용자 지정 도메인 설정

아파치 에어플로우용 아마존 관리형 워크플로 (Amazon MWAA) 를 사용하면 관리형 아파치 에어플로우 웹 서버에 대한 사용자 지정 도메인을 설정할 수 있습니다. 사용자 지정 도메인을 사용하면 Apache Airflow UI, Apache Airflow CLI 또는 Apache Airflow 웹 서버를 사용하여 환경의 Amazon MWAA에서 관리하는 Apache Airflow 웹 서버에 액세스할 수 있습니다.

참고

인터넷에 액세스할 수 없는 사설 웹 서버에서만 사용자 지정 도메인을 사용할 수 있습니다.

Amazon MWAA의 사용자 지정 도메인 사용 사례
  1. 에서 클라우드 애플리케이션 전반에서 웹 서버 도메인 공유 AWS — 사용자 지정 도메인을 사용하면 생성된 서비스 도메인 이름 대신 웹 서버에 액세스하기 위한 사용자 친화적인 URL을 정의할 수 있습니다. 이 사용자 지정 도메인을 저장하고 애플리케이션에서 환경 변수로 공유할 수 있습니다.

  2. 사설 웹 서버 액세스 — 인터넷 액세스가 없는 VPC에서 웹 서버에 대한 액세스를 구성하려는 경우 사용자 지정 도메인을 사용하면 URL 리디렉션 워크플로가 간소화됩니다.

커스텀 도메인을 구성합니다.

사용자 지정 도메인 기능을 구성하려면 Amazon MWAA 환경을 만들거나 업데이트할 때 webserver.base_url Apache Airflow 구성을 통해 사용자 지정 도메인 값을 제공해야 합니다. 사용자 지정 도메인 이름에는 다음과 같은 제약이 적용됩니다.

  • 값은 프로토콜이나 경로가 없는 FQDN (정규화된 도메인 이름) 이어야 합니다. 예를 들어 your-custom-domain.com입니다.

  • Amazon MWAA는 URL에 경로를 허용하지 않습니다. 예를 들어 your-custom-domain.com/dags/ 은 (는) 유효한 사용자 지정 도메인 이름이 아닙니다.

  • URL 길이는 255개의 ASCII 문자로 제한됩니다.

  • 빈 문자열을 제공하면 기본적으로 Amazon MWAA에서 생성한 웹 서버 URL로 환경이 생성됩니다.

다음 예제는 를 사용하여 사용자 지정 웹 서버 도메인 이름이 있는 환경을 만드는 방법을 보여줍니다. AWS CLI

$ 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

환경을 만들거나 업데이트한 후에는 사용자 지정 도메인을 통해 사설 웹 서버에 액세스할 수 있도록 AWS 계정의 네트워킹 인프라를 설정해야 합니다.

기본 서비스 생성 URL로 되돌리려면 프라이빗 환경을 업데이트하고 구성 옵션을 제거하세요. webserver.base_url

네트워킹 인프라를 설정합니다.

다음 단계를 사용하여 AWS 계정의 사용자 지정 도메인과 함께 사용할 필수 네트워킹 인프라를 설정합니다.

  1. Amazon VPC 엔드포인트 네트워크 인터페이스 (ENI) 의 IP 주소를 가져옵니다. 이 작업을 수행하려면 먼저 get-environment를 사용하여 환경에 맞는 주소를 WebserverVpcEndpointService 찾으십시오.

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

    성공하면 다음과 비슷한 출력이 표시됩니다.

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

    WebserverVpcEndpointService값을 기록해 web-server-vpc-endpoint-service 두고 다음 Amazon EC2 describe-vpc-endpoints 명령에서 사용하십시오. --filters Name=service-name,Values=web-server-vpc-endpoint-service-id다음 명령에서

  2. Amazon VPC 엔드포인트 세부 정보를 검색합니다. 이 명령은 특정 서비스 이름과 일치하는 Amazon VPC 엔드포인트에 대한 세부 정보를 가져와서 엔드포인트 ID 및 관련 네트워크 인터페이스 ID를 텍스트 형식으로 반환합니다.

    $ aws ec2 describe-vpc-endpoints \ --filters Name=service-name,Values=web-server-vpc-endpoint-service \ --query 'VpcEndpoints[*].{EndpointId:VpcEndpointId,NetworkInterfaceIds:NetworkInterfaceIds}' \ --output text
  3. 네트워크 인터페이스 세부 정보를 가져옵니다. 이 명령은 이전 단계에서 식별한 Amazon VPC 엔드포인트와 연결된 각 네트워크 인터페이스의 사설 IP 주소를 검색합니다.

    $ 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. 새 대상 create-target-group 그룹을 생성하는 데 사용합니다. 이 대상 그룹을 사용하여 웹 서버 Amazon VPC 엔드포인트의 IP 주소를 등록합니다.

    $ 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"'

    명령을 사용하여 IP 주소를 등록합니다. register-targets

    $ aws elbv2 register-targets \ --target-group-arn target-group-arn \ --targets Id=ip-address-1 Id=ip-address-2
  5. ACM 인증서를 요청합니다. 기존 인증서를 사용하는 경우 이 단계를 건너뛰십시오.

    $ aws acm request-certificate \ --domain-name my-custom-domain.com \ --validation-method DNS
  6. Application Load Balancer를 구성합니다. 먼저 로드 밸런서를 생성한 다음 로드 밸런서용 리스너를 생성합니다. 이전 단계에서 생성한 ACM 인증서를 지정합니다.

    $ 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

    프라이빗 서브넷에서 Network Load Balancer를 사용하는 경우 배스천 호스트 또는 AWS VPN 터널을 설정하여 웹 서버에 액세스하십시오.

  7. 도메인에 Route 53을 사용하여 호스팅 영역을 생성합니다.

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

    도메인의 A 레코드를 생성합니다. 를 사용하여 이 작업을 수행하려면 를 사용하여 호스팅 영역 ID를 가져온 list-hosted-zones-by-name 다음 를 사용하여 레코드를 적용하십시오change-resource-record-sets. AWS CLI

    $ 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. Application Load Balancer가 위치한 퍼블릭 서브넷으로부터의 HTTPS 트래픽만 허용하여 최소 권한 원칙을 따르도록 웹 서버 Amazon VPC 엔드포인트에 대한 보안 그룹 규칙을 업데이트하십시오. 다음 JSON을 로컬에 저장합니다. 예를 들어, as. 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" } ] }

    다음 Amazon EC2 명령을 실행하여 수신 보안 그룹 규칙을 업데이트합니다. 에 대한 JSON 파일을 지정합니다. --ip-permissions

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

    다음 Amazon EC2 명령을 실행하여 송신 규칙을 업데이트하십시오.

    $ 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

Amazon MWAA 콘솔을 열고 아파치 에어플로우 UI로 이동합니다. 여기에 사용된 Application Load Balancer 대신 프라이빗 서브넷에서 Network Load Balancer를 설정하는 경우 다음 옵션 중 하나를 사용하여 웹 서버에 액세스해야 합니다.