Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Esta página descreve como gerir as associações do Airflow no seu ambiente e aceder a elas a partir dos seus DAGs.
Acerca das associações do Airflow
As ligações do Airflow armazenam credenciais e outras informações de ligação, como nomes de utilizadores, strings de ligação e palavras-passe. Os DAGs usam ligações para comunicar e aceder a recursos no Google Cloud e a outros serviços a partir dos seus DAGs.
Os operadores do Airflow nos seus DAGs usam uma ligação predefinida para o operador ou especifica um nome de ligação personalizado.
Acerca da segurança da ligação
A maioria dos operadores do Airflow não aceita credenciais diretamente. Em alternativa, usam ligações do Airflow.
Quando cria um novo ambiente, o Cloud Composer gera uma chave Fernet única e permanente para o ambiente e protege os extras de ligação por predefinição. Pode ver o fernet_key
na página Configuração na
IU do Airflow.
Para mais informações sobre como as ligações e as palavras-passe são protegidas no Airflow, consulte Proteger ligações e Ocultar dados confidenciais na documentação do Airflow.
Acerca dos tipos de ligações
O Airflow usa ligações de diferentes tipos para se ligar a serviços específicos. Por exemplo, o Google Cloud tipo de ligação estabelece ligação a outros serviços em Google Cloud. Como outro exemplo, o tipo de ligação do S3 liga-se a um contentor do Amazon S3.
Para adicionar um tipo de ligação ao Airflow,
instale um pacote PyPI com esse tipo de ligação.
Alguns pacotes estão pré-instalados no seu ambiente. Por exemplo, pode usar a ligação do pacote apache-airflow-providers-google
sem instalar pacotes PyPI personalizados.
Ligações pré-configuradas
O Cloud Composer configura as seguintes associações predefinidas no seu ambiente. Pode usar estas associações para aceder a recursos no seu projeto sem os configurar.
google_cloud_default
bigquery_default
google_cloud_datastore_default
google_cloud_storage_default
Adicione uma associação no Secret Manager
Pode armazenar uma ligação no Secret Manager sem a adicionar ao Airflow. Recomendamos que use esta abordagem quando armazenar credenciais e outras informações confidenciais.
Para adicionar uma associação no Secret Manager:
Adicione um segredo com o nome que corresponde ao padrão das associações.
Por exemplo:
airflow-connections-example_connection
. Nos DAGs, use o nome da associação sem o prefixo:example_connection
.Adicione parâmetros para a associação:
Formato JSON
Adicione a representação JSON da sua associação como o valor do segredo. Por exemplo:
{ "conn_type": "mysql", "host": "example.com", "login": "login", "password": "password", "port": "9000" }
Para mais informações sobre o formato de ligação JSON, consulte a documentação do Airflow.
Formato do URI
Adicione a representação do URI da sua ligação como o valor de: secret:
O segredo tem de armazenar uma representação de URI da associação. Por exemplo,
mysql://login:password@example.com:9000
.O URI tem de estar codificado em URL. Por exemplo, uma palavra-passe que tenha um símbolo de espaço tem de ser codificada por URL da seguinte forma:
mysql://login:secret%20password@example.com:9000
.
O Airflow tem um método prático para gerar URIs de ligação. Pode encontrar um exemplo de como codificar um URL complexo com extras JSON na documentação do Airflow.
Verifique se todos os parâmetros de ligação são lidos corretamente a partir do Secret Manager.
Adicione uma associação no Airflow
Em alternativa ao armazenamento das suas ligações no Secret Manager, pode armazená-las no Airflow.
Para adicionar uma ligação no Airflow:
CLI do Airflow
Execute o
comando da CLI do Airflow connections add
com a CLI do Google Cloud. Por exemplo:
No Airflow 2:
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
Também pode usar o argumento --conn-uri
:
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
connections add -- \
--conn-uri "mysql://login:password@example.com:9000" \
example_connection
No Airflow 1:
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" \
--conn_id "example_connection"
Substitua o seguinte:
ENVIRONMENT_NAME
: o nome do seu ambiente.LOCATION
: a região onde o ambiente está localizado.
IU do Airflow
Siga a documentação do Airflow sobre a criação de associações.
Verifique se o Airflow lê corretamente uma ligação
Pode executar o comando da CLI do connections get
Airflow através da CLI do Google Cloud para verificar se uma ligação é lida corretamente. Por exemplo, se armazenar uma ligação no Secret Manager, isto oferece uma forma de verificar se todos os parâmetros de uma ligação são lidos pelo Airflow a partir de um segredo.
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
connections get \
-- CONNECTION_NAME
Substituir:
ENVIRONMENT_NAME
com o nome do ambiente.LOCATION
com a região onde o ambiente está localizado.CONNECTION_NAME
com o nome da associação. Se a sua ligação estiver armazenada no Secret Manager, use o nome da ligação sem o prefixo da ligação. Por exemplo, especifiqueexample_connection
em vez deairflow-connections-example_connection_json
.
Exemplo:
gcloud composer environments run example-environment \
--location us-central1 \
connections get \
-- example_connection -o json
Use associações do Airflow nos seus DAGs
Esta secção mostra como aceder à sua ligação a partir de um DAG.
Use uma ligação do Secret Manager
Use o nome da associação sem o prefixo. Por exemplo, se o seu segredo se chamar airflow-connections-aws_s3
, especifique 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/')
Se armazenar uma associação predefinida no Secret Manager, pode omitir o nome da associação. Consulte a documentação do Airflow para um operador específico para obter o nome de ligação predefinido usado por um operador. Por exemplo, o operador do Airflow usa a ligação aws_default
por predefinição.S3ToGCSOperator
Pode armazenar esta associação predefinida num segredo com o nome
airflow-connections-aws_default
.
Use uma associação armazenada no Airflow
Use o nome da ligação, conforme definido no 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/')
Para usar a associação predefinida de um operador, omita o nome da associação. Consulte a documentação do Airflow para um operador específico para obter o nome de ligação predefinido usado por um operador. Por exemplo, o operador S3ToGCSOperator
Airflow
usa a ligação aws_default
por predefinição.
Resolução de problemas
Se o seu ambiente não conseguir aceder ao segredo armazenado no Gestor Secreto:
Certifique-se de que o Secret Manager está configurado no seu ambiente.
Verifique se o nome dessa associação no Secret Manager corresponde à associação usada pelo Airflow. Por exemplo, para uma associação denominada
example_connection
, o nome do segredo éairflow-connections-example_connection
.Verifique se o Airflow lê corretamente uma ligação.