

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

# Cara Amazon ECS Menempatkan Tugas di Instans Kontainer
<a name="task-placement"></a>

Anda dapat menggunakan penempatan tugas untuk mengonfigurasi Amazon ECS untuk menempatkan tugas Anda pada instance container yang memenuhi kriteria tertentu, misalnya Availability Zone atau tipe instans.

Berikut ini adalah komponen penempatan tugas:
+ Strategi penempatan tugas - Algoritma untuk memilih instance kontainer untuk penempatan tugas atau tugas untuk penghentian. Misalnya, Amazon ECS dapat memilih instans kontainer secara acak, atau dapat memilih instance kontainer sedemikian rupa sehingga tugas didistribusikan secara merata di seluruh grup instance.
+ Kelompok tugas - Sekelompok tugas terkait, misalnya tugas database.
+ Kendala penempatan tugas - Ini adalah aturan yang harus dipenuhi untuk menempatkan tugas pada instance kontainer. Jika kendala tidak terpenuhi, tugas tidak ditempatkan dan tetap di negara bagian. `PENDING` Misalnya, Anda dapat menggunakan kendala untuk menempatkan tugas hanya pada jenis instance tertentu. 

Amazon ECS memiliki algoritma yang berbeda untuk opsi kapasitas yang berbeda. 

## Instans Terkelola Amazon ECS
<a name="managed-instances-launch-type"></a>

Untuk tugas yang berjalan di Instans Terkelola Amazon ECS, Amazon ECS harus menentukan tempat untuk menempatkan tugas, dan — saat mengurangi jumlah tugas — tugas mana yang harus dihentikan. Amazon ECS membuat penentuan ini berdasarkan persyaratan instans yang ditentukan dalam templat peluncuran penyedia kapasitas, persyaratan yang ditentukan dalam definisi tugas seperti CPU dan memori, dan batasan penempatan tugas.

**catatan**  
Instans Terkelola Amazon ECS tidak mendukung strategi penempatan tugas. Amazon ECS akan mencoba yang terbaik untuk menyebarkan tugas di seluruh Availability Zone yang dapat diakses.

Saat Amazon ECS menempatkan tugas, Amazon menggunakan proses berikut untuk memilih instance container:

1. Identifikasi instance kontainer yang memenuhi persyaratan CPU, GPU, memori, dan port dalam definisi tugas.

1. Identifikasi instance kontainer yang memenuhi kendala penempatan tugas.

1. Identifikasi instance kontainer yang memenuhi persyaratan instans yang ditentukan dalam templat peluncuran penyedia kapasitas.

1. Pilih instance kontainer untuk penempatan tugas.

## EC2
<a name="ec2-launch-type"></a>

Untuk tugas yang menggunakan tipe peluncuran EC2, Amazon ECS harus menentukan tempat untuk menempatkan tugas berdasarkan persyaratan yang ditentukan dalam definisi tugas, seperti CPU dan memori. Demikian pula, saat Anda menurunkan jumlah tugas, Amazon ECS harus menentukan tugas mana yang akan dihentikan. Anda dapat menerapkan strategi dan batasan penempatan tugas untuk menyesuaikan cara Amazon ECS menempatkan dan mengakhiri tugas. 

Strategi penempatan tugas default bergantung pada apakah Anda menjalankan tugas secara manual (tugas mandiri) atau dalam layanan. Untuk tugas yang berjalan sebagai bagian dari layanan Amazon ECS, strategi penempatan tugas `spread` menggunakan. `attribute:ecs.availability-zone` Tidak ada batasan penempatan tugas default untuk tugas yang tidak ada di layanan. Untuk informasi selengkapnya, lihat [Jadwalkan wadah Anda di Amazon ECS](scheduling_tasks.md).

**catatan**  
Strategi penempatan tugas adalah upaya terbaik. Amazon ECS masih mencoba untuk menempatkan tugas bahkan ketika opsi penempatan paling optimal tidak tersedia. Namun, kendala penempatan tugas bersifat mengikat, dan mereka dapat mencegah penempatan tugas. 

Anda dapat menggunakan strategi dan kendala penempatan tugas bersama-sama. Misalnya, Anda dapat menggunakan strategi penempatan tugas dan kendala penempatan tugas untuk mendistribusikan tugas di tugas Availability Zone dan paket bin berdasarkan memori dalam setiap Availability Zone, tetapi hanya untuk instans G2.

Saat Amazon ECS menempatkan tugas, Amazon menggunakan proses berikut untuk memilih instance container:

1. Identifikasi instance kontainer yang memenuhi persyaratan CPU, GPU, memori, dan port dalam definisi tugas.

1. Identifikasi instance kontainer yang memenuhi kendala penempatan tugas.

1. Identifikasi instance kontainer yang memenuhi strategi penempatan tugas.

1. Pilih instance kontainer untuk penempatan tugas.

## Fargate
<a name="fargate-launch-type"></a>

Strategi penempatan tugas dan kendala tidak didukung untuk tugas yang menggunakan Fargate. Fargate akan mencoba yang terbaik untuk menyebarkan tugas di seluruh Availability Zone yang dapat diakses. Jika penyedia kapasitas mencakup Fargate dan Fargate Spot, perilaku spread bersifat independen untuk setiap penyedia kapasitas. 

