

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

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