Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Creación de un complemento personalizado con Oracle
En el siguiente ejemplo, se explican los pasos para crear un complemento personalizado con Oracle for Amazon MWAA y se puede combinar con otros complementos y binarios personalizados en el archivo plugins.zip.
Contenido
Versión
-
El código de ejemplo de esta página se puede utilizar con Apache Airflow v1 en Python 3.7
.
-
Puede usar el ejemplo de código de esta página con Apache Airflow v2 en Python 3.10
.
Requisitos previos
Para usar el código de muestra de esta página, necesitará lo siguiente:
-
El registro de procesos de trabajo debe estar habilitado en cualquier nivel de registro,
CRITICAL
o superior, para su entorno. Para obtener más información sobre los tipos de MWAA registros de Amazon y cómo administrar tus grupos de registros, consulta Visualización de los registros de flujo de aire en Amazon CloudWatch
Permisos
-
No se necesitan permisos adicionales para usar el código de ejemplo de esta página.
Requisitos
Para usar el código de ejemplo de esta página, agregue las siguientes dependencias a su requirements.txt
. Para obtener más información, consulte Instalación de dependencias de Python.
Código de ejemplo
Los siguientes pasos describen cómo crear el DAG código que probará el complemento personalizado.
-
En la línea de comandos, navegue hasta el directorio en el que está almacenado el DAG código. Por ejemplo:
cd dags
-
Copie el contenido del código de ejemplo siguiente y guárdelo 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 )
Creación del complemento personalizado
En esta sección se describe cómo descargar las dependencias, crear el complemento personalizado y el archivo plugins.zip.
Descarga de dependencias
Amazon MWAA extraerá el contenido de plugins.zip /usr/local/airflow/plugins
en cada contenedor de trabajo y MWAA programador de Amazon. Se utiliza para añadir binarios a su entorno. En los siguientes pasos se describe cómo ensamblar los archivos necesarios para el complemento personalizado.
Extracción de la imagen del contenedor Linux de Amazon
-
En el símbolo del sistema, extraiga la imagen del contenedor Linux de Amazon y ejecútelo localmente. Por ejemplo:
docker pull amazonlinux docker run -it amazonlinux:latest /bin/bash
El símbolo del sistema debe invocar un símbolo del sistema bash. Por ejemplo:
bash-4.2#
-
Instale la característica de E/S asíncrona nativa de Linux (libaio).
yum -y install libaio
-
Mantenga esta ventana abierta para los pasos siguientes. Copiaremos los siguientes archivos en el sistema local:
lib64/libaio.so.1
,lib64/libaio.so.1.0.0
,lib64/libaio.so.1.0.1
.
Descarga de la carpeta del cliente
-
Instale el paquete de descompresión localmente. Por ejemplo:
sudo yum install unzip
-
Cree un directorio de
oracle_plugin
. Por ejemplo:mkdir oracle_plugin cd oracle_plugin
-
Utilice el siguiente comando curl para descargar el instantclient-basic-linuxarchivo.x64-18.5.0.0.0dbru.zip
de Oracle Instant Client Downloads para Linux x86-64 (64 bits). curl https://download.oracle.com/otn_software/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip > client.zip
-
Descomprima el archivo
client.zip
. Por ejemplo:unzip *.zip
Extracción de archivos de Docker
-
En un nuevo símbolo del sistema, muestre y anote su ID de contenedor de Docker. Por ejemplo:
docker container ls
La línea de comandos debería mostrar todos IDs los contenedores y sus contenedores. Por ejemplo:
debc16fd6970
-
En su directorio
oracle_plugin
, extraiga los archivoslib64/libaio.so.1
,lib64/libaio.so.1.0.0
,lib64/libaio.so.1.0.1
en la carpetainstantclient_18_5
local. Por ejemplo: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/
Complemento personalizado
Apache Airflow ejecutará el contenido de los archivos de Python en la carpeta de complementos durante el arranque. Esto se usa para establecer y modificar variables de entorno. En los siguientes pasos se describe el código de muestra del complemento personalizado.
-
Copie el contenido del código de ejemplo siguiente y guárdelo 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
Los siguientes pasos muestran cómo crear el plugins.zip
. El contenido de este ejemplo se puede combinar con sus otros complementos y binarios en un solo archivo plugins.zip
.
Compresión del contenido del directorio de complementos
-
En una línea de comando, vaya al directorio
oracle_plugin
. Por ejemplo:cd oracle_plugin
-
Comprima el directorio
instantclient_18_5
en plugins.zip. Por ejemplo:zip -r ../plugins.zip ./
-
Debería ver lo siguiente en su símbolo del sistema:
oracle_plugin$ ls client.zip instantclient_18_5
-
Elimine el archivo
client.zip
. Por ejemplo:rm client.zip
Comprima el archivo env_var_plugin_oracle.py
-
Agregue el archivo
env_var_plugin_oracle.py
a la raíz de plugins.zip. Por ejemplo:zip plugins.zip env_var_plugin_oracle.py
-
Ahora su archivo plugins.zip debería incluir lo siguiente:
env_var_plugin_oracle.py instantclient_18_5/
Opciones de configuración de Airflow
Si utiliza Apache Airflow v2, agregue core.lazy_load_plugins : False
como opción de configuración de Apache Airflow. Para obtener más información, consulte Uso de las opciones de configuración para cargar complementos en la versión 2.
Siguientes pasos
-
Aprenda a cargar el archivo
requirements.txt
de este ejemplo a su bucket de Amazon S3 en Instalación de dependencias de Python. -
Aprenda a cargar el DAG código de este ejemplo a la
dags
carpeta de su bucket de Amazon S3 enAñadir o actualizar DAG. -
Obtenga más información sobre cómo cargar el archivo
plugins.zip
de este ejemplo a su bucket de Amazon S3 en Instalación de complementos personalizados.