# Instans Terkelola Amazon ECS penskalaan otomatis dan penempatan tugas
<a name="managed-instance-auto-scaling"></a>

Instans Terkelola Amazon ECS menggunakan algoritme cerdas untuk menskalakan kapasitas klaster secara otomatis dan menempatkan tugas secara efisien di seluruh infrastruktur Anda. Memahami cara kerja algoritme ini membantu Anda mengoptimalkan konfigurasi layanan dan memecahkan masalah perilaku penempatan.

## Algoritma penempatan tugas
<a name="managed-instance-task-placement-algorithm"></a>

Instans Terkelola Amazon ECS menggunakan algoritme penempatan canggih yang menyeimbangkan ketersediaan, pemanfaatan sumber daya, dan persyaratan jaringan saat menjadwalkan tugas.

### Penyebaran Zona Ketersediaan
<a name="managed-instance-az-spread-behavior"></a>

Secara default, Instans Terkelola Amazon ECS memprioritaskan ketersediaan dengan menyebarkan tugas di beberapa Availability Zone:
+ Untuk layanan dengan beberapa tugas, Instans Terkelola Amazon ECS memastikan distribusi di setidaknya 3 instans di Availability Zone yang berbeda bila memungkinkan
+ Perilaku ini memberikan toleransi kesalahan tetapi dapat mengakibatkan pemanfaatan sumber daya yang lebih rendah per instance
+ Penyebaran Availability Zone lebih diutamakan daripada optimasi pengemasan bin

### Perilaku pengepakan bin
<a name="managed-instance-bin-packing"></a>

Meskipun Instans Terkelola Amazon ECS dapat melakukan pengemasan bin untuk memaksimalkan pemanfaatan sumber daya, perilaku ini dipengaruhi oleh konfigurasi jaringan Anda:
+ Untuk mencapai kemasan bin, konfigurasikan layanan Anda untuk menggunakan satu subnet
+ Konfigurasi multi-subnet memprioritaskan distribusi Availability Zone di atas kepadatan sumber daya
+ Pengepakan bin lebih mungkin terjadi selama peluncuran layanan awal daripada selama acara penskalaan

### Pertimbangan kepadatan ENI
<a name="managed-instance-eni-density"></a>

Untuk layanan yang menggunakan mode `awsvpc` jaringan, Instans Terkelola Amazon ECS mempertimbangkan kepadatan Antarmuka Jaringan Elastis (ENI) saat membuat keputusan penempatan:
+ Setiap tugas dalam `awsvpc` mode membutuhkan ENI khusus
+ Jenis instans memiliki batas ENI berbeda yang memengaruhi kepadatan tugas
+ Instans Terkelola Amazon ECS memperhitungkan ketersediaan ENI saat memilih instans target

**catatan**  
Perbaikan perhitungan kepadatan ENI terus dilakukan untuk mengoptimalkan keputusan penempatan.

## Logika keputusan penyedia kapasitas
<a name="managed-instance-capacity-provider-decisions"></a>

Penyedia kapasitas Instans Terkelola Amazon ECS membuat keputusan penskalaan dan penempatan berdasarkan beberapa faktor:

Persyaratan sumber daya  
CPU, memori, dan persyaratan jaringan untuk tugas yang tertunda

Ketersediaan instans  
Kapasitas dan pemanfaatan saat ini di seluruh instans yang ada

Kendala jaringan  
Konfigurasi subnet dan ketersediaan ENI

Distribusi Zona Ketersediaan  
Mempertahankan toleransi kesalahan di beberapa Availability Zone

## Opsi konfigurasi
<a name="managed-instance-configuration-options"></a>

### Strategi pemilihan subnet
<a name="managed-instance-subnet-strategy"></a>

Konfigurasi subnet Anda secara signifikan memengaruhi perilaku penempatan tugas:

Beberapa subnet (default)  
Memprioritaskan penyebaran Availability Zone untuk ketersediaan tinggi  
Dapat mengakibatkan pemanfaatan sumber daya yang lebih rendah per instance  
Direkomendasikan untuk beban kerja produksi yang membutuhkan toleransi kesalahan

Subnet tunggal  
Memungkinkan pengepakan bin untuk pemanfaatan sumber daya yang lebih tinggi  
Mengurangi toleransi kesalahan dengan memusatkan tugas dalam satu Availability Zone  
Cocokkan untuk pengembangan atau beban kerja yang dioptimalkan biaya

### Pertimbangan mode jaringan
<a name="managed-instance-network-mode-considerations"></a>

Mode jaringan yang Anda pilih memengaruhi keputusan penempatan:
+ `awsvpc`mode - Setiap tugas membutuhkan ENI khusus, membatasi kepadatan tugas per instance
+ `host`mode — Tugas menggunakan jaringan host secara langsung, dengan penempatan terutama didorong oleh ketersediaan sumber daya

### Pertimbangan arsitektur CPU
<a name="managed-instance-cpu-architecture-considerations"></a>

`cpuArchitecture`Yang Anda tentukan dalam definisi tugas Anda digunakan untuk menempatkan tugas pada arsitektur tertentu. Jika Anda tidak menentukan`cpuArchitecture`, Amazon ECS akan mencoba menempatkan tugas pada arsitektur CPU apa pun yang tersedia berdasarkan konfigurasi penyedia kapasitas. Anda dapat menentukan `X86_64` atau `ARM64`.

