Como criar um plugin personalizado com a Oracle
O exemplo a seguir mostra as etapas para criar um plug-in personalizado usando a Oracle para Amazon MWAA e pode ser combinado com outros plug-ins e binários personalizados no arquivo plugins.zip.
Sumário
Version (Versão)
-
O código de amostra nesta página pode ser usado com o Apache Airflow v1 em Python 3.7
.
-
É possível usar o exemplo de código nesta página com o Apache Airflow v2 no Python 3.10
.
Pré-requisitos
Para usar o código de amostra nesta página, você precisará do seguinte:
-
O registro de logs operador é habilitado em qualquer nível de log,
CRITICAL
ou superior, para seu ambiente. Para obter mais informações sobre os tipos de log do Amazon MWAA e como gerenciar seus grupos de logs, consulte Como visualizar logs do Airflow no Amazon CloudWatch
Permissões
-
Nenhuma permissão adicional é necessária para usar o exemplo de código nesta página.
Requisitos
Para usar o código de amostra nesta página, adicione as seguintes dependências ao seu requirements.txt
. Para saber mais, consulte Como instalar dependências do Python.
Exemplo de código
As etapas a seguir descrevem como criar o código do DAG que testará o plugin personalizado.
-
No prompt de comando, navegue até o diretório em que o código do DAG está armazenado. Por exemplo:
cd dags
-
Copie o conteúdo da amostra de código a seguir e salve localmente como
oracle.py
.from airflow import DAG from airflow.operators.python_operator import PythonOperator from airflow.utils.dates import days_ago import os import cx_Oracle DAG_ID = os.path.basename(__file__).replace(".py", "") def testHook(**kwargs): cx_Oracle.init_oracle_client() version = cx_Oracle.clientversion() print("cx_Oracle.clientversion",version) return version with DAG(dag_id=DAG_ID, schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: hook_test = PythonOperator( task_id="hook_test", python_callable=testHook, provide_context=True )
Criar o plugin personalizado
Esta seção descreve como baixar as dependências, criar o plug-in personalizado e o plugins.zip.
Download de dependências
O Amazon MWAA extrairá o conteúdo do plugins.zip em /usr/local/airflow/plugins
sobre cada contêiner de agendador e trabalho do Amazon MWAA. Isso é usado para adicionar binários ao seu ambiente. As etapas a seguir descrevem como montar os arquivos necessários para o plugin personalizado.
Extraia a imagem de contêiner do Amazon Linux
-
Em seu prompt de comando, extraia a imagem do contêiner Amazon Linux e execute o contêiner localmente. Por exemplo:
docker pull amazonlinux docker run -it amazonlinux:latest /bin/bash
Seu prompt de comando deve invocar uma linha de comando bash. Por exemplo:
bash-4.2#
-
Instale o recurso de I/O assíncrono nativo do Linux (libaio).
yum -y install libaio
-
Mantenha essa janela aberta para as etapas subsequentes. Copiaremos os seguintes arquivos localmente:
lib64/libaio.so.1
,lib64/libaio.so.1.0.0
,lib64/libaio.so.1.0.1
.
Baixe a pasta do cliente
-
Instale o pacote de descompactação localmente. Por exemplo:
sudo yum install unzip
-
Crie um diretório
oracle_plugin
. Por exemplo:mkdir oracle_plugin cd oracle_plugin
-
Use o seguinte comando cURL para baixar o instantclient-basic-linux.x64-18.5.0.0.0dbru.zip
do Oracle Instant Client Downloads for Linux x86-64 (64-bit) . curl https://download.oracle.com/otn_software/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip > client.zip
-
Descompacte o arquivo
client.zip
. Por exemplo:unzip *.zip
Extrair arquivos do Docker
-
Em um novo prompt de comando, exiba e grave o ID do contêiner do Docker. Por exemplo:
docker container ls
Seu prompt de comando deve retornar todos os contêineres e os respectivos IDs. Por exemplo:
debc16fd6970
-
Em seu diretório
oracle_plugin
, extraia os arquivoslib64/libaio.so.1
,lib64/libaio.so.1.0.0
,lib64/libaio.so.1.0.1
para a pasta localinstantclient_18_5
. Por exemplo:docker cp debc16fd6970:/lib64/libaio.so.1 instantclient_18_5/ docker cp debc16fd6970:/lib64/libaio.so.1.0.0 instantclient_18_5/ docker cp debc16fd6970:/lib64/libaio.so.1.0.1 instantclient_18_5/
Plug-in personalizado
O Apache Airflow executará o conteúdo dos arquivos Python na pasta de plugins na inicialização. Isto é usado para definir e modificar variáveis de ambiente. As seguintes etapas descrevem o código de exemplo para o plugin personalizado.
-
Copie o conteúdo da amostra de código a seguir e salve localmente como
env_var_plugin_oracle.py
.from airflow.plugins_manager import AirflowPlugin import os os.environ["LD_LIBRARY_PATH"]='/usr/local/airflow/plugins/instantclient_18_5' os.environ["DPI_DEBUG_LEVEL"]="64" class EnvVarPlugin(AirflowPlugin): name = 'env_var_plugin'
Plugins.zip
As etapas a seguir mostram como criar plugins.zip
. O conteúdo deste exemplo pode ser combinado com seus outros plug-ins e binários em um único arquivo plugins.zip
.
Compacte o conteúdo do diretório do plug-in
-
Em um prompt de comando, navegue até o diretório
oracle_plugin
. Por exemplo:cd oracle_plugin
-
Compacte o diretório
instantclient_18_5
em plugins.zip. Por exemplo:zip -r ../plugins.zip ./
-
Você deve ver o seguinte em seu prompt de comando:
oracle_plugin$ ls client.zip instantclient_18_5
-
Remova o arquivo
client.zip
. Por exemplo:rm client.zip
Compacte o arquivo env_var_plugin_oracle.py
-
Adicione o arquivo
env_var_plugin_oracle.py
à raiz do plugins.zip. Por exemplo:zip plugins.zip env_var_plugin_oracle.py
-
Agora seu arquivo plugins.zip deve incluir o seguinte:
env_var_plugin_oracle.py instantclient_18_5/
Opções de configuração do Airflow
Se você estiver usando o Apache Airflow v2, adicione core.lazy_load_plugins : False
como uma opção de configuração do Apache Airflow. Para saber mais, consulte Usar opções de configuração para carregar plug-ins em 2.
Próximas etapas
-
Saiba como fazer o upload do
requirements.txt
arquivo neste exemplo para seu bucket do Amazon S3 em Como instalar dependências do Python. -
Saiba como fazer o upload do código DAG neste exemplo para a pasta
dags
em seu bucket do Amazon S3 em Como adicionar ou atualizar DAGs. -
Saiba mais sobre como fazer o upload do
plugins.zip
arquivo neste exemplo para seu bucket do Amazon S3 em Como instalar plug-ins personalizados.