Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
O Apache Airflow inclui uma interface do utilizador Web denominada IU do Airflow, que pode usar para gerir DAGs do Airflow, ver registos de execução de DAGs, monitorizar o Airflow e realizar ações administrativas.
Acerca do servidor Web do Airflow
Cada ambiente do Cloud Composer tem um servidor Web que executa a IU do Airflow. O servidor Web faz parte da arquitetura do ambiente do Cloud Composer.
O servidor Web analisa os ficheiros de definição de DAG na pasta dags/
e tem de conseguir aceder aos dados e aos recursos de um DAG para carregar o DAG e processar pedidos HTTP.
O servidor Web atualiza os DAGs a cada 60 segundos, que é o valor predefinido
worker_refresh_interval
no Cloud Composer. Pode ocorrer um erro do servidor Web se o servidor Web não conseguir analisar todos os DAGs dentro do intervalo de atualização.
O carregamento de DAGs pode demorar mais de 60 segundos se houver um grande número de ficheiros DAG ou uma carga de trabalho não trivial para carregar os ficheiros DAG. Para garantir que o servidor Web permanece acessível independentemente do tempo de carregamento do DAG, pode configurar o carregamento assíncrono do DAG para analisar e carregar DAGs em segundo plano a um intervalo pré-configurado (disponível na versão composer-1.7.1-airflow-1.10.2
e posteriores).
Esta configuração também pode reduzir o tempo de atualização do DAG.
Além de exceder o intervalo de atualização do worker, o servidor Web pode processar normalmente as falhas de carregamento do DAG na maioria dos casos. Os DAGs que fazem com que o servidor Web falhe ou termine podem fazer com que sejam devolvidos erros no navegador. Para mais informações, consulte o artigo Resolução de problemas de DAGs.
Se continuar a ter problemas com o servidor Web devido à análise DAG, recomendamos que use o carregamento DAG assíncrono.
Antes de começar
Tem de ter uma função que possa ver ambientes do Cloud Composer. Para mais informações, consulte o artigo Controlo de acesso.
Durante a criação do ambiente, o Cloud Composer configura o URL do servidor Web que executa a IU do Airflow. O URL não é personalizável.
- A funcionalidade Controlo de acesso da IU do Airflow (controlo de acesso baseado em funções do Airflow) para a IU do Airflow é suportada para ambientes do Cloud Composer que executam a versão 1.13.4 ou posterior do Composer, a versão 1.10.10 ou posterior do Airflow e o Python 3.
Aceda à IU do Airflow
O serviço do servidor Web do Airflow é implementado no domínio appspot.com
e
fornece acesso à IU do Airflow. O Cloud Composer 1 fornece
acesso à interface com base nas identidades dos utilizadores e nas associações de políticas
do IAM definidas para os utilizadores. O Cloud Composer 1 usa o Identity-Aware Proxy
para este fim.
Depois de criar um novo ambiente do Cloud Composer, a IU demora até 25 minutos a concluir a alojamento e a ficar acessível.
Aceda à IU do Airflow a partir da Google Cloud consola
Para aceder à IU do Airflow a partir da Google Cloud consola:
Na Google Cloud consola, aceda à página Ambientes.
Na coluna Servidor Web do Airflow, siga o link do Airflow para o seu ambiente.
Inicie sessão com uma Conta Google que tenha as autorizações adequadas.
Obtenha o URL da IU do Airflow com a CLI Google Cloud
Pode aceder à IU do Airflow a partir de qualquer navegador de Internet. Para obter o URL da IU do Airflow, execute o seguinte comando na CLI Google Cloud:
gcloud composer environments describe ENVIRONMENT_NAME \
--location LOCATION
Substitua o seguinte:
ENVIRONMENT_NAME
: o nome do seu ambiente.LOCATION
: a região onde o ambiente está localizado.
O comando gcloud
mostra as propriedades de um ambiente do Cloud Composer, incluindo o URL da IU do Airflow. O URL está
listado como airflowUri
.
config:
airflowUri: https://example-tp.appspot.com
Configure o carregamento assíncrono de DAGs
Quando o carregamento DAG assíncrono está ativado, o servidor Web do Airflow cria um novo processo. Este processo carrega DAGs em segundo plano,
envia DAGs carregados recentemente em intervalos definidos pela opção dagbag_sync_interval
e, em seguida, entra em suspensão.
O processo é ativado periodicamente para recarregar os DAGs. O intervalo é definido pela opção collect_dags_interval
.
Para ativar o carregamento assíncrono de DAGs:
Desative a serialização DAG. Não é possível usar o carregamento assíncrono de DAGs com a serialização de DAGs. A utilização das opções de configuração do
async_dagbag_loader
e dostore_serialized_dags
Airflow produz erros HTTP 503 e danifica o seu ambiente.Substitua as seguintes opções de configuração do Airflow:
Secção Chave Valor Notas webserver
async_dagbag_loader
True
A predefinição é False
.webserver
collect_dags_interval
30
A predefinição é 30
. Use um valor mais pequeno para atualizações mais rápidas.webserver
dagbag_sync_interval
10
A predefinição é 10
.webserver
worker_refresh_interval
3600
A predefinição é 60
. Com o carregamento assíncrono de DAGs, pode usar um intervalo de atualização mais longo.
Reinicie o servidor Web
Ao depurar ou resolver problemas de ambientes do Cloud Composer, alguns problemas
podem ser resolvidos reiniciando o servidor Web do Airflow. Pode reiniciar o servidor Web
através da API restartWebServer
ou do comando restart-web-server
na CLI do Google Cloud:
gcloud composer environments restart-web-server ENVIRONMENT_NAME \
--location=LOCATION
Substitua o seguinte:
ENVIRONMENT_NAME
: o nome do seu ambiente.LOCATION
: a região onde o ambiente está localizado.
Configure o acesso à rede do servidor Web
Os parâmetros de acesso do servidor Web do Airflow não dependem da configuração de rede do seu ambiente. Em alternativa, configura o acesso ao servidor Web separadamente. Por exemplo, um ambiente de IP privado pode continuar a ter a IU do Airflow acessível a partir da Internet.
Não é possível configurar os intervalos de IP permitidos para serem endereços IP privados.
Consola
Na Google Cloud consola, aceda à página Ambientes.
Na lista de ambientes, clique no nome do seu ambiente. É apresentada a página Detalhes do ambiente.
Aceda ao separador Configuração do ambiente.
Na secção Configuração da rede, encontre o item Controlo de acesso ao servidor Web e clique em Editar.
Na caixa de diálogo Controlo de acesso à rede do servidor Web:
Para conceder acesso ao servidor Web do Airflow a partir de todos os endereços IP, selecione Permitir acesso a partir de todos os endereços IP.
Para restringir o acesso apenas a intervalos de IP específicos, selecione Permitir acesso apenas a partir de endereços IP específicos. No campo Intervalo de IP, especifique um intervalo de IP na notação CIDR. No campo Descrição, especifique uma descrição opcional para este intervalo. Se quiser especificar mais do que um intervalo, clique em Adicionar intervalo de IP.
Para proibir o acesso a todos os endereços IP, selecione Permitir acesso apenas a endereços IP específicos e clique em Eliminar item junto à entrada de intervalo vazia.
gcloud
Quando atualiza um ambiente, os seguintes argumentos controlam os parâmetros de acesso do servidor Web:
O
--web-server-allow-all
fornece acesso ao Airflow a partir de todos os endereços IP. Esta é a opção predefinida.O
--update-web-server-allow-ip
restringe o acesso apenas a intervalos de IP de origem específicos. Para especificar vários intervalos de IP, use este argumento várias vezes.--web-server-deny-all
proíbe o acesso para todos os endereços IP.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-web-server-allow-ip ip_range=WS_IP_RANGE,description=WS_RANGE_DESCRIPTION
Substitua o seguinte:
ENVIRONMENT_NAME
: o nome do seu ambiente.LOCATION
: a região onde o ambiente está localizado.WS_IP_RANGE
: o intervalo de IP, na notação CIDR, que pode aceder à IU do Airflow.WS_RANGE_DESCRIPTION
: a descrição do intervalo de IP.
Exemplo:
gcloud composer environments update example-environment \
--location us-central1 \
--update-web-server-allow-ip ip_range=192.0.2.0/24,description="example range" \
--update-web-server-allow-ip ip_range=192.0.4.0/24,description="example range 2"
API
Construa um pedido de API [
environments.patch
][api-patch].Neste pedido:
No parâmetro
updateMask
, especifique a máscaraconfig.webServerNetworkAccessControl
.No corpo do pedido, especifique como os registos de tarefas do Airflow têm de ser guardados:
Para conceder acesso ao Airflow a partir de todos os endereços IP, especifique um elemento
config
vazio (o elementowebServerNetworkAccessControl
não pode estar presente).Para restringir o acesso apenas a intervalos de IPs específicos, especifique um ou mais intervalos em
allowedIpRanges
.Para proibir o acesso a todos os endereços IP, especifique um elemento
webServerNetworkAccessControl
vazio. O elementowebServerNetworkAccessControl
tem de estar presente, mas não pode conter um elementoallowedIpRanges
.
{
"config": {
"webServerNetworkAccessControl": {
"allowedIpRanges": [
{
"value": "WS_IP_RANGE",
"description": "WS_RANGE_DESCRIPTION"
}
]
}
}
}
Substitua o seguinte:
WS_IP_RANGE
: o intervalo de IP, na notação CIDR, que pode aceder à IU do Airflow.WS_RANGE_DESCRIPTION
: a descrição do intervalo de IP.
Exemplo:
// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.webServerNetworkAccessControl
{
"config": {
"webServerNetworkAccessControl": {
"allowedIpRanges": [
{
"value": "192.0.2.0/24",
"description": "example range"
},
{
"value": "192.0.4.0/24",
"description": "example range 2"
}
]
}
}
}
Terraform
No bloco allowed_ip_range
, em web_server_network_access_control
especifique os intervalos de IP que podem aceder ao servidor Web.
resource "google_composer_environment" "example" {
provider = google-beta
name = "ENVIRONMENT_NAME"
region = "LOCATION"
config {
web_server_network_access_control {
allowed_ip_range {
value = "WS_IP_RANGE"
description = "WS_RANGE_DESCRIPTION"
}
}
}
}
Substitua o seguinte:
WS_IP_RANGE
: o intervalo de IP, na notação CIDR, que pode aceder à IU do Airflow.WS_RANGE_DESCRIPTION
: a descrição do intervalo de IP.
Exemplo:
resource "google_composer_environment" "example" {
provider = google-beta
name = "example-environment"
region = "us-central1"
config {
web_server_network_access_control {
allowed_ip_range {
value = "192.0.2.0/24"
description = "example range"
},
allowed_ip_range {
value = "192.0.4.0/24"
description = "example range 2"
}
}
}