기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Apache Airflow 웹 서버에 대한 사용자 지정 도메인 설정
Amazon Managed Workflows for Apache Airflow(Amazon MWAA)를 사용하면 관리형 Apache Airflow 웹 서버에 대한 사용자 지정 도메인을 설정할 수 있습니다. 사용자 지정 도메인을 사용하면 Apache Airflow UI, Apache Airflow CLI 또는 Apache Airflow 웹 서버를 사용하여 환경의 Amazon MWAA 관리형 Apache Airflow 웹 서버에 액세스할 수 있습니다.
참고
인터넷 액세스 없이 프라이빗 웹 서버에서만 사용자 지정 도메인을 사용할 수 있습니다.
Amazon MWAA의 사용자 지정 도메인 사용 사례
-
AWS에서 클라우드 애플리케이션 간에 웹 서버 도메인 공유 - 사용자 지정 도메인을 사용하면 생성된 서비스 도메인 이름 대신 웹 서버에 액세스할 수 있는 사용자 친화적 URL을 정의할 수 있습니다. 이 사용자 지정 도메인을 저장하고 애플리케이션에서 환경 변수로 공유할 수 있습니다.
-
프라이빗 웹 서버 액세스 - 인터넷 액세스 없이 VPC의 웹 서버에 대한 액세스를 구성하려는 경우 사용자 지정 도메인을 사용하면 URL 리디렉션 워크플로가 간소화됩니다.
사용자 지정 도메인 구성
사용자 지정 도메인 기능을 구성하려면 Amazon MWAA 환경을 생성하거나 업데이트할 때 webserver.base_url
Apache Airflow 구성을 통해 사용자 지정 도메인 값을 제공해야 합니다. 사용자 지정 도메인 이름에는 다음 제약 조건이 적용됩니다.
-
값은 프로토콜 또는 경로가 없는 정규화된 도메인 이름(FQDN)이어야 합니다. 예:
your-custom-domain.com
. -
Amazon MWAA는 URL의 경로를 허용하지 않습니다. 예를 들어
your-custom-domain.com/dags/
는 유효한 사용자 지정 도메인 이름이 아닙니다. -
URL 길이는 ASCII 문자 255자로 제한됩니다.
-
빈 문자열을 제공하는 경우 기본적으로 환경은 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 계정의 사용자 지정 도메인과 함께 사용하는 데 필요한 네트워킹 인프라를 설정합니다.
-
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
값을 기록하고 다음 Amazon EC2describe-vpc-endpoints
명령의web-server-vpc-endpoint-service
에 사용합니다. 다음 명령에서--filters Name=service-name,Values=
입니다.web-server-vpc-endpoint-service-id
-
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 -
네트워크 인터페이스 세부 정보를 가져옵니다. 이 명령은 이전 단계에서 식별된 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 -
create-target-group
을 사용하여 새로운 대상 그룹을 생성합니다. 이 대상 그룹을 사용하여 웹 서버 Amazon VPC 엔드포인트의 IP 주소를 등록합니다.$
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"'register-targets
명령을 사용하여 IP 주소를 등록합니다.$
aws elbv2 register-targets \ --target-group-arn
target-group-arn
\ --targets Id=ip-address-1
Id=ip-address-2
-
ACM; 인증서를 요청합니다. 기존 인증서를 사용하는 경우 이 단계를 건너뜁니다.
$
aws acm request-certificate \ --domain-name
my-custom-domain.com
\ --validation-method DNS -
Application Load Balancer를 구성합니다. 먼저 로드 밸런서를 생성한 다음, 로드 밸런서에 대한 리스너를 생성합니다. 이전 단계에서 생성한 ACM 인증서를 지정합니다.
$
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
프라이빗 서브넷에서 Network Load Balancer를 사용하는 경우 웹 서버에 액세스하도록 Bastion 호스트 또는 AWS VPN 터널을 설정합니다.
-
도메인에 대한 Route 53를 사용하여 호스팅 영역을 생성합니다.
$
aws route53 create-hosted-zone --name my-custom-domain.com \ --caller-reference 1
도메인에 대한 A 레코드를 생성합니다. AWS CLI를 사용하여 이렇게 하려면
list-hosted-zones-by-name
을 사용하여 호스팅 영역 ID를 가져온 다음,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 } } } ] }' -
Application Load Balancer가 있는 퍼블릭 서브넷으로부터의 HTTPS 트래픽만 허용함으로써 웹 서버 Amazon VPC 엔드포인트의 보안 그룹 규칙을 업데이트하여 최소 권한 원칙을 따릅니다. 다음 JSON을 로컬에 저장합니다. 예를 들어
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 명령을 실행하여 수신 보안 그룹 규칙을 업데이트합니다.
--ip-permissions
에 대한 JSON 파일을 지정합니다.$
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-groupload-balancer-security-group-id
Amazon MWAA 콘솔을 열고 Apache Airflow UI로 이동합니다. 여기에 사용되는 Application Load Balancer 대신 프라이빗 서브넷에서 Network Load Balancer를 설정하는 경우 다음 옵션 중 하나를 사용하여 웹 서버에 액세스해야 합니다.