Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
이 페이지에서는 사용자 환경에서 Airflow 연결을 관리하고 DAG에서 액세스하는 방법을 설명합니다.
Airflow 연결 정보
Airflow 연결은 사용자 인증 정보 및 사용자 이름, 연결 문자열, 비밀번호와 같은 기타 연결 정보를 저장합니다. DAG는 연결을 사용하여 DAG에서 Google Cloud 및 다른 서비스의 리소스를 통신하고 액세스합니다.
DAG의 Airflow 연산자는 연산자의 기본 연결을 사용하거나 커스텀 연결 이름을 지정합니다.
연결 보안 정보
대부분의 Airflow 연산자는 사용자 인증 정보를 직접 허용하지 않습니다. 대신 Airflow 연결을 사용합니다.
새 환경을 만들면 Cloud Composer가 환경의 고유 영구 퍼넷 키를 생성하고 기본적으로 연결 엑스트라를 보호합니다. Airflow UI의 구성 페이지에서 fernet_key
를 확인할 수 있습니다.
Airflow에서 연결 및 비밀번호가 보호되는 방법에 대한 자세한 내용은 연결 보안 및 민감한 정보 마스킹을 참조하세요.
연결 유형 정보
Airflow는 다양한 유형의 연결을 사용하여 특정 서비스에 연결합니다. 예를 들어 Google Cloud 연결 유형은 Google Cloud의 다른 서비스에 연결됩니다. 또 다른 예시로 S3 연결 유형은 Amazon S3 버킷에 연결합니다.
Airflow에 연결 유형을 추가하려면 해당 연결 유형으로 PyPI 패키지를 설치합니다.
일부 패키지는 사용자 환경에 사전 설치되어 있습니다. 예를 들어 커스텀 PyPI 패키지를 설치하지 않고도 apache-airflow-providers-google
패키지의 연결을 사용할 수 있습니다.
사전 구성된 연결
Cloud Composer는 환경에서 다음과 같은 기본 연결을 구성합니다. 이러한 연결을 사용하여 프로젝트를 구성하지 않고도 프로젝트의 리소스에 액세스할 수 있습니다.
google_cloud_default
bigquery_default
google_cloud_datastore_default
google_cloud_storage_default
Secret Manager에서 연결 추가
Airflow에 추가하지 않고 Secret Manager에 연결을 저장할 수 있습니다. 사용자 인증 정보 및 기타 민감한 정보를 저장할 때는 이 방법을 사용하는 것이 좋습니다.
Secret Manager에서 연결을 추가하려면 다음 안내를 따르세요.
연결 패턴과 일치하는 이름으로 보안 비밀을 추가합니다.
예를 들면
airflow-connections-example_connection
입니다. DAG에서 프리픽스(example_connection
) 없이 연결 이름을 사용합니다.연결에 매개변수를 추가합니다.
JSON 형식
연결의 JSON 표현을 보안 비밀 값으로 추가합니다. 예를 들면 다음과 같습니다.
{ "conn_type": "mysql", "host": "example.com", "login": "login", "password": "password", "port": "9000" }
JSON 연결 형식에 대한 자세한 내용은 Airflow 문서를 참조하세요.
URI 형식
연결의 URI 표현을 보안 비밀 값으로 추가합니다.
보안 비밀은 연결의 URI 표현을 저장해야 합니다. 예를 들면
mysql://login:password@example.com:9000
입니다.URI는 URL로 인코딩되어야 합니다. 예를 들어 공백 기호가 있는 비밀번호는 다음과 같이 URL로 인코딩되어야 합니다.
mysql://login:secret%20password@example.com:9000
.
Airflow에는 연결 URI 생성을 위한 편의 메서드가 있습니다. JSON 엑스트라를 사용하여 복잡한 URL을 인코딩하는 방법에 대한 예시는 Airflow 문서를 참조하세요.
Airflow에서 연결 추가
Secret Manager에 연결을 저장하는 대신 Airflow에 연결을 저장할 수 있습니다.
Airflow에서 연결을 추가하려면 다음 안내를 따르세요.
Airflow CLI
Google Cloud CLI를 통해 connections add
Airflow CLI 명령어를 실행합니다. 예를 들면 다음과 같습니다.
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
connections add -- \
--conn-type "mysql" \
--conn-host "example.com" \
--conn-port "9000" \
--conn-login "login" \
--conn-password "password" \
example_connection
--conn-uri
인수를 사용할 수도 있습니다.
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
connections add -- \
--conn-uri "mysql://login:password@example.com:9000" \
example_connection
다음을 바꿉니다.
ENVIRONMENT_NAME
: 환경의 이름LOCATION
: 환경이 위치한 리전입니다.
Airflow UI
연결 만들기에 대한 Airflow 문서를 따르세요.
Airflow가 연결을 올바르게 읽는지 확인
Google Cloud CLI를 통해 connections get
Airflow CLI 명령어를 실행하여 연결이 올바르게 읽히는지 확인할 수 있습니다. 예를 들어 Secret Manager에 연결을 저장하면 보안 비밀에서 연결의 모든 매개변수를 읽을 수 있는지 확인하는 방법이 제공됩니다.
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
connections get \
-- CONNECTION_NAME
다음과 같이 바꿉니다.
ENVIRONMENT_NAME
을 환경 이름으로 바꿉니다.LOCATION
: 환경이 위치한 리전CONNECTION_NAME
을 연결 이름으로 바꿉니다. 연결이 Secret Manager에 저장된 경우 연결 프리픽스 없이 연결 이름을 사용합니다. 예를 들어airflow-connections-example_connection_json
대신example_connection
을 지정합니다.
예를 들면 다음과 같습니다.
gcloud composer environments run example-environment \
--location us-central1 \
connections get \
-- example_connection -o json
DAG에서 Airflow 연결 사용
이 섹션에서는 DAG에서 연결에 액세스하는 방법을 설명합니다.
Secret Manager 연결 사용
프리픽스 없이 연결 이름을 사용합니다. 예를 들어 보안 비밀 이름이 airflow-connections-aws_s3
이면 aws_s3
을 지정합니다.
transfer_dir_from_s3 = S3ToGCSOperator(
task_id='transfer_dir_from_s3',
aws_conn_id='aws_s3',
prefix='data-for-gcs',
bucket='example-s3-bucket-transfer-operators',
dest_gcs='gs://us-central1-example-environ-361f4221-bucket/data/from-s3/')
Secret Manager에 기본 연결을 저장하는 경우 연결 이름을 생략할 수 있습니다. 연산자에서 사용하는 기본 연결 이름을 가져오려면 특정 연산자에 대한 Airflow 문서를 참조하세요. 예를 들어 S3ToGCSOperator
Airflow 연산자는 기본적으로 aws_default
연결을 사용합니다. 이 기본 연결을 airflow-connections-aws_default
라는 보안 비밀에 저장할 수 있습니다.
Airflow에 저장된 연결 사용
Airflow에 정의된 연결 이름을 사용합니다.
transfer_dir_from_s3 = S3ToGCSOperator(
task_id='transfer_dir_from_s3',
aws_conn_id='aws_s3',
prefix='data-for-gcs',
bucket='example-s3-bucket-transfer-operators',
dest_gcs='gs://us-central1-example-environ-361f4221-bucket/data/from-s3/')
연산자에 기본 연결을 사용하려면 연결 이름을 생략합니다. 연산자에서 사용하는 기본 연결 이름을 가져오려면 특정 연산자에 대한 Airflow 문서를 참조하세요. 예를 들어 S3ToGCSOperator
Airflow 연산자는 기본적으로 aws_default
연결을 사용합니다.
문제 해결
환경에서 Secret Manager에 저장된 보안 비밀에 액세스할 수 없는 경우:
해당 환경에 Secret Manager가 구성되었는지 확인합니다.
Secret Manager의 연결 이름이 Airflow에서 사용하는 연결에 해당하는지 확인합니다. 예를 들어 이름이
example_connection
인 연결의 경우 보안 비밀 이름은airflow-connections-example_connection
입니다.Airflow가 연결을 올바르게 읽는지 확인합니다.