## Pemecahan masalah penempatan tugas
<a name="managed-instance-troubleshooting-placement"></a>

### Pola penempatan umum
<a name="managed-instance-common-placement-patterns"></a>

Memahami pola penempatan yang diharapkan membantu membedakan perilaku normal dari masalah potensial:

Distribusi penyebaran  
Tugas didistribusikan di beberapa instance dengan pemanfaatan sebagian  
Perilaku normal saat menggunakan beberapa subnet  
Menunjukkan prioritas ketersediaan di atas efisiensi sumber daya

Penempatan terkonsentrasi  
Beberapa tugas ditempatkan pada instance yang lebih sedikit dengan pemanfaatan yang lebih tinggi  
Diharapkan saat menggunakan konfigurasi subnet tunggal  
Dapat terjadi selama peluncuran layanan awal

Distribusi tidak merata  
Beberapa kasus banyak digunakan sementara yang lain tetap kurang dimanfaatkan  
Dapat menunjukkan batas ENI atau kendala sumber daya  
Pertimbangkan untuk meninjau jenis instance dan konfigurasi jaringan

### Mengoptimalkan perilaku penempatan
<a name="managed-instance-placement-optimization"></a>

Untuk mengoptimalkan penempatan tugas untuk kebutuhan spesifik Anda:

1. Evaluasi persyaratan ketersediaan Anda versus kebutuhan pengoptimalan biaya

1. Pilih konfigurasi subnet yang sesuai berdasarkan prioritas Anda

1. Pilih jenis instans dengan kapasitas ENI yang memadai untuk mode jaringan Anda

1. Pantau pola penempatan dan sesuaikan konfigurasi sesuai kebutuhan

## Praktik terbaik
<a name="managed-instance-best-practices"></a>
+ **Untuk beban kerja produksi** — Gunakan beberapa subnet di berbagai Availability Zone untuk memastikan ketersediaan tinggi, menerima trade-off dalam pemanfaatan sumber daya
+ **Untuk pengembangan atau pengujian** - Pertimbangkan konfigurasi subnet tunggal untuk memaksimalkan pemanfaatan sumber daya dan mengurangi biaya
+ **Untuk `awsvpc` mode** — Pilih jenis instans dengan kapasitas ENI yang cukup untuk menghindari kendala penempatan
+ **Untuk optimalisasi biaya** — Pantau pola pemanfaatan dan sesuaikan konfigurasi layanan untuk menyeimbangkan ketersediaan dan efisiensi
+ **Untuk pemecahan masalah** - Tinjau konfigurasi subnet dan mode jaringan saat menyelidiki pola penempatan yang tidak terduga

# Gunakan strategi untuk menentukan penempatan tugas Amazon ECS
<a name="task-placement-strategies"></a>

Untuk tugas yang menggunakan tipe peluncuran EC2, Amazon ECS harus menentukan tempat untuk menempatkan tugas berdasarkan persyaratan yang ditentukan dalam definisi tugas, seperti CPU dan memori. Demikian pula, saat Anda menurunkan jumlah tugas, Amazon ECS harus menentukan tugas mana yang akan dihentikan. Anda dapat menerapkan strategi dan batasan penempatan tugas untuk menyesuaikan cara Amazon ECS menempatkan dan mengakhiri tugas. 

Strategi penempatan tugas default bergantung pada apakah Anda menjalankan tugas secara manual (tugas mandiri) atau dalam layanan. Untuk tugas yang berjalan sebagai bagian dari layanan Amazon ECS, strategi penempatan tugas `spread` menggunakan. `attribute:ecs.availability-zone` Tidak ada batasan penempatan tugas default untuk tugas yang tidak ada di layanan. Untuk informasi selengkapnya, lihat [Jadwalkan wadah Anda di Amazon ECS](scheduling_tasks.md).

**catatan**  
Strategi penempatan tugas adalah upaya terbaik. Amazon ECS masih mencoba untuk menempatkan tugas bahkan ketika opsi penempatan paling optimal tidak tersedia. Namun, kendala penempatan tugas bersifat mengikat, dan mereka dapat mencegah penempatan tugas. 

Anda dapat menggunakan strategi dan kendala penempatan tugas bersama-sama. Misalnya, Anda dapat menggunakan strategi penempatan tugas dan kendala penempatan tugas untuk mendistribusikan tugas di tugas Availability Zone dan paket bin berdasarkan memori dalam setiap Availability Zone, tetapi hanya untuk instans G2.

Saat Amazon ECS menempatkan tugas, Amazon menggunakan proses berikut untuk memilih instance container:

1. Identifikasi instance kontainer yang memenuhi persyaratan CPU, GPU, memori, dan port dalam definisi tugas.

1. Identifikasi instance kontainer yang memenuhi kendala penempatan tugas.

1. Identifikasi instance kontainer yang memenuhi strategi penempatan tugas.

1. Pilih instance kontainer untuk penempatan tugas.

Anda menentukan strategi penempatan tugas dalam definisi layanan, atau definisi tugas menggunakan `placementStrategy` parameter.

