

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 instalar plug-ins personalizados
<a name="configuring-dag-import-plugins"></a>

O Amazon Managed Workflows for Apache Airflow oferece suporte ao gerenciador de plug-ins integrado do Apache Airflow, permitindo o uso de operadores, hooks, sensores ou interfaces personalizados do Apache Airflow. Esta página descreve as etapas para instalar [plugins personalizados do Apache Airflow](https://airflow.incubator.apache.org/plugins.html) em seu ambiente do Amazon MWAA usando um arquivo `plugins.zip`.

**Contents**
+ [Pré-requisitos](#configuring-dag-plugins-prereqs)
+ [Como funciona](#configuring-dag-plugins-how)
+ [Quando usar os plug-ins](#configuring-dag-plugins-changed)
+ [Visão geral dos plug-ins personalizados](#configuring-dag-plugins-overview)
  + [Diretório de plug-ins personalizados e limites de tamanho](#configuring-dag-plugins-quota)
+ [Exemplos de plug-ins personalizados](#configuring-dag-plugins-airflow-ex)
  + [Exemplo de uso de uma estrutura de diretórios simples em plugins.zip](#configuring-dag-plugins-overview-simple)
  + [Exemplo de uso de uma estrutura de diretórios aninhados em plugins.zip](#configuring-dag-plugins-overview-complex)
+ [Criação de um arquivo plugins.zip](#configuring-dag-plugins-test-create)
  + [Etapa 1: testar plug-ins personalizados usando o utilitário Amazon MWAA CLI](#configuring-dag-plugins-cli-utility)
  + [Etapa 2: criar o arquivo plugins.zip](#configuring-dag-plugins-zip)
+ [Como fazer upload de `plugins.zip` para o Amazon S3](#configuring-dag-plugins-upload)
  + [Como usar o AWS CLI](#configuring-dag-plugins-upload-cli)
  + [Usar o console do Amazon S3](#configuring-dag-plugins-upload-console)
+ [Instalando plug-ins personalizados em seu ambiente](#configuring-dag-plugins-mwaa-installing)
  + [Como especificar o caminho para `plugins.zip` no console Amazon MWAA (pela primeira vez)](#configuring-dag-plugins-mwaa-first)
  + [Como especificar a versão `plugins.zip` no console do Amazon MWAA](#configuring-dag-plugins-s3-mwaaconsole)
+ [Exemplos de casos de uso para plugins.zip](#configuring-dag-plugins-examples)
+ [Próximas etapas](#configuring-dag-plugins-next-up)

## Pré-requisitos
<a name="configuring-dag-plugins-prereqs"></a>

Você precisará do seguinte antes de concluir as etapas nesta página.
+ **Permissões**: sua Conta da AWS deve ter o acesso concedido por seu administrador para a política de controle de acesso [AmazonMWAAFullConsoleAccess](access-policies.md#console-full-access) para seu ambiente. Além disso, seu ambiente Amazon MWAA deve ser autorizado pela seu [perfil de execução](mwaa-create-role.md) para acessar os recursos da AWS usados pelo seu ambiente.
+ **Acesso**: se você precisar de acesso a repositórios públicos para instalar dependências diretamente no servidor Web, seu ambiente deverá ser configurado com acesso ao servidor Web de **rede pública**. Para obter mais informações, consulte [Modos de acesso do Apache Airflow](configuring-networking.md).
+ **Configuração do Amazon S3**: o [bucket do Amazon S3](mwaa-s3-bucket.md) usado para armazenar seus DAGs, plug-ins personalizados em `plugins.zip` e dependências do Python em `requirements.txt` deve ser configurado com *Acesso público bloqueado* e *Versionamento habilitado*.

## Como funciona
<a name="configuring-dag-plugins-how"></a>

Para executar plug-ins personalizados em seu ambiente, você deve fazer três coisas:

1. Crie um arquivo `plugins.zip` localmente.

1. Faça upload do arquivo `plugins.zip` local para seu bucket no Amazon S3.

1. Especifique a versão desse arquivo no campo **Arquivo de plug-ins** no console do Amazon MWAA.

**nota**  
Se for a primeira vez que você faz o upload de um `plugins.zip` para o seu bucket do Amazon S3, também será preciso especificar o caminho para o arquivo no console do Amazon MWAA. Você só precisa concluir esta etapa uma vez.

## Quando usar os plug-ins
<a name="configuring-dag-plugins-changed"></a>

Os plug-ins são necessários somente para estender a interface de usuário do Apache Airflow, conforme descrito na [documentação do Apache Airflow](https://airflow.apache.org/docs/apache-airflow/stable/authoring-and-scheduling/plugins.html#plugins). Operadores personalizados podem ser colocados diretamente na pasta `/dags` ao lado do código `DAG`.

Caso precise criar suas próprias integrações com sistemas externos, coloque-as na pasta /`dags` ou em uma subpasta dentro dela, mas não na pasta `plugins.zip`. No Apache Airflow 2.x, os plug-ins são usados principalmente para estender a interface do usuário.

Da mesma forma, outras dependências não devem ser inseridas em `plugins.zip`. Em vez disso, elas podem ser armazenadas em um local na pasta `/dags` do Amazon S3, onde serão sincronizadas com cada contêiner do Amazon MWAA antes do início do Apache Airflow.

**nota**  
Qualquer arquivo na pasta `/dags` ou em `plugins.zip` que não defina explicitamente um objeto DAG do Apache Airflow deve ser listado em um arquivo `.airflowignore`.

## Visão geral dos plug-ins personalizados
<a name="configuring-dag-plugins-overview"></a>

O gerenciador de plug-ins embutido do Apache Airflow pode integrar atributos externos ao núcleo simplesmente soltando arquivos em uma pasta `$AIRFLOW_HOME/plugins`. Ele permite que você use operadores, hooks, sensores ou interfaces personalizados do Apache Airflow. A seção a seguir fornece um exemplo de estruturas de diretórios simples e aninhadas em um ambiente de desenvolvimento local e as instruções de importação resultantes, que determinam a estrutura de diretórios em um plugins.zip.

### Diretório de plug-ins personalizados e limites de tamanho
<a name="configuring-dag-plugins-quota"></a>

O agendador e os operadores do Apache Airflow procuram plug-ins personalizados durante o startup no contêiner Fargate gerenciado pela AWS para seu ambiente em `/usr/local/airflow/plugins/{{*}}`.
+ **Estrutura de diretório**. A estrutura do diretório (em `/{{*}}`) é baseada no conteúdo do seu arquivo `plugins.zip`. Por exemplo, se seu `plugins.zip` contiver o diretório `operators` como um diretório principal, o diretório será extraído para `/usr/local/airflow/plugins/{{operators}}` em seu ambiente.
+ **Limites de tamanho**. Recomendamos um arquivo `plugins.zip` com menos de 1 GB. Quanto maior o tamanho de um arquivo `plugins.zip`, maior o tempo de inicialização em um ambiente. Embora o Amazon MWAA não limite explicitamente o tamanho de um arquivo `plugins.zip`, se as dependências não puderem ser instaladas em dez minutos, o serviço Fargate atingirá o tempo limite e tentará reverter o ambiente para um estado estável.

**nota**  
Para ambientes que usam o Apache Airflow v2.0.2, o Amazon MWAA limita o tráfego de saída no servidor Web do Apache Airflow e não permite que você instale plug-ins nem dependências do Python diretamente no servidor Web. A partir do Apache Airflow v2.2.2, o Amazon MWAA pode instalar plug-ins e dependências diretamente no servidor Web.

## Exemplos de plug-ins personalizados
<a name="configuring-dag-plugins-airflow-ex"></a>

A seção a seguir usa um exemplo de código no *Guia de referência do Apache Airflow* para explicar como estruturar seu ambiente de desenvolvimento local.

### Exemplo de uso de uma estrutura de diretórios simples em plugins.zip
<a name="configuring-dag-plugins-overview-simple"></a>

------
#### [ Apache Airflow v3 ]

O exemplo a seguir mostra um arquivo `plugins.zip` com uma estrutura de diretório simples para o Apache Airflow v3.

**Example diretório simples com plugins.zip `PythonVirtualenvOperator`**  
O exemplo a seguir mostra a árvore de nível principal de um arquivo plugins.zip para o plug-in personalizado `PythonVirtualenvOperator` em [Como criar um plug-in personalizado para PythonVirtualEnvOperator do Apache Airflow](samples-virtualenv.md).   

```
├── virtual_python_plugin.py
```

**Example plugins/virtual\_python\_plugin.py**  
O exemplo a seguir mostra o plug-in personalizado `PythonVirtualenvOperator`.  

```
"""
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
from airflow.plugins_manager import AirflowPlugin
import airflow.utils.python_virtualenv 
from typing import List

def _generate_virtualenv_cmd(tmp_dir: str, python_bin: str, system_site_packages: bool) -> List[str]:
    cmd = ['python3','/usr/local/airflow/.local/lib/python3.7/site-packages/virtualenv', tmp_dir]
    if system_site_packages:
        cmd.append('--system-site-packages')
    if python_bin is not None:
        cmd.append(f'--python={python_bin}')
    return cmd

airflow.utils.python_virtualenv._generate_virtualenv_cmd=_generate_virtualenv_cmd

class VirtualPythonPlugin(AirflowPlugin):                
    name = 'virtual_python_plugin'
```

------
#### [ Apache Airflow v2 ]

O exemplo a seguir mostra um arquivo `plugins.zip` com uma estrutura de diretório simples para o Apache Airflow v2.

**Example diretório simples com plugins.zip `PythonVirtualenvOperator`**  
O exemplo a seguir mostra a árvore de nível principal de um arquivo plugins.zip para o plug-in personalizado `PythonVirtualenvOperator` em [Como criar um plug-in personalizado para PythonVirtualEnvOperator do Apache Airflow](samples-virtualenv.md).  

```
├── virtual_python_plugin.py
```

**Example plugins/virtual\_python\_plugin.py**  
O exemplo a seguir mostra o plug-in personalizado `PythonVirtualenvOperator`.  

```
"""
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
from airflow.plugins_manager import AirflowPlugin
import airflow.utils.python_virtualenv 
from typing import List

def _generate_virtualenv_cmd(tmp_dir: str, python_bin: str, system_site_packages: bool) -> List[str]:
    cmd = ['python3','/usr/local/airflow/.local/lib/python3.7/site-packages/virtualenv', tmp_dir]
    if system_site_packages:
        cmd.append('--system-site-packages')
    if python_bin is not None:
        cmd.append(f'--python={python_bin}')
    return cmd

airflow.utils.python_virtualenv._generate_virtualenv_cmd=_generate_virtualenv_cmd

class VirtualPythonPlugin(AirflowPlugin):                
    name = 'virtual_python_plugin'
```

------

### Exemplo de uso de uma estrutura de diretórios aninhados em plugins.zip
<a name="configuring-dag-plugins-overview-complex"></a>

------
#### [ Apache Airflow v3 ]

O exemplo a seguir mostra um arquivo `plugins.zip` com diretórios separados para `hooks`, `operators` e um diretório `sensors`.

**Example plugins.zip**  

```
__init__.py
my_airflow_plugin.py
 hooks/
  |-- __init__.py
  |-- my_airflow_hook.py
 operators/
  |-- __init__.py
  |-- my_airflow_operator.py
  |-- hello_operator.py
 sensors/
  |-- __init__.py
  |-- my_airflow_sensor.py
```

O exemplo a seguir mostra as instruções de importação no DAG ([pasta DAGs](https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-dag-folder.html#configuring-dag-folder-how)) que usa os plug-ins personalizados.

**Example dags/your\_dag.py**  

```
from airflow import DAG
from datetime import datetime, timedelta
from operators.my_airflow_operator import MyOperator
from sensors.my_airflow_sensor import MySensor
from operators.hello_operator import HelloOperator

default_args = {
	'owner': 'airflow',
	'depends_on_past': False,
	'start_date': datetime(2018, 1, 1),
	'email_on_failure': False,
	'email_on_retry': False,
	'retries': 1,
	'retry_delay': timedelta(minutes=5),
}


with DAG('customdag',
		 max_active_runs=3,
		 schedule_interval='@once',
		 default_args=default_args) as dag:

	sens = MySensor(
		task_id='taskA'
	)

	op = MyOperator(
		task_id='taskB',
		my_field='some text'
	)

	hello_task = HelloOperator(task_id='sample-task', name='foo_bar')



	sens >> op >> hello_task
```

**Example plugins/my\_airflow\_plugin.py**  

```
from airflow.plugins_manager import AirflowPlugin
from hooks.my_airflow_hook import *
from operators.my_airflow_operator import *
                    
class PluginName(AirflowPlugin):
                    
    name = 'my_airflow_plugin'
                    
    hooks = [MyHook]
    operators = [MyOperator]
    sensors = [MySensor]
```

Os exemplos a seguir mostram cada uma das instruções de importação necessárias nos arquivos de plug-in personalizados.

**Example hooks/my\_airflow\_hook.py**  

```
from airflow.hooks.base import BaseHook


class MyHook(BaseHook):

    def my_method(self):
        print("Hello World")
```

**Example sensors/my\_airflow\_sensor.py**  

```
from airflow.sensors.base import BaseSensorOperator
from airflow.utils.decorators import apply_defaults


class MySensor(BaseSensorOperator):

    @apply_defaults
    def __init__(self,
                 *args,
                 **kwargs):
        super(MySensor, self).__init__(*args, **kwargs)

    def poke(self, context):
        return True
```

**Example operators/my\_airflow\_operator.py**  

```
from airflow.operators.bash import BaseOperator
from airflow.utils.decorators import apply_defaults
from hooks.my_airflow_hook import MyHook


class MyOperator(BaseOperator):

    @apply_defaults
    def __init__(self,
                 my_field,
                 *args,
                 **kwargs):
        super(MyOperator, self).__init__(*args, **kwargs)
        self.my_field = my_field

    def execute(self, context):
        hook = MyHook('my_conn')
        hook.my_method()
```

**Example operators/hello\_operator.py**  

```
from airflow.models.baseoperator import BaseOperator
from airflow.utils.decorators import apply_defaults

class HelloOperator(BaseOperator):

    @apply_defaults
    def __init__(
            self,
            name: str,
            **kwargs) -> None:
        super().__init__(**kwargs)
        self.name = name

    def execute(self, context):
        message = "Hello {}".format(self.name)
        print(message)
        return message
```

Siga as etapas em [Teste de plug-ins personalizados usando o utilitário Amazon MWAA CLI](#configuring-dag-plugins-cli-utility) e [Criar um arquivo plugins.zip](#configuring-dag-plugins-zip) para compactar o conteúdo **dentro** de seu diretório `plugins`. Por exemplo, `cd plugins`.

------
#### [ Apache Airflow v2 ]

O exemplo a seguir mostra um arquivo `plugins.zip` com diretórios separados para `hooks`, `operators` e um diretório `sensors`.

**Example plugins.zip**  

```
__init__.py
 my_airflow_plugin.py
 hooks/
  |-- __init__.py
  |-- my_airflow_hook.py
 operators/
  |-- __init__.py
  |-- my_airflow_operator.py
  |-- hello_operator.py
 sensors/
  |-- __init__.py
  |-- my_airflow_sensor.py
```

O exemplo a seguir mostra as instruções de importação no DAG ([pasta DAGs](https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-dag-folder.html#configuring-dag-folder-how)) que usa os plug-ins personalizados.

**Example dags/your\_dag.py**  

```
from airflow import DAG
from datetime import datetime, timedelta
from operators.my_airflow_operator import MyOperator
from sensors.my_airflow_sensor import MySensor
from operators.hello_operator import HelloOperator

default_args = {
	'owner': 'airflow',
	'depends_on_past': False,
	'start_date': datetime(2018, 1, 1),
	'email_on_failure': False,
	'email_on_retry': False,
	'retries': 1,
	'retry_delay': timedelta(minutes=5),
}


with DAG('customdag',
		 max_active_runs=3,
		 schedule_interval='@once',
		 default_args=default_args) as dag:

	sens = MySensor(
		task_id='taskA'
	)

	op = MyOperator(
		task_id='taskB',
		my_field='some text'
	)

	hello_task = HelloOperator(task_id='sample-task', name='foo_bar')



	sens >> op >> hello_task
```

**Example plugins/my\_airflow\_plugin.py**  

```
from airflow.plugins_manager import AirflowPlugin
from hooks.my_airflow_hook import *
from operators.my_airflow_operator import *
                    
class PluginName(AirflowPlugin):
                    
    name = 'my_airflow_plugin'
                    
    hooks = [MyHook]
    operators = [MyOperator]
    sensors = [MySensor]
```

Os exemplos a seguir mostram cada uma das instruções de importação necessárias nos arquivos de plug-in personalizados.

**Example hooks/my\_airflow\_hook.py**  

```
from airflow.hooks.base import BaseHook


class MyHook(BaseHook):

    def my_method(self):
        print("Hello World")
```

**Example sensors/my\_airflow\_sensor.py**  

```
from airflow.sensors.base import BaseSensorOperator
from airflow.utils.decorators import apply_defaults


class MySensor(BaseSensorOperator):

    @apply_defaults
    def __init__(self,
                 *args,
                 **kwargs):
        super(MySensor, self).__init__(*args, **kwargs)

    def poke(self, context):
        return True
```

**Example operators/my\_airflow\_operator.py**  

```
from airflow.operators.bash import BaseOperator
from airflow.utils.decorators import apply_defaults
from hooks.my_airflow_hook import MyHook


class MyOperator(BaseOperator):

    @apply_defaults
    def __init__(self,
                 my_field,
                 *args,
                 **kwargs):
        super(MyOperator, self).__init__(*args, **kwargs)
        self.my_field = my_field

    def execute(self, context):
        hook = MyHook('my_conn')
        hook.my_method()
```

**Example operators/hello\_operator.py**  

```
from airflow.models.baseoperator import BaseOperator
from airflow.utils.decorators import apply_defaults

class HelloOperator(BaseOperator):

    @apply_defaults
    def __init__(
            self,
            name: str,
            **kwargs) -> None:
        super().__init__(**kwargs)
        self.name = name

    def execute(self, context):
        message = "Hello {}".format(self.name)
        print(message)
        return message
```

Siga as etapas em [Teste de plug-ins personalizados usando o utilitário Amazon MWAA CLI](#configuring-dag-plugins-cli-utility) e [Criar um arquivo plugins.zip](#configuring-dag-plugins-zip) para compactar o conteúdo **dentro** de seu diretório `plugins`. Por exemplo, `cd plugins`.

------

## Criação de um arquivo plugins.zip
<a name="configuring-dag-plugins-test-create"></a>

As etapas a seguir descrevem as etapas que recomendamos para criar um arquivo plugins.zip localmente.

### Etapa 1: testar plug-ins personalizados usando o utilitário Amazon MWAA CLI
<a name="configuring-dag-plugins-cli-utility"></a>
+ O utilitário da interface de linha de comandos (CLI) replica localmente um ambiente do Amazon Managed Workflows for Apache Airflow.
+ A CLI cria localmente uma imagem de contêiner Docker semelhante a uma imagem de produção do Amazon MWAA. Você pode usá-la para executar um ambiente local do Apache Airflow para desenvolver e testar DAGs, plug-ins personalizados e dependências antes da implantação no Amazon MWAA.
+ Para executar a CLI, consulte [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) no GitHub.

### Etapa 2: criar o arquivo plugins.zip
<a name="configuring-dag-plugins-zip"></a>

É possível usar um utilitário de arquivamento ZIP incorporado ou qualquer outro utilitário ZIP (como [7zip](https://www.7-zip.org/download.html)) para criar um arquivo.zip.

**nota**  
O utilitário zip integrado para o sistema operacional Windows pode adicionar subpastas quando você cria um arquivo .zip. Recomendamos verificar o conteúdo do arquivo plugins.zip antes de fazer o upload para o bucket do Amazon S3 para garantir que nenhum diretório adicional tenha sido adicionado.

1. Altere os diretórios para o diretório local de plug-ins do Airflow. Por exemplo:

   ```
   myproject$ cd plugins
   ```

1. Execute o comando a seguir para garantir que o conteúdo tenha permissões executáveis (somente macOS e Linux).

   ```
   plugins$ chmod -R 755 .
   ```

1. Compacte o conteúdo **em** sua pasta `plugins`.

   ```
   plugins$ zip -r plugins.zip .
   ```

## Como fazer upload de `plugins.zip` para o Amazon S3
<a name="configuring-dag-plugins-upload"></a>

É possível usar o console do Amazon S3 ou a AWS Command Line Interface (AWS CLI) para fazer upload do arquivo `plugins.zip` para o bucket do Amazon S3.

### Como usar o AWS CLI
<a name="configuring-dag-plugins-upload-cli"></a>

A AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que pode ser usada para interagir com os serviços da AWS por meio de comandos no shell da linha de comando. Para concluir as etapas nesta página, é necessário o seguinte:
+ [AWS CLI – instalar a versão 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
+ [AWS CLI – configuração rápida com `aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).

**Para fazer o upload usando AWS CLI**

1. No prompt de comando, navegue até o diretório em que seu arquivo `plugins.zip` está armazenado. Por exemplo:

   ```
   cd plugins
   ```

1. Use o comando a seguir para listar todos os seus buckets do Amazon S3.

   ```
   aws s3 ls
   ```

1. Use o seguinte comando para listar os arquivos e pastas no bucket do Amazon S3 para seu ambiente.

   ```
   aws s3 ls s3://{{YOUR_S3_BUCKET_NAME}}
   ```

1. Use o seguinte comando para carregar o `plugins.zip` arquivo no bucket do Amazon S3 para seu ambiente.

   ```
   aws s3 cp plugins.zip s3://{{amzn-s3-demo-bucket}}/plugins.zip
   ```

### Usar o console do Amazon S3
<a name="configuring-dag-plugins-upload-console"></a>

O console do Amazon S3 é uma interface de usuário baseada na Web que permite criar e gerenciar os recursos no bucket do Amazon S3.

**Fazer o upload usando o console do Amazon S3**

1. Abra a [página Ambientes](https://console.aws.amazon.com/mwaa/home#/environments) no console do Amazon MWAA.

1. Escolha um ambiente.

1. Selecione o link do **bucket do S3** no **código do DAG no painel do S3** para abrir seu bucket de armazenamento no console.

1. Escolha **Carregar**.

1. Escolha **Adicionar arquivo**.

1. Selecione a cópia local do seu `plugins.zip` e escolha **Carregar**.

## Instalando plug-ins personalizados em seu ambiente
<a name="configuring-dag-plugins-mwaa-installing"></a>

Esta seção descreve como instalar os plug-ins personalizados que você carregou no seu bucket do Amazon S3 especificando o caminho para o arquivo plugins.zip e especificando a versão do arquivo plugins.zip sempre que o arquivo zip for atualizado.

### Como especificar o caminho para `plugins.zip` no console Amazon MWAA (pela primeira vez)
<a name="configuring-dag-plugins-mwaa-first"></a>

Se for a primeira vez que você faz o upload de um `plugins.zip` para o seu bucket do Amazon S3, também será preciso especificar o caminho para o arquivo no console do Amazon MWAA. Você só precisa concluir esta etapa uma vez.

1. Abra a [página Ambientes](https://console.aws.amazon.com/mwaa/home#/environments) no console do Amazon MWAA.

1. Escolha um ambiente.

1. Escolha **Editar**.

1. No **código DAG no painel do Amazon S3**, escolha **Navegar S3** ao lado do campo **Arquivo de plugin - opcional**.

1. Selecione o `plugins.zip` arquivo no bucket do Amazon S3.

1. Selecione **Escolher**.

1. Selecione **Avançar**, **Atualizar ambiente**.

### Como especificar a versão `plugins.zip` no console do Amazon MWAA
<a name="configuring-dag-plugins-s3-mwaaconsole"></a>

É necessário especificar a versão do seu arquivo `plugins.zip` no console do Amazon MWAA sempre que você fizer o upload de uma nova versão do seu `plugins.zip` no bucket do Amazon S3. 

1. Abra a [página Ambientes](https://console.aws.amazon.com/mwaa/home#/environments) no console do Amazon MWAA.

1. Escolha um ambiente.

1. Escolha **Editar**.

1. No painel **Código DAG no Amazon S3 **, escolha uma versão do `plugins.zip` na lista suspensa.

1. Escolha **Próximo**.

## Exemplos de casos de uso para plugins.zip
<a name="configuring-dag-plugins-examples"></a>
+ Saiba como criar um plug-in personalizado em [Plug-in personalizado com o Apache Hive e o Hadoop](samples-hive.md).
+ Saiba como criar um plug-in personalizado em [Plugin personalizado para corrigir PythonVirtualEnvOperator ](samples-virtualenv.md).
+ Saiba como criar um plug-in personalizado em [Plugin personalizado com a Oracle](samples-oracle.md).
+ Saiba como criar um plug-in personalizado em [Como alterar o fuso horário de um DAG no Amazon MWAA](samples-plugins-timezone.md).

## Próximas etapas
<a name="configuring-dag-plugins-next-up"></a>

Teste seus DAGs, plug-ins personalizados e dependências do Python localmente usando [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) no GitHub.