Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
O Apache Airflow tem uma interface de API REST que pode usar para realizar tarefas como obter informações sobre execuções e tarefas de DAGs, atualizar DAGs, obter a configuração do Airflow, adicionar e eliminar associações e listar utilizadores.
Para ver um exemplo de utilização da API REST do Airflow com funções do Cloud Run, consulte o artigo Acionar DAGs com funções do Cloud Run.
Versões da API REST do Airflow
- O Airflow 1 usa a API REST experimental.
- O Airflow 2 usa a API REST estável. A API REST experimental foi descontinuada pelo Airflow.
- Pode continuar a usar a API REST experimental no Airflow 2 se a ativar através de uma substituição da configuração do Airflow, conforme descrito mais detalhadamente.
Configure a API REST do Airflow estável
Airflow 2
A API REST estável está ativada por predefinição no Airflow 2. O Cloud Composer usa o seu próprio backend de autenticação da API, que está integrado com o Identity-Aware Proxy.
A autorização funciona da forma padrão fornecida pelo Airflow. Quando um novo utilizador autoriza através da API, a conta do utilizador recebe a função Op
por predefinição.
Pode ativar ou desativar a API REST estável ou alterar a função do utilizador predefinida substituindo as seguintes opções de configuração do Airflow:
Secção | Chave | Valor | Notas |
---|---|---|---|
api
|
(Airflow 2.2.5 e anterior) auth_backend (Airflow 2.3.0 e posterior) auth_backends
|
airflow.composer.api.backend.composer_auth
|
Para desativar a API REST estável, altere para
airflow.api.auth.backend.deny_all |
api
|
composer_auth_user_registration_role
|
Op
|
Pode especificar qualquer outra função. |
Fluxo de ar 1
A API REST estável não está disponível no Airflow 1. Em alternativa, pode usar a API REST experimental.
Configure a API REST do Airflow experimental
Airflow 2
Por predefinição, a funcionalidade de autenticação da API está desativada na API experimental. O servidor Web do Airflow nega todos os pedidos. Para ativar a funcionalidade de autenticação da API e a API experimental do Airflow 2, substitua a seguinte opção de configuração do Airflow:
Secção | Chave | Valor | Notas |
---|---|---|---|
api
|
(Airflow 2.2.5 e anterior) auth_backend (Airflow 2.3.0 e posterior) auth_backends
|
airflow.api.auth.backend.default
|
A predefinição é airflow.composer.api.backend.composer_auth . |
api
|
enable_experimental_api
|
True
|
A predefinição é False . |
Fluxo de ar 1
Por predefinição, a funcionalidade de autenticação da API está desativada no Airflow 1.10.11 e versões posteriores. O servidor Web do Airflow nega todos os pedidos que faz. Usa pedidos para acionar DAGs, por isso, ative esta funcionalidade.
Para ativar a funcionalidade de autenticação da API no Airflow 1, substitua a seguinte opção de configuração do Airflow:
Secção | Chave | Valor | Notas |
---|---|---|---|
api |
auth_backend |
airflow.api.auth.backend.default |
A predefinição é airflow.api.auth.backend.deny_all |
Depois de definir esta opção de configuração como
airflow.api.auth.backend.default
, o servidor Web do Airflow aceita todos os pedidos da API
sem autenticação.
Embora o servidor Web do Airflow em si não exija autenticação, o Cloud Composer usa a sua própria camada de autenticação para o proteger, que está integrada com o Identity-Aware Proxy.
Permitir chamadas à API REST do Airflow através do controlo de acesso do servidor Web
Consoante o método usado para chamar a API REST do Airflow, o método de chamada pode usar um endereço IPv4 ou IPv6. Lembre-se de desbloquear o tráfego de IP para a API REST do Airflow através do controlo de acesso do servidor Web.
Use a opção de configuração predefinida, que é
All IP addresses have access (default)
, se não souber a partir de que endereços IP
as suas chamadas para a API REST do Airflow vão ser enviadas.
Faça chamadas para a API REST do Airflow
Obtenha o client_id do proxy IAM
Para fazer um pedido ao ponto final da API REST do Airflow, a função requer o ID de cliente do proxy da IAM que protege o servidor Web do Airflow.
O Cloud Composer não fornece estas informações diretamente. Em alternativa, faça um pedido não autenticado ao servidor Web do Airflow e capture o ID do cliente a partir 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 Web do Airflow.
Na saída, pesquise a string que se segue a client_id
. Por exemplo:
client_id=836436932391-16q2c5f5dcsfnel77va9bvf4j280t35c.apps.googleusercontent.com
Python
Guarde o seguinte código num ficheiro denominado get_client_id.py
. Preencha os valores de project_id
, location
e composer_environment
e, em seguida, execute o código no Cloud Shell ou no seu ambiente local.
Chame a API REST do Airflow usando client_id
Faça as seguintes substituições:
- Substitua o valor da variável
client_id
pelo valorclient_id
obtido no passo anterior. - Substitua o valor da variável
webserver_id
pelo ID do projeto de inquilino, que faz parte do URL da interface Web do Airflow antes de.appspot.com
. Obteve o URL da interface Web do Airflow num passo anterior. Especifique a versão da API REST Airflow que usa:
- Se usar a API REST do Airflow estável, defina a variável
USE_EXPERIMENTAL_API
comoFalse
. - Se usar a API REST do Airflow experimental, não tem de fazer nenhuma alteração. A variável
USE_EXPERIMENTAL_API
já está definida comoTrue
.
- Se usar a API REST do Airflow estável, defina a variável
Aceda à API REST do Airflow através de uma conta de serviço
A base de dados do Airflow nas versões do Airflow anteriores à 2.3.0 limita o comprimento do campo de email a 64 carateres. Por vezes, as contas de serviço têm endereços de email com mais de 64 carateres. Não é possível criar utilizadores do Airflow para essas contas de serviço da forma habitual. Se não existir um utilizador do Airflow para essa conta de serviço, o acesso à API REST do Airflow resulta em erros HTTP 401 e 403.
Como solução alternativa, pode pré-registar um utilizador do Airflow para uma conta de serviço. Para
isso, use accounts.google.com:NUMERIC_USER_ID
como nome de utilizador e qualquer
string única como email.
Para obter o
NUMERIC_USER_ID
para uma conta de serviço, execute o seguinte comando:gcloud iam service-accounts describe \ SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --format="value(oauth2ClientId)"
Substituir:
SA_NAME
com o nome da conta de serviço.PROJECT_ID
com o ID do projeto.
Crie um utilizador do Airflow com a função
Op
para a conta de serviço:IU do Airflow
Aceda a Admin > Utilizadores e clique em Criar. O utilizador do Airflow tem de ter a função
Admin
para abrir esta página.Especifique
accounts.google.com:NUMERIC_USER_ID
como nome de utilizador. SubstituaNUMERIC_USER_ID
pelo ID de utilizador obtido no passo anterior.Especifique um identificador exclusivo como o email. Pode usar qualquer string única.
Especifique a função do utilizador. Por exemplo,
Op
.Certifique-se de que a caixa de verificação Está ativo? está selecionada.
Especifique o nome próprio e o apelido do utilizador. Pode usar qualquer string.
Clique em Guardar.
gcloud
No Airflow 2, execute o seguinte comando da CLI do Airflow:
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
Substituir:
ENVIRONMENT_NAME
com o nome do ambiente.LOCATION
com a região onde o ambiente está localizado.NUMERIC_USER_ID
com o ID do utilizador obtido no passo anterior.UNIQUE_ID
com o identificador do utilizador do Airflow. Pode usar qualquer string única.
Depois de criar um utilizador do Airflow para uma conta de serviço, um autor da chamada autenticado como a conta de serviço é reconhecido como um utilizador pré-registado e tem sessão iniciada no Airflow.
Dimensionar o componente da API REST do Airflow
A API REST Airflow e os pontos finais da IU do Airflow são executados no servidor Web do Airflow. Se usar a API REST de forma intensiva, pondere aumentar a quantidade de CPU e memória disponíveis para o servidor Web do Airflow, com base na carga esperada.