```
"placementStrategy": [
    {
        "field": "The field to apply the placement strategy against",
        "type": "The placement strategy to use"
    }
]
```

Anda dapat menentukan strategi saat menjalankan task ([RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html)), membuat layanan baru ([CreateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html)), atau memperbarui layanan yang ada ([UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html)).

Tabel berikut menjelaskan jenis dan bidang yang tersedia.


| jenis | Nilai bidang yang valid | 
| --- | --- | 
| binpack Tugas ditempatkan pada instans kontainer sehingga meninggalkan jumlah paling sedikit untuk CPU atau memori yang tidak terpakai. Strategi ini meminimalkan jumlah instans kontainer yang digunakan. Ketika strategi ini digunakan dan tindakan scale-in diambil, Amazon ECS menghentikan tugas. Hal ini dilakukan berdasarkan jumlah sumber daya yang tersisa pada instance container setelah tugas dihentikan. Instance kontainer yang memiliki sumber daya paling banyak yang tersisa setelah penghentian tugas telah menghentikan tugas tersebut. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonECS/latest/developerguide/task-placement-strategies.html)  | 
| random Tugas ditempatkan secara acak. | Tidak digunakan | 
| spreadTugas ditempatkan secara merata berdasarkan nilai yang ditentukan. Tugas layanan tersebar berdasarkan tugas dari layanan tersebut. Tugas mandiri tersebar berdasarkan tugas dari grup tugas yang sama. Untuk informasi selengkapnya tentang grup tugas, lihat [Tugas Amazon ECS terkait grup](task-groups.md). Saat `spread` strategi digunakan dan tindakan penskalaan diambil, Amazon ECS memilih tugas untuk dihentikan yang menjaga keseimbangan di seluruh Availability Zone. Dalam Availability Zone, tugas dipilih secara acak. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonECS/latest/developerguide/task-placement-strategies.html)  | 

Strategi penempatan tugas dapat diperbarui untuk layanan yang ada juga. Untuk informasi selengkapnya, lihat [Cara Amazon ECS Menempatkan Tugas di Instans Kontainer](task-placement.md).

Anda dapat membuat strategi penempatan tugas yang menggunakan beberapa strategi dengan membuat array strategi sesuai urutan yang Anda inginkan. Misalnya, jika Anda ingin menyebarkan tugas di seluruh Availability Zones dan kemudian bin pack task berdasarkan memori dalam setiap Availability Zone, tentukan strategi Availability Zone yang diikuti oleh strategi memori. Misalnya strategi, lihat[Contoh strategi penempatan tugas Amazon ECS](strategy-examples.md).

# Contoh strategi penempatan tugas Amazon ECS
<a name="strategy-examples"></a>

Anda dapat menentukan strategi penempatan tugas dengan tindakan berikut: [CreateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html), [UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html), dan [RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html).

