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
Versão
É 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:
-
Registro de logs do operador habilitado em qualquer nível de log,
CRITICALou na seção anterior 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 acessar 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. Consulte Como instalar dependências do Python para saber mais.
-c https://raw.githubusercontent.com/apache/airflow/constraints-2.0.2/constraints-3.7.txt cx_Oracle apache-airflow-providers-oracle
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/bashSeu 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 a ID do contêiner do Docker. Por exemplo:
docker container lsSeu prompt de comando deve retornar todos os contêineres e as respectivas 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.1para 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 explicam 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_5em plugins.zip. Por exemplo:zip -r ../plugins.zip ./Seu prompt de comando exibe:
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 inclui 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.txtarquivo 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
dagsem seu bucket do Amazon S3 em Como adicionar ou atualizar DAGs. -
Saiba mais sobre como fazer o upload do
plugins.ziparquivo neste exemplo para seu bucket do Amazon S3 em Como instalar plug-ins personalizados.