

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Como criar um plugin personalizado com a Oracle
<a name="samples-oracle"></a>

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.

**Contents**
+ [Versão](#samples-oracle-version)
+ [Pré-requisitos](#samples-oracle-prereqs)
+ [Permissões](#samples-oracle-permissions)
+ [Requisitos](#samples-oracle-dependencies)
+ [Exemplo de código](#samples-oracle-code)
+ [Criar o plugin personalizado](#samples-oracle-create-pluginszip-steps)
  + [Download de dependências](#samples-oracle-install)
  + [Plug-in personalizado](#samples-oracle-plugins-code)
  + [Plugins.zip](#samples-oracle-pluginszip)
+ [Opções de configuração do Airflow](#samples-oracle-airflow-config)
+ [Próximas etapas](#samples-oracle-next-up)

## Versão
<a name="samples-oracle-version"></a>

É possível usar o exemplo de código nesta página com o **Apache Airflow v2** no [Python 3.10](https://peps.python.org/pep-0619/) e o **Apache Airflow v3** no [Python 3.11](https://peps.python.org/pep-0664/).

## Pré-requisitos
<a name="samples-oracle-prereqs"></a>

Para usar o código de amostra nesta página, você precisará do seguinte:
+ Um [ambiente Amazon MWAA](get-started.md).
+ Registro de logs do operador habilitado em qualquer nível de log, `CRITICAL` ou 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 [Acessando registros do Airflow na Amazon CloudWatch](monitoring-airflow.md)

## Permissões
<a name="samples-oracle-permissions"></a>

Nenhuma permissão adicional é necessária para usar o exemplo de código nesta página.

## Requisitos
<a name="samples-oracle-dependencies"></a>

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](working-dags-dependencies.md) 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
<a name="samples-oracle-code"></a>

As etapas a seguir descrevem como criar o código do DAG que testará o plugin personalizado.

1. No prompt de comando, navegue até o diretório em que o código do DAG está armazenado. Por exemplo:

   ```
   cd dags
   ```

1. 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
<a name="samples-oracle-create-pluginszip-steps"></a>

Esta seção descreve como baixar as dependências, criar o plug-in personalizado e o plugins.zip.

### Download de dependências
<a name="samples-oracle-install"></a>

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**

1. 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#
   ```

1. Instale o recurso de I/O assíncrono nativo do Linux (libaio).

   ```
   yum -y install libaio
   ```

1. 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**

1. Instale o pacote de descompactação localmente. Por exemplo:

   ```
   sudo yum install unzip
   ```

1. Crie um diretório `oracle_plugin`. Por exemplo:

   ```
   mkdir oracle_plugin
   cd oracle_plugin
   ```

1. Use o seguinte comando cURL para baixar o [instantclient-basic-linux.x64-18.5.0.0.0dbru.zip](https://download.oracle.com/otn_software/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip) do [Oracle Instant Client Downloads for Linux x86-64 (64-bit)](https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html).

   ```
   curl https://download.oracle.com/otn_software/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip > client.zip
   ```

1. Descompacte o arquivo `client.zip`. Por exemplo:

   ```
   unzip *.zip
   ```

**Extrair arquivos do Docker**

1. Em um novo prompt de comando, exiba e grave a ID do contêiner do Docker. Por exemplo:

   ```
   docker container ls
   ```

   Seu prompt de comando deve retornar todos os contêineres e as respectivas IDs. Por exemplo:

   ```
   debc16fd6970
   ```

1. Em seu diretório `oracle_plugin`, extraia os arquivos `lib64/libaio.so.1`, `lib64/libaio.so.1.0.0`, `lib64/libaio.so.1.0.1` para a pasta local `instantclient_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
<a name="samples-oracle-plugins-code"></a>

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
<a name="samples-oracle-pluginszip"></a>

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**

1. Em um prompt de comando, navegue até o diretório `oracle_plugin`. Por exemplo:

   ```
   cd oracle_plugin
   ```

1. Compacte o diretório `instantclient_18_5` em plugins.zip. Por exemplo:

   ```
   zip -r ../plugins.zip ./
   ```

   Seu prompt de comando exibe:

   ```
   oracle_plugin$ ls
   client.zip		instantclient_18_5
   ```

1. Remova o arquivo `client.zip`. Por exemplo:

   ```
   rm client.zip
   ```

**Compacte o arquivo env\$1var\$1plugin\$1oracle.py**

1. Adicione o arquivo `env_var_plugin_oracle.py` à raiz do plugins.zip. Por exemplo:

   ```
   zip plugins.zip env_var_plugin_oracle.py
   ```

1. Agora seu arquivo plugins.zip inclui o seguinte:

   ```
   env_var_plugin_oracle.py
   instantclient_18_5/
   ```

## Opções de configuração do Airflow
<a name="samples-oracle-airflow-config"></a>

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](configuring-env-variables.md#configuring-2.0-airflow-override).

## Próximas etapas
<a name="samples-oracle-next-up"></a>
+ Saiba como fazer o upload do `requirements.txt` arquivo neste exemplo para seu bucket do Amazon S3 em [Como instalar dependências do Python](working-dags-dependencies.md).
+ 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](configuring-dag-folder.md).
+ 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](configuring-dag-import-plugins.md).