

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Installation de plugins personnalisés
<a name="configuring-dag-import-plugins"></a>

Amazon Managed Workflows pour Apache Airflow prend en charge le gestionnaire de plugins intégré d'Apache Airflow, qui vous permet d'utiliser des opérateurs, des hooks, des capteurs ou des interfaces Apache Airflow personnalisés. Cette page décrit les étapes d'installation des [plugins personnalisés Apache Airflow](https://airflow.incubator.apache.org/plugins.html) sur votre environnement Amazon MWAA à l'aide d'un fichier. `plugins.zip`

**Contents**
+ [Prérequis](#configuring-dag-plugins-prereqs)
+ [Comment ça marche](#configuring-dag-plugins-how)
+ [Quand utiliser les plugins](#configuring-dag-plugins-changed)
+ [Vue d'ensemble des plugins personnalisés](#configuring-dag-plugins-overview)
  + [Répertoire des plugins personnalisés et limites de taille](#configuring-dag-plugins-quota)
+ [Exemples de plugins personnalisés](#configuring-dag-plugins-airflow-ex)
  + [Exemple d'utilisation d'une structure de répertoire plate dans plugins.zip](#configuring-dag-plugins-overview-simple)
  + [Exemple d'utilisation d'une structure de répertoire imbriquée dans plugins.zip](#configuring-dag-plugins-overview-complex)
+ [Création d'un fichier plugins.zip](#configuring-dag-plugins-test-create)
  + [Première étape : tester les plugins personnalisés à l'aide de l'utilitaire Amazon MWAA CLI](#configuring-dag-plugins-cli-utility)
  + [Deuxième étape : créer le fichier plugins.zip](#configuring-dag-plugins-zip)
+ [Téléchargement `plugins.zip` vers Amazon S3](#configuring-dag-plugins-upload)
  + [À l'aide du AWS CLI](#configuring-dag-plugins-upload-cli)
  + [Utilisation de la console Amazon S3](#configuring-dag-plugins-upload-console)
+ [Installation de plugins personnalisés sur votre environnement](#configuring-dag-plugins-mwaa-installing)
  + [Spécifier le chemin d'accès `plugins.zip` sur la console Amazon MWAA (pour la première fois)](#configuring-dag-plugins-mwaa-first)
  + [Spécification de la `plugins.zip` version sur la console Amazon MWAA](#configuring-dag-plugins-s3-mwaaconsole)
+ [Exemples de cas d'utilisation pour plugins.zip](#configuring-dag-plugins-examples)
+ [Quelle est la prochaine étape ?](#configuring-dag-plugins-next-up)

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

Vous aurez besoin des éléments suivants avant de pouvoir effectuer les étapes indiquées sur cette page.
+ **Autorisations** — Votre administrateur Compte AWS doit vous avoir accordé l'accès à la politique de contrôle MWAAFull ConsoleAccess d'accès [Amazon](access-policies.md#console-full-access) pour votre environnement. En outre, votre environnement Amazon MWAA doit être autorisé par votre [rôle d'exécution](mwaa-create-role.md) à accéder aux AWS ressources utilisées par votre environnement.
+ **Accès** : si vous avez besoin d'accéder à des référentiels publics pour installer des dépendances directement sur le serveur Web, votre environnement doit être configuré avec un accès au serveur Web **du réseau public**. Pour plus d’informations, consultez [Modes d’accès Apache Airflow](configuring-networking.md).
+ **Configuration Amazon S3** — Le compartiment [Amazon S3](mwaa-s3-bucket.md) utilisé pour stocker vos DAGs plugins personnalisés et vos dépendances Python `requirements.txt` doit être configuré avec l'*accès public bloqué* et le *versionnage activé*. `plugins.zip`

## Comment ça marche
<a name="configuring-dag-plugins-how"></a>

Pour exécuter des plugins personnalisés sur votre environnement, vous devez effectuer trois opérations :

1. Créez un `plugins.zip` fichier localement.

1. Téléchargez le `plugins.zip` fichier local dans votre compartiment Amazon S3.

1. Spécifiez la version de ce fichier dans le champ **Fichier de plugins** de la console Amazon MWAA.

**Note**  
Si c'est la première fois que vous chargez un `plugins.zip` fichier dans votre compartiment Amazon S3, vous devez également spécifier le chemin d'accès au fichier sur la console Amazon MWAA. Vous ne devez effectuer cette étape qu'une seule fois.

## Quand utiliser les plugins
<a name="configuring-dag-plugins-changed"></a>

Les plug-ins ne sont nécessaires que pour étendre l'interface utilisateur d'Apache Airflow, comme indiqué dans la documentation d'[Apache Airflow](https://airflow.apache.org/docs/apache-airflow/stable/authoring-and-scheduling/plugins.html#plugins). Les opérateurs personnalisés peuvent être placés directement dans le `/dags` dossier à côté de votre `DAG` code.

Si vous devez créer vos propres intégrations avec des systèmes externes, placez-les dans le `dags` dossier/ou dans l'un de ses sous-dossiers, mais pas dans le `plugins.zip` dossier. Dans Apache Airflow 2.x, les plugins sont principalement utilisés pour étendre l'interface utilisateur.

De même, aucune autre dépendance ne peut être insérée`plugins.zip`. Ils peuvent plutôt être stockés dans un emplacement du `/dags` dossier Amazon S3, où ils seront synchronisés avec chaque conteneur Amazon MWAA avant le démarrage d'Apache Airflow.

**Note**  
Tout fichier du `/dags` dossier ou `plugins.zip` qui ne définit pas explicitement un objet DAG d'Apache Airflow doit être répertorié dans un `.airflowignore` fichier.

## Vue d'ensemble des plugins personnalisés
<a name="configuring-dag-plugins-overview"></a>

Le gestionnaire de plugins intégré à Apache Airflow peut intégrer des fonctionnalités externes à son cœur en déposant simplement des fichiers dans un `$AIRFLOW_HOME/plugins` dossier. Vous pouvez l'utiliser pour utiliser des opérateurs, des hooks, des capteurs ou des interfaces Apache Airflow personnalisés. La section suivante fournit un exemple de structures de répertoires plates et imbriquées dans un environnement de développement local et les instructions d'importation qui en résultent, qui déterminent la structure de répertoire dans un fichier plugins.zip.

### Répertoire des plugins personnalisés et limites de taille
<a name="configuring-dag-plugins-quota"></a>

Le planificateur Apache Airflow et les opérateurs recherchent des plugins personnalisés lors du démarrage sur le conteneur AWS Fargate géré pour votre environnement à l'adresse. `/usr/local/airflow/plugins/{{*}}`
+ **Structure du répertoire**. La structure du répertoire (at`/{{*}}`) est basée sur le contenu de votre `plugins.zip` fichier. Par exemple, si vous `plugins.zip` conservez le `operators` répertoire en tant que répertoire de niveau principal, le répertoire sera extrait dans votre `/usr/local/airflow/plugins/{{operators}}` environnement.
+ **Limite de taille**. Nous recommandons un `plugins.zip` fichier de moins de 1 Go. Plus la taille d'un `plugins.zip` fichier est importante, plus le temps de démarrage d'un environnement est long. Bien qu'Amazon MWAA ne limite pas explicitement la taille d'un `plugins.zip` fichier, si les dépendances ne peuvent pas être installées dans les dix minutes, le service Fargate expirera et tentera de rétablir la stabilité de l'environnement.

**Note**  
Pour les environnements utilisant Apache Airflow v2.0.2, Amazon MWAA limite le trafic sortant sur le serveur Web Apache Airflow et n'autorise pas l'installation de plugins ni de dépendances Python directement sur le serveur Web. À partir de la version 2.2.2 d'Apache Airflow, Amazon MWAA peut installer des plugins et des dépendances directement sur le serveur Web.

## Exemples de plugins personnalisés
<a name="configuring-dag-plugins-airflow-ex"></a>

La section suivante utilise un exemple de code du *guide de référence Apache Airflow* pour expliquer comment structurer votre environnement de développement local.

### Exemple d'utilisation d'une structure de répertoire plate dans plugins.zip
<a name="configuring-dag-plugins-overview-simple"></a>

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

L'exemple suivant présente un `plugins.zip` fichier avec une structure de répertoire plate pour Apache Airflow v3.

**Example répertoire plat avec `PythonVirtualenvOperator` plugins.zip**  
L'exemple suivant affiche l'arborescence de niveau principal d'un fichier plugins.zip pour le plugin `PythonVirtualenvOperator` personnalisé dans. [Création d'un plugin personnalisé pour Apache Airflow PythonVirtualenvOperator](samples-virtualenv.md)   

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

**Example plugins/virtual\_python\_plugin.py**  
L'exemple suivant affiche le plugin `PythonVirtualenvOperator` personnalisé.  

```
"""
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 ]

L'exemple suivant présente un `plugins.zip` fichier avec une structure de répertoire plate pour Apache Airflow v2.

**Example répertoire plat avec `PythonVirtualenvOperator` plugins.zip**  
L'exemple suivant affiche l'arborescence de niveau principal d'un fichier plugins.zip pour le plugin `PythonVirtualenvOperator` personnalisé dans. [Création d'un plugin personnalisé pour Apache Airflow PythonVirtualenvOperator](samples-virtualenv.md)  

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

**Example plugins/virtual\_python\_plugin.py**  
L'exemple suivant affiche le plugin `PythonVirtualenvOperator` personnalisé.  

```
"""
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'
```

------

### Exemple d'utilisation d'une structure de répertoire imbriquée dans plugins.zip
<a name="configuring-dag-plugins-overview-complex"></a>

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

L'exemple suivant présente un `plugins.zip` fichier avec des répertoires distincts pour`hooks`,`operators`, et un `sensors` répertoire.

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

L'exemple suivant affiche les instructions d'importation dans le DAG ([DAGs dossier](https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-dag-folder.html#configuring-dag-folder-how)) qui utilise les plugins personnalisés.

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

Les exemples suivants présentent chacune des instructions d'importation nécessaires dans les fichiers de plug-in personnalisés.

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

Suivez les étapes décrites dans [Tester des plugins personnalisés à l'aide de l'utilitaire Amazon MWAA CLI](#configuring-dag-plugins-cli-utility), puis [créez un fichier plugins.zip](#configuring-dag-plugins-zip) pour compresser le contenu **dans** votre `plugins` répertoire. Par exemple, `cd plugins`.

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

L'exemple suivant présente un `plugins.zip` fichier avec des répertoires distincts pour`hooks`,`operators`, et un `sensors` répertoire.

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

L'exemple suivant affiche les instructions d'importation dans le DAG ([DAGs dossier](https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-dag-folder.html#configuring-dag-folder-how)) qui utilise les plugins personnalisés.

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

Les exemples suivants présentent chacune des instructions d'importation nécessaires dans les fichiers de plug-in personnalisés.

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

Suivez les étapes décrites dans [Tester des plugins personnalisés à l'aide de l'utilitaire Amazon MWAA CLI](#configuring-dag-plugins-cli-utility), puis [créez un fichier plugins.zip](#configuring-dag-plugins-zip) pour compresser le contenu **dans** votre `plugins` répertoire. Par exemple, `cd plugins`.

------

## Création d'un fichier plugins.zip
<a name="configuring-dag-plugins-test-create"></a>

Les étapes suivantes décrivent les étapes que nous recommandons pour créer un fichier plugins.zip localement.

### Première étape : tester les plugins personnalisés à l'aide de l'utilitaire Amazon MWAA CLI
<a name="configuring-dag-plugins-cli-utility"></a>
+ L'utilitaire d'interface de ligne de commande (CLI) reproduit localement un environnement Amazon Managed Workflows pour Apache Airflow.
+ La CLI crée localement une image de conteneur Docker similaire à une image de production Amazon MWAA. Vous pouvez l'utiliser pour exécuter un environnement Apache Airflow local afin de développer et de tester DAGs des plugins personnalisés et des dépendances avant le déploiement sur Amazon MWAA.
+ Pour exécuter la CLI, reportez-vous à la section [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)on GitHub.

### Deuxième étape : créer le fichier plugins.zip
<a name="configuring-dag-plugins-zip"></a>

Vous pouvez utiliser un utilitaire d'archivage ZIP intégré ou tout autre utilitaire ZIP (tel que [7zip](https://www.7-zip.org/download.html)) pour créer un fichier .zip.

**Note**  
L'utilitaire zip intégré pour le système d'exploitation Windows peut ajouter des sous-dossiers lorsque vous créez un fichier .zip. Nous vous recommandons de vérifier le contenu du fichier plugins.zip avant de le télécharger dans votre compartiment Amazon S3 afin de vous assurer qu'aucun répertoire supplémentaire n'a été ajouté.

1. Remplacez les répertoires par votre répertoire de plugins Airflow local. Par exemple :

   ```
   myproject$ cd plugins
   ```

1. Exécutez la commande suivante pour vous assurer que le contenu dispose d'autorisations exécutables (macOS et Linux uniquement).

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

1. Compressez le **contenu de** votre `plugins` dossier.

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

## Téléchargement `plugins.zip` vers Amazon S3
<a name="configuring-dag-plugins-upload"></a>

Vous pouvez utiliser la console Amazon S3 ou le AWS Command Line Interface (AWS CLI) pour charger un `plugins.zip` fichier dans votre compartiment Amazon S3.

### À l'aide du AWS CLI
<a name="configuring-dag-plugins-upload-cli"></a>

The AWS Command Line Interface (AWS CLI) est un outil open source que vous pouvez utiliser pour interagir avec les AWS services à l'aide de commandes dans votre interface de ligne de commande. Pour effectuer les étapes indiquées sur cette page, vous avez besoin des éléments suivants :
+ [AWS CLI — Installez la version 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
+ [AWS CLI — Configuration rapide avec `aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).

**Pour effectuer un téléchargement à l'aide du AWS CLI**

1. Dans votre invite de commande, accédez au répertoire dans lequel votre `plugins.zip` fichier est stocké. Par exemple :

   ```
   cd plugins
   ```

1. Utilisez la commande suivante pour répertorier tous vos compartiments Amazon S3.

   ```
   aws s3 ls
   ```

1. Utilisez la commande suivante pour répertorier les fichiers et les dossiers du compartiment Amazon S3 de votre environnement.

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

1. Utilisez la commande suivante pour charger le `plugins.zip` fichier dans le compartiment Amazon S3 de votre environnement.

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

### Utilisation de la console Amazon S3
<a name="configuring-dag-plugins-upload-console"></a>

La console Amazon S3 est une interface utilisateur Web que vous pouvez utiliser pour créer et gérer les ressources de votre compartiment Amazon S3.

**Pour charger à l'aide de la console Amazon S3**

1. Ouvrez la page [Environnements](https://console.aws.amazon.com/mwaa/home#/environments) sur la console Amazon MWAA.

1. Choisissez un environnement.

1. Sélectionnez le lien du **compartiment S3** dans le **code DAG du volet S3** pour ouvrir votre compartiment de stockage dans la console.

1. Choisissez **Charger**.

1. Choisissez **Ajouter un fichier**.

1. Sélectionnez la copie locale de votre fichier`plugins.zip`, puis choisissez **Upload**.

## Installation de plugins personnalisés sur votre environnement
<a name="configuring-dag-plugins-mwaa-installing"></a>

Cette section décrit comment installer les plugins personnalisés que vous avez chargés dans votre compartiment Amazon S3 en spécifiant le chemin d'accès au fichier plugins.zip et en spécifiant la version du fichier plugins.zip chaque fois que le fichier zip est mis à jour.

### Spécifier le chemin d'accès `plugins.zip` sur la console Amazon MWAA (pour la première fois)
<a name="configuring-dag-plugins-mwaa-first"></a>

Si c'est la première fois que vous chargez un `plugins.zip` fichier dans votre compartiment Amazon S3, vous devez également spécifier le chemin d'accès au fichier sur la console Amazon MWAA. Vous ne devez effectuer cette étape qu'une seule fois.

1. Ouvrez la page [Environnements](https://console.aws.amazon.com/mwaa/home#/environments) sur la console Amazon MWAA.

1. Choisissez un environnement.

1. Choisissez **Modifier**.

1. **Dans le code DAG du volet Amazon S3**, choisissez **Browse S3** adjacent au **fichier Plugins - champ facultatif**.

1. Sélectionnez le `plugins.zip` fichier dans votre compartiment Amazon S3.

1. Choisissez **Choisir**.

1. Choisissez **Suivant**, **Mettre à jour l'environnement**.

### Spécification de la `plugins.zip` version sur la console Amazon MWAA
<a name="configuring-dag-plugins-s3-mwaaconsole"></a>

Vous devez spécifier la version de votre `plugins.zip` fichier sur la console Amazon MWAA chaque fois que vous chargez une nouvelle version de votre fichier `plugins.zip` dans votre compartiment Amazon S3. 

1. Ouvrez la page [Environnements](https://console.aws.amazon.com/mwaa/home#/environments) sur la console Amazon MWAA.

1. Choisissez un environnement.

1. Choisissez **Modifier**.

1. Sur le **code DAG dans le volet Amazon S3**, choisissez une `plugins.zip` version dans la liste déroulante.

1. Choisissez **Suivant**.

## Exemples de cas d'utilisation pour plugins.zip
<a name="configuring-dag-plugins-examples"></a>
+ Découvrez comment créer un plugin personnalisé dans[Plugin personnalisé avec Apache Hive et Hadoop](samples-hive.md).
+ Découvrez comment créer un plugin personnalisé dans[Plugin personnalisé à patcher PythonVirtualenvOperator ](samples-virtualenv.md).
+ Découvrez comment créer un plugin personnalisé dans[Plug-in personnalisé avec Oracle](samples-oracle.md).
+ Découvrez comment créer un plugin personnalisé dans[Modifier le fuseau horaire d'un DAG sur Amazon MWAA](samples-plugins-timezone.md).

## Quelle est la prochaine étape ?
<a name="configuring-dag-plugins-next-up"></a>

Testez vos DAGs plugins personnalisés et vos dépendances Python localement à l'aide de [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)on GitHub.