Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
O Apache Airflow tem uma interface da API REST que pode ser usada para executar tarefas como ver informações sobre execuções e tarefas do DAG, atualizar DAGs, configurar o Airflow, adicionar e excluir conexões e listar usuários.
Para um exemplo de como usar a API REST do Airflow com funções do Cloud Run, consulte Como acionar DAGs com o Cloud Functions.
Versões da API REST do Airflow
As seguintes versões da API REST do Airflow estão disponíveis no Cloud Composer 1:
- O Airflow 1 usa a API REST experimental.
O Airflow 2 usa a API REST estável. A API REST experimental foi interrompida pelo Airflow.
Ainda será possível usar a API REST experimental no Airflow 2 se você ativá-la por meio de uma substituição da configuração do Airflow, como descrito em mais detalhes.
Antes de começar
Enable the Cloud Composer API.
Ativar a API REST estável do Airflow
Airflow 2
A API REST estável já está ativada por padrão no Airflow 2.
O Cloud Composer usa o próprio back-end de autenticação da API, que é integrado ao Identity-Aware Proxy.A autorização funciona da maneira padrão fornecida pelo Airflow. Quando um novo usuário
autoriza por meio da API, a conta do usuário recebe o papel Op
por padrão.
É possível ativar ou desativar a API REST estável ou alterar o papel de usuário padrão substituindo as seguintes opções de configuração do Airflow:
Seção | Chave | Valor | Observações |
---|---|---|---|
api
|
(Airflow 2.2.5 e anteriores) auth_backend (Airflow 2.3.0 e posterior) auth_backends
|
airflow.composer.api.backend.composer_auth
|
Para desativar a API REST estável, mude para
airflow.api.auth.backend.deny_all |
api
|
composer_auth_user_registration_role
|
Op
|
É possível especificar qualquer outro papel. |
Airflow 1
A API REST estável não está disponível no Airflow 1. Em vez disso, use a API REST experimental.
Ativar a API REST experimental do Airflow
Airflow 2
Por padrão, o recurso de autenticação da API está desativado na API experimental. O servidor da Web do Airflow nega todas as solicitações feitas.
Para ativar o recurso de autenticação da API e a API experimental do Airflow 2, substitua a seguinte opção de configuração do Airflow:
Seção | Chave | Valor | Observações |
---|---|---|---|
api
|
(Airflow 2.2.5 e versões anteriores) auth_backend (Airflow 2.3.0 e versões mais recentes) auth_backends
|
airflow.api.auth.backend.default
|
O padrão é airflow.composer.api.backend.composer_auth . |
api
|
enable_experimental_api
|
True
|
O padrão é False . |
Airflow 1
Por padrão, o recurso de autenticação da API está desativado no Airflow 1.10.11 e versões posteriores. O servidor da Web do Airflow nega todas as solicitações feitas. Como você usa as solicitações para acionar DAGs, ative esse recurso.
Para ativar o recurso de autenticação da API no Airflow 1, substitua a seguinte opção de configuração do Airflow:
Seção | Chave | Valor | Observações |
---|---|---|---|
api |
auth_backend |
airflow.api.auth.backend.default |
O padrão é airflow.api.auth.backend.deny_all |
Depois de definir essa opção de configuração como
airflow.api.auth.backend.default
, o servidor da Web do Airflow aceita todas as
sem autenticação. Mesmo que o próprio servidor da Web do Airflow
não exija autenticação, ele ainda está protegido pelo Identity-Aware Proxy, que
fornece a própria camada de autenticação.
Permitir chamadas de API para a API REST do Airflow usando o controle de acesso do servidor da Web
Dependendo do método usado para chamar a API REST do Airflow, o método de autor da chamada pode usar um endereço IPv4 ou IPv6. Lembre-se de desbloquear Tráfego IP para a API REST do Airflow usando o controle de acesso do servidor da Web.
Use a opção de configuração padrão, que é All IP addresses have access (default)
,
se você não tiver certeza de quais endereços IP suas chamadas para a API REST do Airflow
serão enviadas.
Fazer chamadas para a API REST do Airflow
Acessar o client_id do proxy do IAM
Para fazer uma solicitação ao endpoint da API REST do Airflow, a função exige o ID do cliente do proxy do IAM que protege o servidor da Web do Airflow.
O Cloud Composer não fornece essas informações diretamente. Em vez disso, faça uma solicitação não autenticada no servidor da Web do Airflow e capture o ID do cliente do URL de redirecionamento:
cURL
curl -v AIRFLOW_URL 2>&1 >/dev/null | grep -o "client_id\=[A-Za-z0-9-]*\.apps\.googleusercontent\.com"
Substitua AIRFLOW_URL
pelo URL da interface da Web do Airflow.
Na saída, procure a string depois de client_id
. Exemplo:
client_id=836436932391-16q2c5f5dcsfnel77va9bvf4j280t35c.apps.googleusercontent.com
Python
Salve o código a seguir em um arquivo chamado get_client_id.py
. Preencha os
valores de project_id
, location
e composer_environment
. Em seguida, execute
o código no Cloud Shell ou no ambiente local.
Chamar a API REST do Airflow usando o client_id
Faça as seguintes substituições:
- Substitua o valor da variável
client_id
pelo valorclient_id
recebido na etapa anterior. - Substitua o valor da variável
webserver_id
pelo ID do projeto de locatário, que faz parte do URL da interface da Web do Airflow antes de.appspot.com
. Você recebeu o URL da interface da Web do Airflow em uma etapa anterior. Especifique a versão da API REST do Airflow usada:
- Se você usa a API REST estável do Airflow, defina a variável
USE_EXPERIMENTAL_API
comoFalse
. - Se você usa a API REST experimental do Airflow, não é necessário fazer alterações. A variável
USE_EXPERIMENTAL_API
já está definida comoTrue
.
- Se você usa a API REST estável do Airflow, defina a variável
Acessar a API REST do Airflow usando uma conta de serviço
O banco de dados do Airflow limita o comprimento do campo de e-mail a 64 caracteres. sometimess vezes, as contas de serviço têm endereços de e-mail com mais de 64 caracteres. No momento, não é possível criar usuários do Airflow para essas contas de serviço. Se não houver um usuário do Airflow para essa conta de serviço, o acesso à API REST do Airflow resultará em erros HTTP 401 e 403.
Como solução alternativa, você pode fazer o pré-registro de um usuário do Airflow para uma conta de serviço. Para
fazer isso, use accounts.google.com:NUMERIC_USER_ID
como o nome de usuário e qualquer
string exclusiva como o e-mail.
Para acessar
NUMERIC_USER_ID
em uma conta de serviço, execute:gcloud iam service-accounts describe \ SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --format="value(oauth2ClientId)"
Substitua:
SA_NAME
pelo nome da conta de serviço.PROJECT_ID
pelo ID do projeto.
Crie um usuário do Airflow com o papel
Op
para a conta de serviço:IU do Airflow
Acesse a IU do Airflow.
Acesse Administrador > Usuários e clique em Criar. O usuário do Airflow precisa ter o papel
Admin
para abrir esta página.Especifique
accounts.google.com:NUMERIC_USER_ID
como o nome do usuário. SubstituaNUMERIC_USER_ID
pelo ID do usuário da etapa anterior.Especifique um identificador exclusivo como o e-mail. Você pode usar qualquer string exclusiva.
Especifique o papel do usuário. Por exemplo,
Op
Verifique se a caixa de seleção Is Active? está marcada.
Especifique o nome e o sobrenome do usuário. Você pode usar qualquer string.
Clique em Save.
gcloud
No Airflow 2, execute o comando da CLI do Airflow a seguir:
gcloud composer environments run ENVIRONMENT_NAME \ --location LOCATION \ users create -- \ -u accounts.google.com:NUMERIC_USER_ID \ -e UNIQUE_ID \ -f UNIQUE_ID \ -l - -r Op --use-random-password
Substitua:
ENVIRONMENT_NAME
pelo nome do ambienteLOCATION
pela região em que o ambiente está localizado.NUMERIC_USER_ID
pelo ID do usuário da etapa anterior.UNIQUE_ID
pelo identificador do usuário do Airflow. Você pode usar qualquer string exclusiva.
Depois de criar um usuário do Airflow para uma conta de serviço, um autor da chamada autenticado como a conta de serviço é reconhecido como um usuário pré-registrado e conectado ao Airflow.
Como dimensionar o componente da API REST do Airflow
A API REST e os endpoints da interface do Airflow são executados no componente, ou seja, no servidor da Web do Airflow. Caso você use intensamente a API REST, Aumento dos parâmetros de CPU e memória para ajustar os recursos do servidor da Web do Airflow para a carga esperada.