**Topics**
+ [Mendistribusikan tugas secara merata di seluruh Availability Zone](#even-az)
+ [Mendistribusikan tugas secara merata di semua contoh](#even-instance)
+ [Tugas bin pack berdasarkan memori](#binpack)
+ [Tempatkan tugas secara acak](#random)
+ [Mendistribusikan tugas secara merata di seluruh Availability Zone dan kemudian mendistribusikan tugas secara merata di seluruh instance dalam setiap Availability Zone](#az-instance)
+ [Mendistribusikan tugas secara merata di seluruh Availability Zones dan kemudian bin pack task berdasarkan memori dalam setiap Availability Zone](#az-memory)
+ [Mendistribusikan tugas secara merata di seluruh instance dan kemudian tugas bin pack berdasarkan memori](#instance-memory)

## Mendistribusikan tugas secara merata di seluruh Availability Zone
<a name="even-az"></a>

Strategi berikut mendistribusikan tugas secara merata di seluruh Availability Zone.

```
"placementStrategy": [
    {
        "field": "attribute:ecs.availability-zone",
        "type": "spread"
    }
]
```

## Mendistribusikan tugas secara merata di semua contoh
<a name="even-instance"></a>

Strategi berikut mendistribusikan tugas secara merata di semua instans.

```
"placementStrategy": [
    {
        "field": "instanceId",
        "type": "spread"
    }
]
```

## Tugas bin pack berdasarkan memori
<a name="binpack"></a>

Berikut tugas bin pack strategi berdasarkan memori.

```
"placementStrategy": [
    {
        "field": "memory",
        "type": "binpack"
    }
]
```

## Tempatkan tugas secara acak
<a name="random"></a>

Strategi berikut menempatkan tugas secara acak.

```
"placementStrategy": [
    {
        "type": "random"
    }
]
```

## Mendistribusikan tugas secara merata di seluruh Availability Zone dan kemudian mendistribusikan tugas secara merata di seluruh instance dalam setiap Availability Zone
<a name="az-instance"></a>

Strategi berikut mendistribusikan tugas secara merata di seluruh Availability Zone dan kemudian mendistribusikan tugas secara merata di seluruh instans dalam setiap Availability Zone.

```
"placementStrategy": [
    {
        "field": "attribute:ecs.availability-zone",
        "type": "spread"
    },
    {
        "field": "instanceId",
        "type": "spread"
    }
]
```

## Mendistribusikan tugas secara merata di seluruh Availability Zones dan kemudian bin pack task berdasarkan memori dalam setiap Availability Zone
<a name="az-memory"></a>

Strategi berikut mendistribusikan tugas secara merata di seluruh Availability Zone dan kemudian tugas bin pack berdasarkan memori dalam setiap Availability Zone.

```
"placementStrategy": [
    {
        "field": "attribute:ecs.availability-zone",
        "type": "spread"
    },
    {
        "field": "memory",
        "type": "binpack"
    }
]
```

## Mendistribusikan tugas secara merata di seluruh instance dan kemudian tugas bin pack berdasarkan memori
<a name="instance-memory"></a>

Strategi berikut mendistribusikan tugas secara merata di semua instance dan kemudian mengemas tugas berdasarkan memori dalam setiap instance. 

```
"placementStrategy": [
    {
        "field": "instanceId",
        "type": "spread"
    },
    {
        "field": "memory",
        "type": "binpack"
    }
]
```

# Tugas Amazon ECS terkait grup
<a name="task-groups"></a>

Anda dapat mengidentifikasi satu set tugas terkait dan menempatkannya dalam grup tugas. Semua tugas dengan nama grup tugas yang sama dianggap sebagai satu rangkaian ketika menggunakan strategi penempatan tugas `spread`. Misalnya, Anda menjalankan aplikasi yang berbeda dalam satu cluster, seperti database dan server web. Untuk memastikan bahwa basis data Anda seimbang di seluruh Availability Zone, tambahkan basis data ke grup tugas bernama `databases` dan kemudian gunakan strategi penempatan tugas `spread`. Untuk informasi selengkapnya, lihat [Gunakan strategi untuk menentukan penempatan tugas Amazon ECS](task-placement-strategies.md).

Kelompok tugas juga dapat digunakan sebagai kendala penempatan tugas. Saat Anda menentukan grup tugas dalam `memberOf` batasan, tugas hanya dikirim ke instance kontainer yang menjalankan tugas dalam grup tugas yang ditentukan. Sebagai contoh, lihat [Contoh kendala penempatan tugas Amazon ECS](constraint-examples.md).

Secara default, tugas mandiri menggunakan nama keluarga definisi tugas (misalnya,`family:my-task-definition`) sebagai nama grup tugas jika nama grup tugas kustom tidak ditentukan. Tugas yang diluncurkan sebagai bagian dari layanan menggunakan nama layanan sebagai nama grup tugas dan tidak dapat diubah.

Persyaratan berikut untuk kelompok tugas berlaku.
+ Nama grup tugas harus 255 karakter atau kurang.
+ Setiap tugas bisa berada dalam satu grup.
+ Setelah meluncurkan tugas, Anda tidak dapat memodifikasi grup tugasnya.

# Menentukan Instans Kontainer Mana yang Digunakan Amazon ECS untuk Tugas
<a name="task-placement-constraints"></a>

Batasan penempatan tugas adalah aturan tentang instance kontainer yang digunakan Amazon ECS untuk menentukan apakah tugas diizinkan untuk dijalankan pada instance. Setidaknya satu instance kontainer harus cocok dengan kendala. Jika tidak ada instance yang cocok dengan kendala, tugas tetap dalam keadaan. `PENDING` Saat membuat layanan baru atau memperbarui layanan yang sudah ada, Anda dapat menentukan batasan penempatan tugas untuk tugas layanan. 

Anda dapat menentukan batasan penempatan tugas dalam definisi layanan, definisi tugas, atau tugas menggunakan parameter. `placementConstraint`

```
"placementConstraints": [
    {
        "expression": "The expression that defines the task placement constraints",
        "type": "The placement constraint type to use"
    }
]
```

Tabel berikut menjelaskan cara menggunakan parameter.


| Jenis kendala | Dapat ditentukan kapan | 
| --- | --- | 
| distinctInstanceTempatkan setiap tugas aktif pada instance kontainer yang berbeda.Amazon ECS melihat status tugas yang diinginkan untuk penempatan tugas. Misalnya, jika status yang diinginkan dari tugas yang ada adalah`STOPPED`, (tetapi status terakhir tidak), tugas masuk baru dapat ditempatkan pada instance yang sama meskipun ada kendala `distinctInstance` penempatan. Oleh karena itu, Anda mungkin melihat 2 tugas dengan status terakhir `RUNNING` pada instance yang sama. Kami menyarankan agar pelanggan yang mencari isolasi yang kuat untuk tugas mereka menggunakan Fargate. Fargate menjalankan setiap tugas dalam lingkungan virtualisasi perangkat keras. Ini memastikan bahwa beban kerja kontainer ini tidak berbagi antarmuka jaringan, penyimpanan sementara Fargate, CPU, atau memori dengan tugas lain. Untuk informasi selengkapnya, lihat [Gambaran Umum Keamanan AWS Fargate](https://d1.awsstatic.com/whitepapers/AWS_Fargate_Security_Overview_Whitepaper.pdf). |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonECS/latest/developerguide/task-placement-constraints.html)  | 
| memberOfTempatkan tugas pada instans kontainer yang memenuhi ekspresi.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonECS/latest/developerguide/task-placement-constraints.html) | 

Bila menggunakan tipe `memberOf` constraint, Anda dapat membuat ekspresi menggunakan bahasa kueri klaster yang menentukan instance container tempat Amazon ECS dapat menempatkan tugas. Ekspresi adalah cara bagi Anda untuk mengelompokkan instance container Anda berdasarkan atribut. Ekspresi masuk dalam `expression ` parameter`placementConstraint`.

## Atribut instans wadah Amazon ECS
<a name="attributes"></a>

Anda dapat menambahkan metadata kustom ke instans kontainer Anda, yang dikenal sebagai *atribut*. Tiap atribut memiliki nama dan nilai string opsional. Anda dapat menggunakan atribut bawaan yang disediakan oleh Amazon ECS atau menentukan atribut khusus.

Bagian berikut berisi contoh built-in, opsional, dan atribut kustom.

### Atribut bawaan
<a name="ecs-automatic-attributes"></a>

Amazon ECS secara otomatis menerapkan atribut berikut ke instance container Anda.

`ecs.ami-id`  
ID AMI yang digunakan untuk meluncurkan instans. Nilai contoh untuk atribut ini adalah `ami-1234abcd`.

`ecs.availability-zone`  
Availability Zone untuk instans. Nilai contoh untuk atribut ini adalah `us-east-1a`.

`ecs.instance-type`  
Jenis instans untuk instans tersebut. Nilai contoh untuk atribut ini adalah `g2.2xlarge`.

`ecs.os-type`  
Sistem operasi untuk instans. Nilai yang mungkin untuk atribut ini adalah `linux` dan `windows`.

`ecs.os-family`  
Versi sistem operasi untuk contoh.  
Untuk contoh Linux, nilai yang valid adalah`LINUX`. Untuk instance Windows, ECS menetapkan nilai dalam format. `WINDOWS_SERVER_<OS_Release>_<FULL or CORE>` Nilai yang valid adalah`WINDOWS_SERVER_2022_FULL`,`WINDOWS_SERVER_2022_CORE`,`WINDOWS_SERVER_20H2_CORE`,`WINDOWS_SERVER_2019_FULL`,`WINDOWS_SERVER_2019_CORE`, dan`WINDOWS_SERVER_2016_FULL`.  
Ini penting untuk wadah Windows dan Windows containers on AWS Fargate karena versi OS dari setiap wadah Windows harus cocok dengan host. Jika versi Windows dari gambar kontainer berbeda dari host, penampung tidak dimulai. Untuk informasi selengkapnya, lihat [Kompatibilitas versi penampung Windows](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-2022%2Cwindows-11) di situs web dokumentasi Microsoft.  
Jika klaster Anda menjalankan beberapa versi Windows, Anda dapat memastikan bahwa tugas ditempatkan pada instans EC2 yang berjalan pada versi yang sama dengan menggunakan batasan penempatan:. `memberOf(attribute:ecs.os-family == WINDOWS_SERVER_<OS_Release>_<FULL or CORE>)` Untuk informasi selengkapnya, lihat [Mengambil metadata Windows AMI yang dioptimalkan Amazon ECS](retrieve-ecs-optimized_windows_AMI.md).

`ecs.cpu-architecture`  
Arsitektur CPU untuk instans. Nilai contoh untuk atribut ini adalah `x86_64` dan `arm64`.

`ecs.vpc-id`  
VPC tempat instans diluncurkan. Nilai contoh untuk atribut ini adalah `vpc-1234abcd`.

`ecs.subnet-id`  
Subnet yang digunakan instans. Nilai contoh untuk atribut ini adalah `subnet-1234abcd`.

**catatan**  
Instans Terkelola Amazon ECS mendukung subset atribut berikut:  
`ecs.subnet-id`
`ecs.availability-zone`
`ecs.instance-type`
`ecs.cpu-architecture`

### Atribut opsional
<a name="ecs-optional-attributes"></a>

Amazon ECS dapat menambahkan atribut berikut ke instance container Anda.

`ecs.awsvpc-trunk-id`  
Jika atribut ini ada, instans memiliki antarmuka jaringan trunk. Untuk informasi selengkapnya, lihat [Meningkatkan antarmuka jaringan instans kontainer Amazon ECS Linux](container-instance-eni.md).

`ecs.outpost-arn`  
Jika atribut ini ada, itu berisi Amazon Resource Name (ARN) dari Outpost. Untuk informasi selengkapnya, lihat [Layanan Kontainer Elastis Amazon aktif AWS Outposts](using-outposts.md).

`ecs.capability.external`  
Jika atribut ini ada, instans diidentifikasi sebagai instans eksternal. Untuk informasi selengkapnya, lihat [Cluster Amazon ECS untuk instans eksternal](ecs-anywhere.md).

### Atribut kustom
<a name="ecs-custom-attributes"></a>

Anda dapat menerapkan atribut kustom ke instans kontainer Anda. Misalnya, Anda dapat menentukan atribut dengan nama “stack” dan nilai “prod”.

Saat menentukan atribut khusus, Anda harus mempertimbangkan hal berikut.
+ `name` harus berisi antara 1 hingga 128 karakter dan nama boleh berisi huruf (huruf besar dan huruf kecil), angka, tanda hubung, garis bawah, garis miring ke depan, garis miring belakang, atau titik.
+ `value` harus berisi antara 1 hingga 128 karakter dan boleh berisi huruf (huruf besar dan huruf kecil), angka, tanda hubung, garis bawah, titik, tanda (@), garis miring ke depan, garis miring belakang, titik dua, atau spasi. Nilai tidak dapat berisi spasi putih utama atau di belakang.

# Buat ekspresi untuk menentukan instance kontainer untuk tugas Amazon ECS
<a name="cluster-query-language"></a>

Kueri cluster adalah ekspresi yang memungkinkan Anda mengelompokkan objek. Misalnya, Anda dapat mengelompokkan instans kontainer dengan atribut seperti Availability Zone, tipe instans, atau metadata kustom. Untuk informasi selengkapnya, lihat [Atribut instans wadah Amazon ECS](task-placement-constraints.md#attributes).

Setelah menetapkan grup instans penampung, Anda dapat menyesuaikan Amazon ECS untuk menempatkan tugas pada instans penampung berdasarkan grup. Untuk informasi selengkapnya, lihat [Menjalankan aplikasi sebagai tugas Amazon ECS](standalone-task-create.md), dan [Membuat penyebaran pembaruan bergulir Amazon ECS](create-service-console-v2.md). Anda juga dapat menerapkan filter grup ketika mencantumkan instans kontainer.

## Sintaksis ekspresi
<a name="expression-syntax"></a>

Ekspresi memiliki sintaksis berikut:

```
subject operator [argument]
```

**Subjek**  
Atribut atau bidang yang perlu dievaluasi.

`agentConnected`  
Pilih instans kontainer berdasarkan status koneksi agen penampung Amazon ECS mereka. Anda dapat menggunakan filter ini untuk mencari instans dengan agen kontainer yang terputus.  
Operasi yang valid: equals (==), not\$1equals (\$1=), in, not\$1in (\$1in), matches (=\$1), not\$1matches (\$1\$1)

`agentVersion`  
Pilih instans kontainer berdasarkan versi agen penampung Amazon ECS mereka. Anda dapat menggunakan filter ini untuk menemukan instance yang menjalankan versi lama dari agen penampung Amazon ECS.  
Operator yang valid: equals (==), not\$1equals (\$1=), greater\$1than (>), greater\$1than\$1equal (>=), less\$1than (<), less\$1than\$1equal (<=)

`attribute:attribute-name`  
Pilih instans kontainer berdasarkan atribut. Untuk informasi selengkapnya, lihat [Atribut instans wadah Amazon ECS](task-placement-constraints.md#attributes).

`ec2InstanceId`  
Pilih instans kontainer berdasarkan ID instans Amazon EC2 mereka.  
Operasi yang valid: equals (==), not\$1equals (\$1=), in, not\$1in (\$1in), matches (=\$1), not\$1matches (\$1\$1)

`registeredAt`  
Pilih instans kontainer berdasarkan tanggal pendaftaran instans kontainer mereka. Anda dapat menggunakan filter ini untuk menemukan instans yang baru terdaftar atau instans yang sangat usang.  
Operasi yang valid: equals (==), not\$1equals (\$1=), greater\$1than (>), greater\$1than\$1equal (>=), less\$1than (<), less\$1than\$1equal (<=)  
Format tanggal yang valid: 2018-06-18T22:28:28\$100:00, 2018-06-18T22:28:28Z, 2018-06-18T22:28:28, 2018-06-18

`runningTasksCount`  
Pilih instans kontainer berdasarkan jumlah tugas yang sedang berjalan. Anda dapat menggunakan filter ini untuk menemukan instans yang kosong atau hampir kosong (hanya beberapa tugas yang berjalan pada instans tersebut).  
Operasi yang valid: equals (==), not\$1equals (\$1=), greater\$1than (>), greater\$1than\$1equal (>=), less\$1than (<), less\$1than\$1equal (<=)

`task:group`  
Pilih instans kontainer oleh grup tugas. Untuk informasi selengkapnya, lihat [Tugas Amazon ECS terkait grup](task-groups.md).

**Operator**  
Operasi perbandingan. Mendukung operasi berikut ini.


|  Operasi  |  Deskripsi  | 
| --- | --- | 
|  ==, equals  |  Kesamaan string  | 
|  \$1=, not\$1equals  |  Ketidaksamaan string  | 
|  >, greater\$1than  |  Lebih besar dari  | 
|  >=, greater\$1than\$1equal  |  Lebih besar dari atau sama dengan  | 
|  <, less\$1than  |  Kurang dari  | 
|  <=, less\$1than\$1equal  |  Kurang dari atau sama dengan  | 
|  exists  |  Subjek ada  | 
|  \$1exists, not\$1exists  |  Subjek tidak ada  | 
|  in  |  Nilai dalam daftar argumen  | 
|  \$1in, not\$1in  |  Nilai tidak dalam daftar argumen  | 
|  =\$1, matches  |  Pola cocok  | 
|  \$1\$1, not\$1matches  |  Pola tidak cocok  | 

**catatan**  
Sebuah ekspresi tunggal tidak dapat berisi tanda kurung. Namun, tanda kurung dapat digunakan untuk menunjukkan prioritas dalam ekspresi majemuk.

**Pendapat**  
Di sebagian besar operasi, argumen adalah nilai literal.

Operasi `in` dan `not_in` menganggap daftar argumen sebagai argumen. Anda menentukan daftar argumen sebagai berikut:

```
[argument1, argument2, ..., argumentN]
```

Operasi matches dan not\$1matches menerima argumen yang sesuai dengan sintaksis ekspresi reguler Java. Untuk informasi selengkapnya, lihat [java.util.regex.Pattern](http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html).

**Ekspresi majemuk**

Anda dapat menggabungkan ekspresi menggunakan operasi Boolean berikut:
+ &&, dan
+ \$1\$1, atau
+ \$1, tidak

Anda dapat menentukan prioritas menggunakan tanda kurung:

```
(expression1 or expression2) and expression3
```

## Contoh ekspresi
<a name="expression-examples"></a>

Berikut ini adalah contoh-contoh ekspresi.

**Contoh: String Sama Dengan**  
Ekspresi berikut memilih instans dengan tipe instans yang ditentukan.

```
attribute:ecs.instance-type == t2.small
```

**Contoh: Daftar Argumen**  
Ekspresi berikut memilih instans di Availability Zone us-east-1a atau us-east-1b.

```
attribute:ecs.availability-zone in [us-east-1a, us-east-1b]
```

**Contoh: Ekspresi Majemuk**  
Ekspresi berikut memilih instance G2 yang tidak berada di Availability Zone us-east-1d.

```
attribute:ecs.instance-type =~ g2.* and attribute:ecs.availability-zone != us-east-1d
```

**Contoh: Afinitas Tugas**  
Ekspresi berikut memilih instans yang meng-host tugas di grup`service:production`.

```
task:group == service:production
```

**Contoh: Afinitas Terbalik Tugas**  
Ekspresi berikut memilih instance yang tidak menghosting tugas dalam grup database.

```
not(task:group == database)
```

**Contoh: Menjalankan penghitungan tugas**  
Ekspresi berikut memilih instans yang hanya menjalankan satu tugas.

```
runningTasksCount == 1
```

**Contoh: Amazon ECS versi agen kontainer**  
Ekspresi berikut memilih instans yang menjalankan versi agen kontainer di bawah 1.14.5.

```
agentVersion < 1.14.5
```

**Contoh: Waktu pendaftaran instans**  
Ekspresi berikut memilih instans yang terdaftar sebelum 13 Februari 2018.

```
registeredAt < 2018-02-13
```

**Contoh: ID instans Amazon EC2**  
Ekspresi berikut memilih instance dengan instans Amazon EC2 berikut. IDs

```
ec2InstanceId in ['i-abcd1234', 'i-wxyx7890']
```

# Contoh kendala penempatan tugas Amazon ECS
<a name="constraint-examples"></a>

Berikut ini adalah contoh kendala penempatan tugas.

Contoh ini menggunakan `memberOf` kendala untuk menempatkan tugas pada instance t2. Ini dapat ditentukan dengan tindakan berikut: [CreateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html), [UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html), [RegisterTaskDefinition](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RegisterTaskDefinition.html), dan [RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html).

```
"placementConstraints": [
    {
        "expression": "attribute:ecs.instance-type =~ t2.*",
        "type": "memberOf"
    }
]
```

Contoh menggunakan `memberOf` kendala untuk menempatkan tugas replika pada instance dengan tugas di grup tugas layanan daemon, dengan menghormati strategi penempatan `daemon-service` tugas apa pun yang juga ditentukan. Batasan ini memastikan bahwa tugas layanan daemon ditempatkan pada instans EC2 sebelum tugas layanan replika.

Ganti `daemon-service` dengan nama layanan daemon.

```
"placementConstraints": [
    {
        "expression": "task:group == service:daemon-service",
        "type": "memberOf"
    }
]
```

Contoh tersebut menggunakan kendala `memberOf` untuk menempatkan tugas pada instans dengan tugas-tugas lain di kelompok tugas `databases`, perihal setiap strategi penempatan tugas yang juga ditentukan. Untuk informasi selengkapnya tentang grup tugas, lihat [Tugas Amazon ECS terkait grup](task-groups.md). Ini dapat ditentukan dengan tindakan berikut: [CreateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html), [UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html), [RegisterTaskDefinition](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RegisterTaskDefinition.html), dan [RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html).

```
"placementConstraints": [
    {
        "expression": "task:group == databases",
        "type": "memberOf"
    }
]
```

Kendala `distinctInstance` menempatkan setiap tugas dalam grup pada instans yang berbeda. Hal ini dapat ditentukan dengan tindakan berikut: [CreateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html), [UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html), dan [RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html)

Amazon ECS melihat status tugas yang diinginkan untuk penempatan tugas. Misalnya, jika status yang diinginkan dari tugas yang ada adalah`STOPPED`, (tetapi status terakhir tidak), tugas masuk baru dapat ditempatkan pada instance yang sama meskipun ada kendala `distinctInstance` penempatan. Oleh karena itu, Anda mungkin melihat 2 tugas dengan status terakhir `RUNNING` pada instance yang sama.

```
"placementConstraints": [
    {
        "type": "distinctInstance"
    }
]
```