

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menginstal plugin kustom
<a name="configuring-dag-import-plugins"></a>

Alur Kerja Terkelola Amazon untuk Apache Airflow mendukung pengelola plugin bawaan Apache Airflow, memungkinkan Anda menggunakan operator, kait, sensor, atau antarmuka Apache Airflow khusus. Halaman ini menjelaskan langkah-langkah untuk menginstal plugin [kustom Apache Airflow](https://airflow.incubator.apache.org/plugins.html) di lingkungan Amazon MWAA Anda menggunakan file. `plugins.zip`

**Contents**
+ [Prasyarat](#configuring-dag-plugins-prereqs)
+ [Cara kerjanya](#configuring-dag-plugins-how)
+ [Kapan menggunakan plugin](#configuring-dag-plugins-changed)
+ [Ikhtisar plugin kustom](#configuring-dag-plugins-overview)
  + [Direktori plugin kustom dan batas ukuran](#configuring-dag-plugins-quota)
+ [Contoh plugin kustom](#configuring-dag-plugins-airflow-ex)
  + [Contoh menggunakan struktur direktori datar di plugins.zip](#configuring-dag-plugins-overview-simple)
  + [Contoh menggunakan struktur direktori bersarang di plugins.zip](#configuring-dag-plugins-overview-complex)
+ [Membuat file plugins.zip](#configuring-dag-plugins-test-create)
  + [Langkah satu: Uji plugin khusus menggunakan utilitas Amazon MWAA CLI](#configuring-dag-plugins-cli-utility)
  + [Langkah kedua: Buat file plugins.zip](#configuring-dag-plugins-zip)
+ [Mengunggah `plugins.zip` ke Amazon S3](#configuring-dag-plugins-upload)
  + [Menggunakan AWS CLI](#configuring-dag-plugins-upload-cli)
  + [Menggunakan konsol Amazon S3](#configuring-dag-plugins-upload-console)
+ [Menginstal plugin khusus di lingkungan Anda](#configuring-dag-plugins-mwaa-installing)
  + [Menentukan jalur ke `plugins.zip` konsol Amazon MWAA (pertama kali)](#configuring-dag-plugins-mwaa-first)
  + [Menentukan `plugins.zip` versi di konsol Amazon MWAA](#configuring-dag-plugins-s3-mwaaconsole)
+ [Contoh kasus penggunaan untuk plugins.zip](#configuring-dag-plugins-examples)
+ [Apa selanjutnya?](#configuring-dag-plugins-next-up)

## Prasyarat
<a name="configuring-dag-plugins-prereqs"></a>

Anda akan memerlukan yang berikut ini sebelum Anda dapat menyelesaikan langkah-langkah di halaman ini.
+ **Izin** — Anda Akun AWS harus telah diberikan akses oleh administrator Anda ke kebijakan kontrol MWAAFull ConsoleAccess akses [Amazon](access-policies.md#console-full-access) untuk lingkungan Anda. Selain itu, lingkungan Amazon MWAA Anda harus diizinkan oleh [peran eksekusi](mwaa-create-role.md) Anda untuk mengakses AWS sumber daya yang digunakan oleh lingkungan Anda.
+ **Akses** **— Jika Anda memerlukan akses ke repositori publik untuk menginstal dependensi langsung di server web, lingkungan Anda harus dikonfigurasi dengan akses server web jaringan publik.** Untuk informasi lebih lanjut, lihat[Mode akses Apache Airflow](configuring-networking.md).
+ **Konfigurasi Amazon S3** **- Bucket [Amazon S3](mwaa-s3-bucket.md) yang digunakan untuk menyimpan plugin kustom DAGs Anda`plugins.zip`, dan dependensi Python harus dikonfigurasi dengan Akses Publik Diblokir dan `requirements.txt` Diaktifkan Versi.**

## Cara kerjanya
<a name="configuring-dag-plugins-how"></a>

Untuk menjalankan plugin khusus di lingkungan Anda, Anda harus melakukan tiga hal:

1. Buat `plugins.zip` file secara lokal.

1. Unggah `plugins.zip` file lokal ke bucket Amazon S3 Anda.

1. Tentukan versi file ini di bidang **file Plugins** di konsol Amazon MWAA.

**catatan**  
Jika ini adalah pertama kalinya Anda mengunggah `plugins.zip` ke bucket Amazon S3 Anda, Anda juga perlu menentukan jalur ke file di konsol Amazon MWAA. Anda hanya perlu menyelesaikan langkah ini sekali.

## Kapan menggunakan plugin
<a name="configuring-dag-plugins-changed"></a>

[Plugin hanya diperlukan untuk memperluas antarmuka pengguna Apache Airflow, seperti yang diuraikan dalam dokumentasi Apache Airflow.](https://airflow.apache.org/docs/apache-airflow/stable/authoring-and-scheduling/plugins.html#plugins) Operator kustom dapat ditempatkan langsung di `/dags` folder di samping `DAG` kode Anda.

Jika Anda perlu membuat integrasi Anda sendiri dengan sistem eksternal, letakkan di `dags` folder/atau subfolder di dalamnya, tetapi tidak di `plugins.zip` folder. Di Apache Airflow 2.x, plugin terutama digunakan untuk memperluas UI.

Demikian pula, dependensi lain tidak dapat ditempatkan di. `plugins.zip` Sebagai gantinya, mereka dapat disimpan di lokasi di `/dags` folder Amazon S3, di mana mereka akan disinkronkan ke setiap wadah Amazon MWAA sebelum Apache Airflow dimulai.

**catatan**  
File apa pun di `/dags` folder atau `plugins.zip` yang tidak secara eksplisit mendefinisikan objek Apache Airflow DAG harus terdaftar dalam file. `.airflowignore`

## Ikhtisar plugin kustom
<a name="configuring-dag-plugins-overview"></a>

Manajer plugin bawaan Apache Airflow dapat mengintegrasikan fitur eksternal ke intinya hanya dengan menjatuhkan file ke dalam folder. `$AIRFLOW_HOME/plugins` Ini dapat Anda gunakan untuk menggunakan operator, kait, sensor, atau antarmuka Apache Airflow khusus. Bagian berikut memberikan contoh struktur direktori datar dan bersarang di lingkungan pengembangan lokal dan pernyataan impor yang dihasilkan, yang menentukan struktur direktori dalam plugins.zip.

### Direktori plugin kustom dan batas ukuran
<a name="configuring-dag-plugins-quota"></a>

Penjadwal Apache Airflow dan pekerja mencari plugin khusus selama startup pada wadah Fargate yang AWS dikelola untuk lingkungan Anda di. `/usr/local/airflow/plugins/{{*}}`
+ **Struktur direktori**. Struktur direktori (at`/{{*}}`) didasarkan pada isi `plugins.zip` file Anda. Misalnya, jika Anda `plugins.zip` berisi `operators` direktori sebagai direktori tingkat utama, maka direktori akan diekstraksi ke lingkungan Anda`/usr/local/airflow/plugins/{{operators}}`.
+ **Batas ukuran**. Kami merekomendasikan `plugins.zip` file kurang dari 1 GB. Semakin besar ukuran `plugins.zip` file, semakin lama waktu startup pada suatu lingkungan. Meskipun Amazon MWAA tidak membatasi ukuran `plugins.zip` file secara eksplisit, jika dependensi tidak dapat diinstal dalam sepuluh menit, layanan Fargate akan habis waktu dan mencoba mengembalikan lingkungan ke keadaan stabil.

**catatan**  
Untuk lingkungan yang menggunakan Apache Airflow v2.0.2, Amazon MWAA membatasi lalu lintas keluar di server web Apache Airflow, dan tidak mengizinkan pemasangan plugin atau dependensi Python langsung di server web. Dimulai dengan Apache Airflow v2.2.2, Amazon MWAA dapat menginstal plugin dan dependensi langsung di server web.

## Contoh plugin kustom
<a name="configuring-dag-plugins-airflow-ex"></a>

Bagian berikut menggunakan kode contoh dalam panduan *referensi Apache Airflow* untuk menjelaskan cara menyusun lingkungan pengembangan lokal Anda.

### Contoh menggunakan struktur direktori datar di plugins.zip
<a name="configuring-dag-plugins-overview-simple"></a>

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

Contoh berikut menyajikan `plugins.zip` file dengan struktur direktori datar untuk Apache Airflow v3.

**Example direktori datar dengan `PythonVirtualenvOperator` plugins.zip**  
Contoh berikut menampilkan pohon tingkat utama dari file plugins.zip untuk plugin `PythonVirtualenvOperator` kustom di. [Membuat plugin khusus untuk Apache Airflow PythonVirtualenvOperator](samples-virtualenv.md)   

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

**Example plugins/virtual\_python\_plugin.py**  
Contoh berikut menampilkan plugin `PythonVirtualenvOperator` kustom.  

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

Contoh berikut menyajikan `plugins.zip` file dengan struktur direktori datar untuk Apache Airflow v2.

**Example direktori datar dengan `PythonVirtualenvOperator` plugins.zip**  
Contoh berikut menampilkan pohon tingkat utama dari file plugins.zip untuk plugin `PythonVirtualenvOperator` kustom di. [Membuat plugin khusus untuk Apache Airflow PythonVirtualenvOperator](samples-virtualenv.md)  

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

**Example plugins/virtual\_python\_plugin.py**  
Contoh berikut menampilkan plugin `PythonVirtualenvOperator` kustom.  

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

------

### Contoh menggunakan struktur direktori bersarang di plugins.zip
<a name="configuring-dag-plugins-overview-complex"></a>

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

Contoh berikut menyajikan `plugins.zip` file dengan direktori terpisah untuk`hooks`,`operators`, dan `sensors` direktori.

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

Contoh berikut menampilkan pernyataan impor di DAG ([DAGs folder](https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-dag-folder.html#configuring-dag-folder-how)) yang menggunakan plugin kustom.

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

Contoh berikut menyajikan setiap pernyataan impor yang diperlukan dalam file plugin kustom.

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

**Ikuti langkah-langkah dalam [Menguji plugin kustom menggunakan utilitas Amazon MWAA CLI](#configuring-dag-plugins-cli-utility), dan [kemudian Membuat file plugins.zip](#configuring-dag-plugins-zip) untuk zip konten dalam direktori Anda.** `plugins` Misalnya, `cd plugins`.

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

Contoh berikut menyajikan `plugins.zip` file dengan direktori terpisah untuk`hooks`,`operators`, dan `sensors` direktori.

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

Contoh berikut menampilkan pernyataan impor di DAG ([DAGs folder](https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-dag-folder.html#configuring-dag-folder-how)) yang menggunakan plugin kustom.

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

Contoh berikut menyajikan setiap pernyataan impor yang diperlukan dalam file plugin kustom.

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

**Ikuti langkah-langkah dalam [Menguji plugin kustom menggunakan utilitas Amazon MWAA CLI](#configuring-dag-plugins-cli-utility), dan [kemudian Membuat file plugins.zip](#configuring-dag-plugins-zip) untuk zip konten dalam direktori Anda.** `plugins` Misalnya, `cd plugins`.

------

## Membuat file plugins.zip
<a name="configuring-dag-plugins-test-create"></a>

Langkah-langkah berikut menjelaskan langkah-langkah yang kami sarankan untuk membuat file plugins.zip secara lokal.

### Langkah satu: Uji plugin khusus menggunakan utilitas Amazon MWAA CLI
<a name="configuring-dag-plugins-cli-utility"></a>
+ Utilitas antarmuka baris perintah (CLI) mereplikasi Alur Kerja Terkelola Amazon untuk lingkungan Apache Airflow secara lokal.
+ CLI membangun image container Docker secara lokal yang mirip dengan image produksi Amazon MWAA. Anda dapat menggunakan ini untuk menjalankan lingkungan Apache Airflow lokal untuk mengembangkan dan DAGs menguji, plugin kustom, dan dependensi sebelum menerapkan ke Amazon MWAA.
+ Untuk menjalankan CLI, lihat pada. [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) GitHub

### Langkah kedua: Buat file plugins.zip
<a name="configuring-dag-plugins-zip"></a>

Anda dapat menggunakan utilitas arsip ZIP bawaan, atau utilitas ZIP lainnya (seperti [7zip](https://www.7-zip.org/download.html)) untuk membuat file.zip.

**catatan**  
Utilitas zip bawaan untuk OS Windows dapat menambahkan subfolder saat Anda membuat file.zip. Sebaiknya verifikasi konten file plugins.zip sebelum mengunggah ke bucket Amazon S3 Anda untuk memastikan tidak ada direktori tambahan yang ditambahkan.

1. Ubah direktori ke direktori plugin Airflow lokal Anda. Contoh:

   ```
   myproject$ cd plugins
   ```

1. Jalankan perintah berikut untuk memastikan bahwa konten memiliki izin yang dapat dieksekusi (hanya macOS dan Linux).

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

1. Zip konten **di dalam** `plugins` folder Anda.

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

## Mengunggah `plugins.zip` ke Amazon S3
<a name="configuring-dag-plugins-upload"></a>

Anda dapat menggunakan konsol Amazon S3 atau AWS Command Line Interface (AWS CLI) untuk mengunggah `plugins.zip` file ke bucket Amazon S3 Anda.

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

The AWS Command Line Interface (AWS CLI) adalah alat open source yang dapat Anda gunakan untuk berinteraksi dengan AWS layanan menggunakan perintah di shell baris perintah Anda. Untuk menyelesaikan langkah-langkah di halaman ini, Anda memerlukan yang berikut:
+ [AWS CLI — Instal versi 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
+ [AWS CLI - Konfigurasi cepat dengan `aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).

**Untuk mengunggah menggunakan AWS CLI**

1. Di prompt perintah Anda, arahkan ke direktori tempat `plugins.zip` file Anda disimpan. Contoh:

   ```
   cd plugins
   ```

1. Gunakan perintah berikut untuk membuat daftar semua bucket Amazon S3 Anda.

   ```
   aws s3 ls
   ```

1. Gunakan perintah berikut untuk mencantumkan file dan folder di bucket Amazon S3 untuk lingkungan Anda.

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

1. Gunakan perintah berikut untuk mengunggah `plugins.zip` file ke bucket Amazon S3 untuk lingkungan Anda.

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

### Menggunakan konsol Amazon S3
<a name="configuring-dag-plugins-upload-console"></a>

Konsol Amazon S3 adalah antarmuka pengguna berbasis web yang dapat Anda gunakan untuk membuat dan mengelola sumber daya di bucket Amazon S3 Anda.

**Untuk mengunggah menggunakan konsol Amazon S3**

1. Buka halaman [Lingkungan](https://console.aws.amazon.com/mwaa/home#/environments) di konsol Amazon MWAA.

1. Pilih lingkungan.

1. Pilih tautan **bucket S3** di **kode DAG di panel S3** untuk membuka bucket penyimpanan Anda di konsol.

1. Pilih **Unggah**.

1. Pilih **Tambahkan file**.

1. Pilih salinan lokal Anda`plugins.zip`, pilih **Unggah**.

## Menginstal plugin khusus di lingkungan Anda
<a name="configuring-dag-plugins-mwaa-installing"></a>

Bagian ini menjelaskan cara menginstal plugin khusus yang Anda unggah ke bucket Amazon S3 Anda dengan menentukan jalur ke file plugins.zip, dan menentukan versi file plugins.zip setiap kali file zip diperbarui.

### Menentukan jalur ke `plugins.zip` konsol Amazon MWAA (pertama kali)
<a name="configuring-dag-plugins-mwaa-first"></a>

Jika ini adalah pertama kalinya Anda mengunggah `plugins.zip` ke bucket Amazon S3 Anda, Anda juga perlu menentukan jalur ke file di konsol Amazon MWAA. Anda hanya perlu menyelesaikan langkah ini sekali.

1. Buka halaman [Lingkungan](https://console.aws.amazon.com/mwaa/home#/environments) di konsol Amazon MWAA.

1. Pilih lingkungan.

1. Pilih **Edit**.

1. Pada **kode DAG di panel Amazon S3**, pilih **Jelajahi S3** yang berdekatan dengan file **Plugins** - bidang opsional.

1. Pilih `plugins.zip` file di bucket Amazon S3 Anda.

1. Pilih **Tutup**.

1. Pilih **Berikutnya**, **Perbarui lingkungan**.

### Menentukan `plugins.zip` versi di konsol Amazon MWAA
<a name="configuring-dag-plugins-s3-mwaaconsole"></a>

Anda perlu menentukan versi `plugins.zip` file Anda di konsol Amazon MWAA setiap kali Anda mengunggah versi baru Anda `plugins.zip` di bucket Amazon S3 Anda. 

1. Buka halaman [Lingkungan](https://console.aws.amazon.com/mwaa/home#/environments) di konsol Amazon MWAA.

1. Pilih lingkungan.

1. Pilih **Edit**.

1. Pada **kode DAG di panel Amazon S3**, pilih `plugins.zip` versi dalam daftar tarik-turun.

1. Pilih **Berikutnya**.

## Contoh kasus penggunaan untuk plugins.zip
<a name="configuring-dag-plugins-examples"></a>
+ Pelajari cara membuat plugin khusus di[Plugin kustom dengan Apache Hive dan Hadoop](samples-hive.md).
+ Pelajari cara membuat plugin khusus di[Plugin kustom untuk menambal PythonVirtualenvOperator ](samples-virtualenv.md).
+ Pelajari cara membuat plugin khusus di[Plugin kustom dengan Oracle](samples-oracle.md).
+ Pelajari cara membuat plugin khusus di[Mengubah zona waktu DAG di Amazon MWAA](samples-plugins-timezone.md).

## Apa selanjutnya?
<a name="configuring-dag-plugins-next-up"></a>

Uji DAGs, plugin kustom, dan dependensi Python Anda secara lokal menggunakan on. [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) GitHub