

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

# Menyebarkan AWS IoT Greengrass komponen ke perangkat
<a name="manage-deployments"></a>

Anda dapat menggunakan AWS IoT Greengrass untuk menyebarkan komponen ke perangkat atau grup perangkat. Anda menggunakan *penerapan* untuk menentukan komponen dan konfigurasi yang dikirim ke perangkat. AWS IoT Greengrass menyebarkan ke *target*, AWS IoT benda atau kelompok hal yang mewakili perangkat inti Greengrass. AWS IoT Greengrass menggunakan [AWS IoT Core pekerjaan](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html) untuk menyebarkan ke perangkat inti Anda. Anda dapat mengonfigurasi bagaimana pekerjaan diluncurkan ke perangkat Anda.

## Penerapan perangkat inti
<a name="core-device-deployments"></a>

Setiap perangkat inti menjalankan komponen penerapan untuk perangkat itu. Penerapan baru ke target yang sama menimpa penerapan sebelumnya ke target. Saat Anda membuat penerapan, Anda menentukan komponen dan konfigurasi yang akan diterapkan ke perangkat lunak inti perangkat yang ada.

Ketika Anda merevisi deployment untuk target, Anda mengganti komponen dari revisi sebelumnya dengan komponen dalam revisi baru. Misalnya, Anda menyebarkan [Secrets manager](secret-manager-component.md) komponen [Manajer log](log-manager-component.md) dan ke grup `TestGroup` benda. Kemudian Anda membuat penerapan lain untuk `TestGroup` yang hanya menentukan komponen manajer rahasia. Akibatnya, perangkat inti dalam grup itu tidak lagi menjalankan pengelola log.

## Resolusi ketergantungan platform
<a name="platform-dependency-resolution"></a>

Ketika perangkat inti menerima penerapan, ia memeriksa untuk memastikan bahwa komponen tersebut kompatibel dengan perangkat inti. Misalnya, jika Anda menyebarkan [Firehouse](kinesis-firehose-component.md) ke target Windows, penerapan akan gagal.

## Resolusi ketergantungan komponen
<a name="component-dependency-resolution"></a>

Selama penerapan komponen, perangkat inti memverifikasi kompatibilitas semua dependensi komponen dan persyaratan versi di seluruh grup sesuatu. Verifikasi ini memastikan bahwa batas versi terpenuhi untuk semua komponen dan dependensinya sebelum melanjutkan penerapan.

Proses resolusi dependensi dimulai dengan mengidentifikasi komponen target yang tidak memiliki dependensi dalam resep mereka. Kemudian, sistem membangun pohon ketergantungan menggunakan breadth-first search (BFS) yang secara sistematis mengeksplorasi setiap node target dan menemukan dependensi mereka terlebih dahulu sebelum pindah ke node berikutnya. Setiap node menyertakan komponen target sebagai kunci dan persyaratan versi sebagai nilainya.

Persyaratan versi menggabungkan tiga set kendala:
+ Persyaratan versi yang sudah ditetapkan dalam grup hal yang ada.
+ Versi komponen yang diperlukan oleh penerapan. Anda harus memilih versi komponen saat membuat atau memperbarui penerapan.
+ Kendala versi komponen apa pun yang ditentukan dalam bagian ketergantungan resep.

### Selesaikan dependensi komponen
<a name="resolving-dependencies"></a>

Selama penerapan, inti Greengrass pertama-tama mencoba menemukan kandidat lokal yang saat ini berjalan di perangkat yang memenuhi persyaratan. Jika komponen yang berjalan memenuhi persyaratan, nukleus mendapatkan jalur resep yang disimpan dari folder resep dan menemukan versi lokal terbaru di toko lokal.

[Untuk AWS Cloud penerapan, nukleus kemudian akan memanggil API. ResolveComponentCandidates ](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ResolveComponentCandidates.html) API ini akan dimulai dengan versi terbaru yang tersedia dan memeriksa apakah memenuhi dependensi dan persyaratan. Ketika nukleus mendapat respons dari API, ia memilih versi terbaru itu. Jika tidak ada versi yang ditemukan dari AWS Cloud yang memenuhi persyaratan, penerapan gagal. Jika perangkat offline, itu jatuh kembali ke kandidat lokal asli yang ditemukan. Jika tidak ada kandidat lokal yang ditemukan yang memenuhi persyaratan, penerapan gagal.

Untuk penyebaran lokal, nukleus secara eksklusif menggunakan kandidat lokal jika ada dan jika mereka memenuhi persyaratan tanpa bernegosiasi. AWS Cloud Jika tidak ada kandidat seperti itu, penyebaran gagal.

**catatan**  
Semua resep yang diselesaikan disimpan secara lokal untuk referensi future.

Untuk informasi selengkapnya, lihat bagian [resolusi ketergantungan](https://github.com/aws-greengrass/aws-greengrass-nucleus/wiki/Deployment#dependency-resolution) di GitHub.

Jika inti Greengrass berhasil menyelesaikan semua komponen, log nukleus akan berisi baris berikut.

```
resolve-all-group-dependencies-finish. Finish resolving all groups dependencies.
```

**Example**  
Berikut ini adalah contoh bagaimana nukleus akan menyelesaikan persyaratan komponen.  
+ Anda menerapkan ComponentA yang bergantung pada ComponentC versi 1.0.0-1.9.0.
+ Anda juga menerapkan ComponentB yang bergantung pada ComponentC versi 1.4.0-1.9.5.
Dengan resolusi ketergantungan komponen, nukleus akan menerapkan versi terbaru dari versi ComponentC untuk memenuhi persyaratan ComponentA dan ComponentB. Versi terbaru ComponentC ini adalah versi 1.9.0.

#### Kegagalan resolusi ketergantungan komponen umum
<a name="w2ab1c24c25b9c11c19"></a>

Resolusi ketergantungan komponen mungkin gagal karena dua alasan utama: konflik persyaratan versi target atau konflik persyaratan ketergantungan komponen.

##### Skenario 1: Konflik persyaratan versi target
<a name="w2ab1c24c25b9c11c19b5"></a>
+ Sesuatu ada dalam satu kelompok hal dan Anda juga ingin menambahkan hal itu ke grup hal baru. Penerapan akan gagal jika grup hal baru memerlukan versi hal yang berbeda.
+ Penerapan mungkin juga gagal jika sesuatu milik grup benda dan ingin memperbarui versi komponen melalui penerapan sesuatu.

![\[Dependensi komponen yang mengakibatkan penerapan gagal.\]](http://docs.aws.amazon.com/id_id/greengrass/v2/developerguide/images/dependency-4.png)


*Contoh log kegagalan:*

```
2025-04-11T06:16:03.315Z [ERROR] (pool-3-thread-27) com.aws.greengrass.componentmanager.ComponentManager: Failed to negotiate version with cloud and no local version to fall back to. {componentName=ComponentC, versionRequirement={thing/ABC==2.0.0, thinggroup/ThingGroupA==1.0.0}}
2025-04-11T06:16:03.316Z [ERROR] (pool-3-thread-26) com.aws.greengrass.deployment.DeploymentService: Error occurred while processing deployment. {deploymentId=fbac24de-4ef9-44b0-a685-fdc63b0f02b8, serviceName=DeploymentService, currentState=RUNNING}
java.util.concurrent.ExecutionException: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: No local or cloud component version satisfies the requirements Check whether the version constraints conflict and that the component exists in your AWS account with a version that matches the version constraints. If the version constraints conflict, revise deployments to resolve the conflict. Component ComponentC version constraints: thing/ABC requires =2.0.0, thinggroup/ThingGroupA requires =1.0.0.
    at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
    at com.aws.greengrass.deployment.DefaultDeploymentTask.call(DefaultDeploymentTask.java:127)
    at com.aws.greengrass.deployment.DefaultDeploymentTask.call(DefaultDeploymentTask.java:50)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: No local or cloud component version satisfies the requirements Check whether the version constraints conflict and that the component exists in your AWS account with a version that matches the version constraints. If the version constraints conflict, revise deployments to resolve the conflict. Component ComponentC version constraints: thing/ABC requires =2.0.0, thinggroup/ThingGroupA requires =1.0.0.
    at com.aws.greengrass.componentmanager.ComponentManager.negotiateVersionWithCloud(ComponentManager.java:232)
    at com.aws.greengrass.componentmanager.ComponentManager.resolveComponentVersion(ComponentManager.java:167)
    at com.aws.greengrass.componentmanager.DependencyResolver.lambda$resolveDependencies$0(DependencyResolver.java:134)
    at com.aws.greengrass.componentmanager.DependencyResolver.resolveComponentDependencies(DependencyResolver.java:231)
    at com.aws.greengrass.componentmanager.DependencyResolver.resolveDependencies(DependencyResolver.java:131)
    at com.aws.greengrass.deployment.DefaultDeploymentTask.lambda$call$2(DefaultDeploymentTask.java:125)
    ... 4 more
```

Log menunjukkan kesalahan konflik versi karena nukleus tidak dapat menemukan versi komponen yang secara bersamaan memenuhi dua persyaratan yang bertentangan.

##### Bagaimana mengatasinya
<a name="w2ab1c24c25b9c11c19b5c13"></a>
+ Jika Anda ingin menyimpan komponen di setiap grup hal, pilih versi yang sama dari komponen itu di setiap grup hal.
+ Pilih versi komponen yang memenuhi persyaratan penerapan.
+ Jika Anda ingin menggunakan versi komponen yang tidak memenuhi kedua persyaratan grup hal, pilih versi komponen yang memenuhi persyaratan versi grup benda dan gunakan komponen itu hanya di grup itu.

##### Skenario 2: Konflik persyaratan versi ketergantungan komponen
<a name="w2ab1c24c25b9c11c19b7"></a>

Jika komponen adalah ketergantungan komponen yang berbeda dan komponen memerlukan versi yang berbeda atau rentang versi yang berbeda dari komponen itu, ada kemungkinan bahwa tidak ada versi yang tersedia untuk memenuhi semua persyaratan versi. Dalam skenario ini, penerapan akan gagal.

**Example**  
Penerapan ComponentA (v2.5.0), ComponentB (v1.3.0), dan ComponentC (v1.0.0)  
+ ComponentA membutuhkan versi ComponentB >=1.0.0.

  ```
  ---
  ...
  ComponentName: ComponentA
  ComponentVersion: "2.5.0"
  ComponentDependencies:
      ComponentB:
          VersionRequirement: ">=1.0.0"
          DependencyType: "HARD"
  ...
  ```
+ ComponentC membutuhkan ComponentA versi <2.0.0.

  ```
  ---
  ...
  ComponentName: ComponentC
  ComponentVersion: "1.0.0"
  ComponentDependencies:
      ComponentA:
          VersionRequirement: "<2.0.0"
          DependencyType: "HARD"
  ...
  ```
Ada konflik versi antara dua persyaratan untuk ComponentA:  
+ ComponentA membutuhkan versi 2.5.0 dalam penerapan ini
+ ComponentC membutuhkan versi ComponentA yang lebih rendah dari 2.0.0
Kedua persyaratan ini saling bertentangan, sehingga tidak mungkin bagi nukleus untuk menemukan komponenVersi yang memenuhi kedua persyaratan. Oleh karena itu, resolusi ketergantungan gagal.

![\[Dependensi komponen yang mengakibatkan penerapan gagal.\]](http://docs.aws.amazon.com/id_id/greengrass/v2/developerguide/images/dependency-3.png)


*Contoh log kegagalan:*

```
2025-04-11T06:07:18.291Z [ERROR] (pool-3-thread-25) com.aws.greengrass.componentmanager.ComponentManager: Failed to negotiate version with cloud and no local version to fall back to. {componentName=ComponentA, versionRequirement={ComponentC=<2.0.0, thinggroup/ThingGroupA==2.5.0}}
2025-04-11T06:07:18.292Z [ERROR] (pool-3-thread-24) com.aws.greengrass.deployment.DeploymentService: Error occurred while processing deployment. {deploymentId=2ffac4df-1ac9-405c-8c11-28494a1b4382, serviceName=DeploymentService, currentState=RUNNING}
java.util.concurrent.ExecutionException: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: No local or cloud component version satisfies the requirements Check whether the version constraints conflict and that the component exists in your AWS account with a version that matches the version constraints. If the version constraints conflict, revise deployments to resolve the conflict. Component ComponentA version constraints: ComponentC requires <2.0.0, thinggroup/ThingGroupA requires =2.5.0.
    at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
    at com.aws.greengrass.deployment.DefaultDeploymentTask.call(DefaultDeploymentTask.java:127)
    at com.aws.greengrass.deployment.DefaultDeploymentTask.call(DefaultDeploymentTask.java:50)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: No local or cloud component version satisfies the requirements Check whether the version constraints conflict and that the component exists in your AWS account with a version that matches the version constraints. If the version constraints conflict, revise deployments to resolve the conflict. Component ComponentA version constraints: ComponentC requires <2.0.0, thinggroup/ThingGroupA requires =2.5.0.
    at com.aws.greengrass.componentmanager.ComponentManager.negotiateVersionWithCloud(ComponentManager.java:232)
    at com.aws.greengrass.componentmanager.ComponentManager.resolveComponentVersion(ComponentManager.java:167)
    at com.aws.greengrass.componentmanager.DependencyResolver.lambda$resolveDependencies$0(DependencyResolver.java:134)
    at com.aws.greengrass.componentmanager.DependencyResolver.resolveComponentDependencies(DependencyResolver.java:231)
    at com.aws.greengrass.componentmanager.DependencyResolver.resolveDependencies(DependencyResolver.java:131)
    at com.aws.greengrass.deployment.DefaultDeploymentTask.lambda$call$2(DefaultDeploymentTask.java:125)
    ... 4 more
```

Log menunjukkan bahwa nukleus tidak dapat menemukan versi ComponentA yang memenuhi persyaratan berikut.
+ Persyaratan untuk ComponentA menjadi persis versi 2.5.0 (dari ThingGroup A).
+ Persyaratan untuk bekerja dengan versi ComponentC di bawah 2.0.0.

##### Bagaimana mengatasinya
<a name="w2ab1c24c25b9c11c19b7c17"></a>
+ Jika Anda ingin menyimpan komponen di setiap grup hal, pilih versi yang sama dari komponen itu di setiap grup hal.
+ Pilih versi komponen yang memenuhi persyaratan penerapan.
+ Jika Anda ingin menggunakan versi komponen yang tidak memenuhi kedua persyaratan grup hal, pilih versi komponen yang memenuhi persyaratan versi grup benda dan gunakan komponen itu hanya di grup itu.

**Tip**  
Jika Anda melihat kesalahan ini pada komponen apa pun yang AWS disediakan, Anda dapat mengatasinya dengan memperbarui komponen yang berkonflik ke versi terbaru.

## Menghapus perangkat dari grup benda
<a name="thing-group-removal-behavior"></a>

Saat Anda menghapus perangkat inti dari grup sesuatu, perilaku penerapan komponen bergantung pada versi inti [Greengrass](greengrass-nucleus-component.md) yang dijalankan perangkat inti.

------
#### [ 2.5.1 and later ]

Saat Anda menghapus perangkat inti dari grup sesuatu, perilakunya bergantung pada apakah AWS IoT kebijakan memberikan `greengrass:ListThingGroupsForCoreDevice` izin tersebut. Untuk informasi selengkapnya tentang izin dan AWS IoT kebijakan untuk perangkat inti ini, lihat[Otentikasi dan otorisasi perangkat untuk AWS IoT Greengrass](device-auth.md).
+ **Jika AWS IoT kebijakan memberikan izin ini**

  <a name="thing-group-removal-behavior-remove-components"></a>Saat Anda menghapus perangkat inti dari grup benda, AWS IoT Greengrass hapus komponen grup benda saat penerapan dilakukan ke perangkat berikutnya. Jika komponen pada perangkat disertakan dalam penerapan berikutnya, komponen tersebut tidak dihapus dari perangkat.
+ **Jika AWS IoT kebijakan tidak memberikan izin ini**

  <a name="thing-group-removal-behavior-no-remove-components"></a>Saat Anda menghapus perangkat inti dari grup benda, AWS IoT Greengrass tidak menghapus komponen grup benda itu dari perangkat.

  <a name="thing-group-removal-behavior-no-remove-components-how-to-remove"></a>Untuk menghapus komponen dari perangkat, gunakan perintah [deployment create](gg-cli-deployment.md#deployment-create) dari CLI Greengrass. Tentukan komponen yang akan dihapus dengan argumen `--remove`, dan tentukan grup objek dengan argumen `--groupId`.

------
#### [ 2.5.0 ]

<a name="thing-group-removal-behavior-remove-components"></a>Saat Anda menghapus perangkat inti dari grup benda, AWS IoT Greengrass hapus komponen grup benda saat penerapan dilakukan ke perangkat berikutnya. Jika komponen pada perangkat disertakan dalam penerapan berikutnya, komponen tersebut tidak dihapus dari perangkat.

Perilaku ini mengharuskan AWS IoT kebijakan perangkat inti memberikan `greengrass:ListThingGroupsForCoreDevice` izin. Jika perangkat inti tidak memiliki izin ini, perangkat inti gagal menerapkan penerapan. Untuk informasi selengkapnya, lihat [Otentikasi dan otorisasi perangkat untuk AWS IoT Greengrass](device-auth.md).

------
#### [ 2.0.x - 2.4.x ]

<a name="thing-group-removal-behavior-no-remove-components"></a>Saat Anda menghapus perangkat inti dari grup benda, AWS IoT Greengrass tidak menghapus komponen grup benda itu dari perangkat.

<a name="thing-group-removal-behavior-no-remove-components-how-to-remove"></a>Untuk menghapus komponen dari perangkat, gunakan perintah [deployment create](gg-cli-deployment.md#deployment-create) dari CLI Greengrass. Tentukan komponen yang akan dihapus dengan argumen `--remove`, dan tentukan grup objek dengan argumen `--groupId`.

------

## Deployment
<a name="deployments"></a>

Deployment bersifat terus menerus. Saat Anda membuat penerapan, AWS IoT Greengrass luncurkan penerapan ke perangkat target yang sedang online. Jika perangkat target tidak online, maka ia menerima penerapan saat berikutnya terhubung AWS IoT Greengrass. Saat Anda menambahkan perangkat inti ke grup hal target, AWS IoT Greengrass kirimkan perangkat penerapan terbaru untuk grup hal itu.

Sebelum perangkat inti menyebarkan komponen, secara default akan memberi tahu setiap komponen pada perangkat. Komponen Greengrass dapat menanggapi pemberitahuan untuk menunda penerapan. Anda mungkin ingin menunda penerapan jika perangkat memiliki tingkat baterai rendah atau menjalankan proses yang tidak dapat diganggu. Untuk informasi selengkapnya, lihat [Tutorial: Mengembangkan komponen Greengrass yang menunda pembaruan komponen](defer-component-updates-tutorial.md). Saat Anda membuat penerapan, Anda dapat mengonfigurasinya untuk diterapkan tanpa memberi tahu komponen.

Setiap obje target atau grup objek dapat memiliki satu deployment pada satu waktu. Ini berarti bahwa ketika Anda membuat penerapan untuk target, AWS IoT Greengrass tidak lagi menyebarkan revisi sebelumnya dari penerapan target tersebut.

## Opsi deployment
<a name="deployment-options"></a>

Deployment menyediakan beberapa opsi yang memungkinkan Anda mengontrol perangkat mana yang menerima deployment dan cara pembaruan itu men-deploy. Saat Anda membuat deployment, Anda dapat mengonfigurasi opsi berikut:
+ **AWS IoT Greengrass komponen**

  Tentukan komponen yang akan diinstal dan dijalankan pada perangkat target. AWS IoT Greengrass komponen adalah modul perangkat lunak yang Anda terapkan dan jalankan pada perangkat inti Greengrass. Perangkat hanya menerima komponen jika komponen mendukung platform perangkat. Hal ini memungkinkan Anda men-deploy ke grup perangkat bahkan jika perangkat target itu berjalan di beberapa platform. Jika komponen tidak mendukung platform perangkat, komponen tidak di-deploy ke perangkat.

  Anda dapat menerapkan komponen khusus dan komponen AWS yang disediakan ke perangkat Anda. Saat Anda menerapkan komponen, AWS IoT Greengrass mengidentifikasi dependensi komponen apa pun dan menerapkannya juga. Untuk informasi selengkapnya, lihat [Kembangkan AWS IoT Greengrass komponen](develop-greengrass-components.md) dan [Komponen yang disediakan oleh AWS](public-components.md).

  Anda menentukan versi dan konfigurasi update untuk yag akan di-deploy untuk untuk setiap komponen. *Pembaruan konfigurasi* menentukan cara mengubah konfigurasi komponen yang ada pada perangkat inti, atau konfigurasi default komponen jika komponen itiu tidak ada pada perangkat inti. Anda dapat menentukan nilai konfigurasi yang akan di-reset ke nilai default dan nilai-nilai konfigurasi baru yang akan digabungkan ke perangkat inti. Saat perangkat inti menerima penerapan untuk target yang berbeda, dan setiap penerapan menentukan versi komponen yang kompatibel, perangkat inti menerapkan pembaruan konfigurasi secara berurutan berdasarkan stempel waktu saat Anda membuat penerapan. Untuk informasi selengkapnya, lihat [Perbarui konfigurasi komponen](update-component-configurations.md).
**penting**  <a name="component-patch-update-note"></a>
<a name="component-patch-update"></a>Saat Anda menerapkan komponen, AWS IoT Greengrass instal versi terbaru yang didukung dari semua dependensi komponen tersebut. Karena itu, versi patch baru dari komponen publik AWS yang disediakan mungkin secara otomatis diterapkan ke perangkat inti Anda jika Anda menambahkan perangkat baru ke grup sesuatu, atau Anda memperbarui penerapan yang menargetkan perangkat tersebut. Beberapa pembaruan otomatis, seperti pembaruan inti, dapat menyebabkan perangkat Anda memulai ulang secara tiba-tiba.   
<a name="component-version-pinning"></a>Untuk mencegah pembaruan yang tidak diinginkan untuk komponen yang berjalan di perangkat Anda, sebaiknya sertakan versi komponen yang Anda inginkan secara langsung saat [membuat deployment](create-deployments.md). Untuk informasi selengkapnya tentang perilaku pembaruan untuk perangkat lunak AWS IoT Greengrass Core, lihat[Perbarui perangkat lunak AWS IoT Greengrass Core (OTA)](update-greengrass-core-v2.md).
+ **Kebijakan penyebaran**

  Tentukan kapan waktu yang aman untuk menggunakan konfigurasi dan apa yang harus dilakukan jika deployment gagal. Anda dapat menentukan apakah akan menunggu atau tidak komponen melaporkan bahwa ia dapat memperbarui. Anda juga dapat menentukan apakah akan memutar kembali perangkat ke konfigurasi sebelumnya atau tidak jika ia menerapkan deployment yang gagal.
+ **Hentikan konfigurasi**

  Tentukan kapan dan bagaimana menghentikan deployment. Deployment berhenti dan gagal jika kriteria yang Anda tetapkan terpenuhi. Sebagai contoh, Anda dapat mengonfigurasi deployment untuk berhenti jika persentase perangkat gagal untuk menerapkan deployment itu setelah jumlah minimum perangkat menerimanya.
+ **Konfigurasi peluncuran**

  Tentukan tingkat di mana deployment meluncurkan ke perangkat target. Anda dapat mengonfigurasi kenaikan tingkat eksponensial dengan batas tingkat minimum dan maksimum.
+ **Konfigurasi batas waktu**

  Tentukan jumlah maksimum waktu setiap perangkat harus menerapkan deployment. Jika perangkat melebihi durasi yang Anda tentukan, maka perangkat akan gagal menerapkan deployment.

**penting**  
Komponen khusus dapat menentukan artefak dalam bucket S3. Ketika perangkat lunak AWS IoT Greengrass Core menyebarkan komponen, ia mengunduh artefak komponen dari file. AWS Cloud Peran perangkat inti tidak mengizinkan akses ke bucket S3 secara default. Untuk men-deploy komponen kustom yang menentukan artefak dalam bucket S3, peran perangkat inti harus memberikan izin untuk men-download artefak dari bucket tersebut. Lihat informasi yang lebih lengkap di [Izinkan akses ke bucket S3 untuk artefak komponen](device-service-role.md#device-service-role-access-s3-bucket).

**Topics**
+ [Penerapan perangkat inti](#core-device-deployments)
+ [Resolusi ketergantungan platform](#platform-dependency-resolution)
+ [Resolusi ketergantungan komponen](#component-dependency-resolution)
+ [Menghapus perangkat dari grup benda](#thing-group-removal-behavior)
+ [Deployment](#deployments)
+ [Opsi deployment](#deployment-options)
+ [Buat deployment](create-deployments.md)
+ [Buat subdeployments](create-subdeployments.md)
+ [Revisi deployment](revise-deployments.md)
+ [Batalkan deployment](cancel-deployments.md)
+ [Periksa status deployment](check-deployment-status.md)

# Buat deployment
<a name="create-deployments"></a>

Anda dapat membuat deployment yang menargetkan objek atau grup objek.

Ketika Anda membuat deployment, Anda mengonfigurasi komponen perangkat lunak yang akan di-deploy dan bagaimana tugas deployment keluar ke target perangkat. Anda dapat menentukan deployment dalam file JSON yang Anda berikan ke AWS CLI.

Target deployment menentukan perangkat yang Anda inginkan untuk menjalankan komponen Anda. Untuk men-deploy ke satu perangkat inti, tentukan objek. Untuk men-deploy ke beberapa perangkat inti, tentukan grup objek yang mencakup perangkat tersebut. Untuk informasi lebih lanjut tentang cara mengonfigurasi grup objek, lihat [Grup objek statis](https://docs.aws.amazon.com/iot/latest/developerguide/thing-groups.html) dan [Grup objek dinamis](https://docs.aws.amazon.com/iot/latest/developerguide/dynamic-thing-groups.html) di *Panduan Developer AWS IoT *.

Ikuti langkah-langkah di bagian ini untuk membuat penyebaran ke target. Untuk informasi selengkapnya tentang cara memperbarui komponen perangkat lunak pada target yang memiliki deployment, lihat [Revisi deployment](revise-deployments.md).

**Awas**  
[CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html)Operasi dapat menghapus komponen dari perangkat inti. Jika komponen ada di penerapan sebelumnya dan bukan penerapan baru, perangkat inti akan menghapus pemasangan komponen tersebut. Untuk menghindari mencopot pemasangan komponen, pertama-tama gunakan [ListDeployments](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListDeployments.html)operasi untuk memeriksa apakah target penerapan sudah memiliki penerapan yang ada. Kemudian, gunakan [GetDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetDeployment.html)operasi untuk memulai dari penerapan yang ada saat Anda membuat penerapan baru.

**Untuk membuat deployment (AWS CLI)**

1. Buat file bernama `deployment.json`, lalu salin objek JSON berikut ke dalam file. Ganti *targetArn* dengan ARN dari grup AWS IoT benda atau benda yang akan ditargetkan untuk penerapan. Kelompok benda dan benda ARNs memiliki format berikut:
   + Objek: `arn:aws:iot:region:account-id:thing/thingName`
   + Grup objek: `arn:aws:iot:region:account-id:thinggroup/thingGroupName`

   ```
   {
     "targetArn": "targetArn"
   }
   ```

1. Periksa apakah target penerapan memiliki penerapan yang sudah ada yang ingin Anda revisi. Lakukan hal-hal berikut:

   1. <a name="revise-deployment-list-deployments-intro"></a>Jalankan perintah berikut untuk membuat daftar penerapan untuk target penyebaran. Ganti *targetArn* dengan ARN dari AWS IoT benda target atau kelompok benda.

      ```
      aws greengrassv2 list-deployments --target-arn targetArn
      ```

      Tanggapan berisi daftar dengan deployment terbaru untuk target. Jika responsnya kosong, target tidak memiliki penerapan yang ada, dan Anda dapat melompat ke[Step 3](#create-deployment-define-name-step). Jika tidak, salin `deploymentId` dari respons untuk digunakan pada langkah berikutnya.
**catatan**  <a name="revise-deployment-list-deployments-revision-note"></a>
Anda juga dapat merevisi deployment selain revisi terbaru untuk target. Tentukan `--history-filter ALL` untuk mencantumkan semua deployment untuk target. Kemudian, salin ID penerapan yang ingin Anda revisi.

   1. <a name="revise-deployment-get-deployment"></a>Jalankan perintah berikut untuk mendapatkan detail penerapan. Detail ini mencakup metadata, komponen, dan konfigurasi pekerjaan. Ganti *deploymentId* dengan ID dari langkah sebelumnya.

      ```
      aws greengrassv2 get-deployment --deployment-id deploymentId
      ```

      Tanggapan berisi detail deployment.

   1. Salin salah satu pasangan kunci-nilai berikut dari respons perintah sebelumnya ke dalam. `deployment.json` Anda dapat mengubah nilai-nilai ini untuk penerapan baru.
      + `deploymentName`— Nama penyebaran.
      + `components`— Komponen penyebaran. Untuk menghapus komponen, hapus dari objek ini.
      + `deploymentPolicies`— Kebijakan penyebaran.
      + `iotJobConfiguration`— Konfigurasi pekerjaan penerapan.
      + `tags`— Tag penyebaran.

1. <a name="create-deployment-define-name-step"></a>(Opsional) Tentukan nama untuk penerapan. Ganti *deploymentName* dengan nama penyebaran.

   ```
   {
     "targetArn": "targetArn",
     "deploymentName": "deploymentName"
   }
   ```

1. Tambahkan setiap komponen untuk men-deploy perangkat target. Untuk melakukannya, tambahkan pasangan nilai kunci ke objek `components`, di mana kunci adalah nama komponen, dan nilai adalah objek yang berisi detail untuk komponen tersebut. Tentukan detail berikut untuk setiap komponen yang Anda tambahkan:
   + `version` — Versi komponen yang akan di-deploy.
   + `configurationUpdate` — [Pembaruan konfigurasi](update-component-configurations.md) yang akan di-deploy. Pembaruan adalah operasi patch yang memodifikasi konfigurasi komponen yang ada pada setiap perangkat target, atau konfigurasi default komponen jika tidak ada pada perangkat target. Anda dapat menentukan pembaruan konfigurasi berikut:
     + Pembaruan reset (`reset`) — (Opsional) Daftar pointer JSON yang menentukan nilai konfigurasi untuk di-reset ke nilai default-nya pada perangkat target. Perangkat lunak AWS IoT Greengrass Core menerapkan pembaruan reset sebelum menerapkan pembaruan gabungan. Untuk informasi selengkapnya, lihat [Pembaruan reset](update-component-configurations.md#reset-configuration-update).
     + Pembaruan merge (`merge`) - (Opsional) Sebuah dokumen JSON yang menentukan nilai konfigurasi yang akan digabungkan ke perangkat target. Anda harus membuat serial dokumen JSON sebagai string. Untuk informasi selengkapnya, lihat [Pembaruan merge](update-component-configurations.md#merge-configuration-update).
   + <a name="component-run-with-config"></a>`runWith`— (Opsional) Opsi proses sistem yang digunakan perangkat lunak AWS IoT Greengrass Core untuk menjalankan proses komponen ini pada perangkat inti. Jika Anda menghilangkan parameter dalam `runWith` objek, perangkat lunak AWS IoT Greengrass Core menggunakan nilai default yang Anda konfigurasikan pada komponen inti [Greengrass](greengrass-nucleus-component.md).

     Anda dapat menentukan salah satu opsi berikut:
     + `posixUser`— Pengguna sistem POSIX dan, secara opsional, kelompok untuk digunakan untuk menjalankan komponen ini pada perangkat inti Linux. Pengguna, dan grup jika ditentukan, harus ada di setiap perangkat inti Linux. Tentukan pengguna dan grup yang dipisahkan dengan titik dua (`:`) dalam format berikut: `user:group`. Grup ini opsional. Jika Anda tidak menentukan grup, perangkat lunak AWS IoT Greengrass Core menggunakan grup utama untuk pengguna. Untuk informasi selengkapnya, lihat [Konfigurasikan pengguna yang menjalankan komponen](configure-greengrass-core-v2.md#configure-component-user).
     + `windowsUser`— Pengguna Windows yang digunakan untuk menjalankan komponen ini pada perangkat inti Windows. Pengguna harus ada di setiap perangkat inti Windows, dan nama serta kata sandinya harus disimpan dalam instance Credentials Manager LocalSystem akun. Untuk informasi selengkapnya, lihat [Konfigurasikan pengguna yang menjalankan komponen](configure-greengrass-core-v2.md#configure-component-user).

       [Fitur ini tersedia untuk v2.5.0 dan yang lebih baru dari komponen inti Greengrass.](greengrass-nucleus-component.md)
     + `systemResourceLimits`— Batas sumber daya sistem untuk diterapkan pada proses komponen ini. Anda dapat menerapkan batas sumber daya sistem ke komponen Lambda generik dan non-kontainer. Untuk informasi selengkapnya, lihat [Konfigurasikan batas sumber daya sistem untuk komponen](configure-greengrass-core-v2.md#configure-component-system-resource-limits).

       Anda dapat menentukan salah satu opsi berikut:
       + `cpus`— <a name="system-resource-limits-cpu-definition-this"></a>Jumlah maksimum waktu CPU yang dapat digunakan oleh proses komponen ini pada perangkat inti. Total waktu CPU perangkat inti setara dengan jumlah inti CPU perangkat. Misalnya, pada perangkat inti dengan 4 core CPU, Anda dapat mengatur nilai ini `2` untuk membatasi proses komponen ini hingga 50 persen penggunaan setiap inti CPU. Pada perangkat dengan 1 inti CPU, Anda dapat mengatur nilai ini `0.25` untuk membatasi proses komponen ini hingga 25 persen penggunaan CPU. Jika Anda menetapkan nilai ini ke angka yang lebih besar dari jumlah inti CPU, perangkat lunak AWS IoT Greengrass Core tidak membatasi penggunaan CPU komponen. 
       + `memory`— <a name="system-resource-limits-memory-definition-this"></a>Jumlah maksimum RAM (dalam kilobyte) yang dapat digunakan oleh proses komponen ini pada perangkat inti. 

       [Fitur ini tersedia untuk v2.4.0 dan yang lebih baru dari komponen inti Greengrass.](greengrass-nucleus-component.md) AWS IoT Greengrass saat ini tidak mendukung fitur ini di perangkat inti Windows. 

      
**Example Contoh pembaruan konfigurasi dasar**  

   Obejk `components` contoh berikut menentukan untuk men-deploy komponen, `com.example.PythonRuntime`, yang mengharapkan parameter konfigurasi bernama `pythonVersion`.

   ```
   {
     "targetArn": "targetArn",
     "deploymentName": "deploymentName",
     "components": {
       "com.example.PythonRuntime": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "merge": "{\"pythonVersion\":\"3.7\"}"
         }
       }
     }
   }
   ```  
**Example Contoh pembaruan konfigurasi dengan pembaruan reset dan merge**  

   Pertimbangkan komponen contoh dasbor industri, `com.example.IndustrialDashboard`, yang memiliki konfigurasi default berikut.

   ```
   {
     "name": null,
     "mode": "REQUEST",
     "network": {
       "useHttps": true,
       "port": {
         "http": 80,
         "https": 443
       },
     },
     "tags": []
   }
   ```

   Pembaruan konfigurasi berikut menentukan petunjuk berikut:

   1. Reset pengaturan HTTPS ke nilai default (`true`).

   1. Setel ulang daftar tag industri ke daftar kosong.

   1. Gabungkan daftar tag industri yang mengidentifikasi aliran data suhu dan tekanan untuk dua boiler.

   ```
   {
     "reset": [
       "/network/useHttps",
       "/tags"
     ],
     "merge": {
       "tags": [
         "/boiler/1/temperature",
         "/boiler/1/pressure",
         "/boiler/2/temperature",
         "/boiler/2/pressure"
       ]
     }
   }
   ```

   Contoh objek `components` berikut menentukan untuk men-deploy komponen dasbor industri ini dan pembaruan konfigurasi.

   ```
   {
     "targetArn": "targetArn",
     "deploymentName": "deploymentName",
     "components": {
       "com.example.IndustrialDashboard": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "reset": [
             "/network/useHttps",
             "/tags"
           ],
           "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
         }
       }
     }
   }
   ```

1. (Opsional) Tentukan kebijakan deployment untuk deployment ini. Anda dapat mengonfigurasi ketika perangkat inti dapat dengan aman menerapkan deployment atau apa yang harus dilakukan jika perangkat inti gagal untuk menerapkan deployment tersebut. Untuk melakukannya, tambahkan objek `deploymentPolicies` pada `deployment.json`, lalu lakukan langkah-langkah berikut:

   1. (Opsional) Tentukan kebijakan pembaruan komponen (`componentUpdatePolicy`). Kebijakan ini menentukan apakah deployment memungkinkan komponen menunda pembaruan sampai siap untuk diperbarui. Sebagai contoh, komponen mungkin perlu membersihkan sumber daya atau menyelesaikan tindakan penting sebelum dapat di-restart untuk menerapkan pembaruan. Kebijakan ini juga menentukan jumlah waktu yang harus ditanggapi komponen pada pemberitahuan pembaruan.

      Kebijakan ini merupakan objek dengan parameter berikut:
      + `action` — (Opsional) Apakah akan memberi tahu komponen atau tidak dan menunggunya melaporkan kapan ia siap untuk diperbarui. Pilih dari salah satu pilihan berikut:
        + `NOTIFY_COMPONENTS` – Deployment akan memberitahu setiap komponen sebelum menghentikan dan memperbarui komponen itu. Komponen dapat menggunakan operasi IPC [SubscribeToComponentUpdates](ipc-component-lifecycle.md#ipc-operation-subscribetocomponentupdates) untuk menerima pemberitahuan ini.
        + `SKIP_NOTIFY_COMPONENTS` – Deployment tidak memberitahu komponen atau menunggunya sampai aman untuk diperbarui.

        Default ke `NOTIFY_COMPONENTS`.
      + `timeoutInSeconds` Jumlah waktu, dalam hitungan detik, ketika setiap komponen merespons notifikasi pembaruan dengan perintah operasi IPC [DeferComponentUpdate](ipc-component-lifecycle.md#ipc-operation-defercomponentupdate). Jika komponen tidak merespons dalam jumlah waktu ini, maka deployment akan berlangsung pada perangkat inti.

        Default ke 60 detik.

   1. (Opsional) Tentukan kebijakan validasi konfigurasi (`configurationValidationPolicy`). Kebijakan ini menentukan berapa lama setiap komponen harus memvalidasi pembaruan konfigurasi dari suatu deployment. Komponen dapat menggunakan operasi IPC [SubscribeToValidateConfigurationUpdates](ipc-component-configuration.md#ipc-operation-subscribetovalidateconfigurationupdates) untuk berlangganan pemberitahuan untuk pembaruan konfigurasinya sendiri. Kemudian, komponen dapat menggunakan operasi [SendConfigurationValidityReport](ipc-component-configuration.md#ipc-operation-sendconfigurationvalidityreport) IPC untuk memberi tahu perangkat lunak AWS IoT Greengrass Core jika pembaruan konfigurasi valid. Jika pembaruan konfigurasi tidak valid, deployment akan gagal.

      Kebijakan ini merupakan objek dengan parameter berikut:
      + `timeoutInSeconds` (Opsional) Jumlah waktu, dalam hitungan detik, ketika setiap komponen harus memvalidasi pembaruan konfigurasi. Jika komponen tidak merespons dalam jumlah waktu ini, maka deployment akan berlangsung pada perangkat inti.

        Default ke 30 detik.

   1. (Opsional) Tentukan kebijakan penanganan kegagalan (`failureHandlingPolicy`). Kebijakan ini adalah string yang menentukan apakah akan memutar kembali perangkat atau tidak jika deployment tersebut gagal. Pilih dari salah satu pilihan berikut:
      + `ROLLBACK`— Jika penerapan gagal pada perangkat inti, maka perangkat lunak AWS IoT Greengrass Core memutar kembali perangkat inti itu ke konfigurasi sebelumnya.
      + `DO_NOTHING`— Jika penerapan gagal pada perangkat inti, maka perangkat lunak AWS IoT Greengrass Core menyimpan konfigurasi baru. Hal ini dapat mengakibatkan komponen rusak jika konfigurasi baru tidak valid.

      Default ke `ROLLBACK`.

   Deployment Anda di `deployment.json` mungkin terlihat serupa dengan contoh berikut:

   ```
   {
     "targetArn": "targetArn",
     "deploymentName": "deploymentName",
     "components": {
       "com.example.IndustrialDashboard": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "reset": [
             "/network/useHttps",
             "/tags"
           ],
           "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
         }
       }
     },
     "deploymentPolicies": {
       "componentUpdatePolicy": {
         "action": "NOTIFY_COMPONENTS",
         "timeoutInSeconds": 30
       },
       "configurationValidationPolicy": {
         "timeoutInSeconds": 60
       },
       "failureHandlingPolicy": "ROLLBACK"
     }
   }
   ```

1. (Opsional) Tentukan bagaimana penerapan berhenti, diluncurkan, atau habis waktu. AWS IoT Greengrass menggunakan AWS IoT Core pekerjaan untuk mengirim penerapan ke perangkat inti, sehingga opsi ini identik dengan opsi konfigurasi untuk AWS IoT Core pekerjaan. Untuk informasi selengkapnya, lihat [Peluncuran tugas dan batalkan konfigurasi](https://docs.aws.amazon.com/iot/latest/developerguide/job-rollout-abort.html) di *Panduan Developer AWS IoT *.

   Untuk menentukan pilihan tugas, tambahkan objek `iotJobConfiguration` pada `deployment.json`. Kemudian, tentukan pilihan yang akan dikonfigurasi.

   Deployment Anda di `deployment.json` mungkin terlihat serupa dengan contoh berikut:

   ```
   {
     "targetArn": "targetArn",
     "deploymentName": "deploymentName",
     "components": {
       "com.example.IndustrialDashboard": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "reset": [
             "/network/useHttps",
             "/tags"
           ],
           "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
         }
       }
     },
     "deploymentPolicies": {
       "componentUpdatePolicy": {
         "action": "NOTIFY_COMPONENTS",
         "timeoutInSeconds": 30
       },
       "configurationValidationPolicy": {
         "timeoutInSeconds": 60
       },
       "failureHandlingPolicy": "ROLLBACK"
     },
     "iotJobConfiguration": {
       "abortConfig": {
         "criteriaList": [
           {
             "action": "CANCEL",
             "failureType": "ALL",
             "minNumberOfExecutedThings": 100,
             "thresholdPercentage": 5
           }
         ]
       },
       "jobExecutionsRolloutConfig": {
         "exponentialRate": {
           "baseRatePerMinute": 5,
           "incrementFactor": 2,
           "rateIncreaseCriteria": {
             "numberOfNotifiedThings": 10,
             "numberOfSucceededThings": 5
           }
         },
         "maximumPerMinute": 50
       },
       "timeoutConfig":  {
         "inProgressTimeoutInMinutes": 5
       }
     }
   }
   ```

1. (Opsional) Tambahkan tag (`tags`) untuk deployment itu. Untuk informasi selengkapnya, lihat [Tandai AWS IoT Greengrass Version 2 sumber daya Anda](tag-resources.md).

1. Jalankan perintah berikut untuk membuat deployment dari `deployment.json`.

   ```
   aws greengrassv2 create-deployment --cli-input-json file://deployment.json
   ```

   <a name="check-new-deployment-status"></a>Tanggapan meliputi `deploymentId` yang menentukan deployment ini. Anda dapat menggunakan ID deployment untuk memeriksa status deployment. Untuk informasi selengkapnya, lihat [Periksa status deployment](check-deployment-status.md#check-cloud-deployment-status).

# Perbarui konfigurasi komponen
<a name="update-component-configurations"></a>

Konfigurasi komponen adalah objek JSON yang menentukan parameter untuk setiap komponen. Resep setiap komponen menentukan konfigurasi default, yang Anda ubah ketika Anda men-deploy komponen ke perangkat inti.

Bila Anda membuat deployment, Anda dapat menentukan *pembaruan konfigurasi* yang akan diterapkan bagi setiap komponen. Pembaruan konfigurasi adalah operasi patch, yang berarti bahwa pembaruan mengubah konfigurasi komponen yang ada pada perangkat inti. Jika perangkat inti tidak memiliki komponen, maka pembaruan konfigurasi akan memodifikasi dan menerapkan konfigurasi default untuk deployment tersebut.

Pembaruan konfigurasi menentukan pembaruan *reset* dan pembaruan *merge*. Pembaruan reset menentukan nilai konfigurasi yang akan di-reset ke default-nya atau dihapus. Pembaruan merge menentukan nilai konfigurasi baru yang akan ditetapkan untuk komponen. Saat Anda menerapkan pembaruan konfigurasi, perangkat lunak AWS IoT Greengrass Core menjalankan pembaruan reset sebelum pembaruan gabungan.

Komponen dapat memvalidasi pembaruan konfigurasi yang Anda deploy. Komponen berlangganan untuk menerima pemberitahuan ketika deployment mengubah konfigurasi, dan dapat menolak konfigurasi yang tidak mendukung. Untuk informasi selengkapnya, lihat [Berinteraksilah dengan konfigurasi komponen](ipc-component-configuration.md).

**Topics**
+ [Pembaruan reset](#reset-configuration-update)
+ [Pembaruan merge](#merge-configuration-update)
+ [Contoh](#configuration-update-example)

## Pembaruan reset
<a name="reset-configuration-update"></a>

Pembaruan reset menentukan nilai konfigurasi yang akan di-reset ke default-nya pada perangkat inti. Jika nilai konfigurasi tidak memiliki nilai default, maka pembaruan reset akan menghapus nilai dari konfigurasi komponen. Hal ini dapat membantu Anda memperbaiki komponen yang rusak sebagai hasil dari konfigurasi yang tidak valid.

Gunakan daftar pointer JSON untuk menentukan nilai konfigurasi yang akan di-reset. Pointer JSON dimulai dengan garis miring `/`. Untuk menentukan nilai dalam konfigurasi komponen bersusun, gunakan garis miring ke depan (`/`) untuk memisahkan kunci-kunci pada setiap tingkat dalam konfigurasi. Untuk informasi selengkapnya, lihat [spesifikasi pointer JSON](https://tools.ietf.org/html/rfc6901).

**catatan**  
Anda hanya dapat mengatur ulang seluruh daftar ke nilai default. Anda tidak dapat menggunakan pembaruan reset untuk mengatur ulang elemen individual dalam daftar. 

Untuk me-reset seluruh konfigurasi komponen untuk nilai default, tentukan string kosong tunggal sebagai pembaruan reset.

```
"reset": [""]
```

## Pembaruan merge
<a name="merge-configuration-update"></a>

Pembaruan merge menentukan nilai konfigurasi yang akan dimasukkan ke konfigurasi komponen pada inti. Pembaruan gabungan adalah objek JSON yang digabungkan oleh perangkat lunak AWS IoT Greengrass Core setelah menyetel ulang nilai di jalur yang Anda tentukan dalam pembaruan reset. Bila Anda menggunakan AWS CLI or AWS SDKs, Anda harus membuat serial objek JSON ini sebagai string.

Anda dapat menggabungkan pasangan kunci-nilai yang tidak ada dalam konfigurasi default komponen. Anda juga dapat menggabungkan pasangan kunci-nilai yang memiliki jenis yang berbeda dari nilai dengan kunci yang sama. Nilai baru akan menggantikan nilai lama. Ini berarti bahwa Anda dapat mengubah struktur objek konfigurasi.

Anda dapat menggabungkan nilai-nilai null dan string, daftar, dan objek kosong.

**catatan**  
Anda tidak dapat menggunakan pembaruan merge untuk tujuan memasukkan atau menambahkan elemen ke daftar. Anda dapat mengganti seluruh daftar, atau Anda dapat menentukan objek di mana setiap elemen memiliki kunci yang unik.  
<a name="configuration-value-type-note"></a>AWS IoT Greengrass menggunakan JSON untuk nilai konfigurasi. JSON menentukan jenis nomor tetapi tidak membedakan antara bilangan bulat dan float. Akibatnya, nilai konfigurasi mungkin berubah menjadi float di AWS IoT Greengrass. Untuk memastikan bahwa komponen Anda menggunakan jenis data yang benar, kami sarankan Anda menentukan nilai konfigurasi numerik sebagai string. Kemudian, buat komponen Anda mengurainya sebagai bilangan bulat atau float. Hal ini akan memastikan bahwa nilai konfigurasi Anda memiliki jenis yang sama dalam konfigurasi dan pada perangkat inti Anda.

### Gunakan variabel resep dalam menggabungkan pembaruan
<a name="merge-configuration-update-recipe-variables"></a>

[Fitur ini tersedia untuk v2.6.0 dan yang lebih baru dari komponen inti Greengrass.](greengrass-nucleus-component.md)

Jika Anda menyetel opsi konfigurasi [interpolateComponentConfiguration](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-interpolate-component-configuration)inti Greengrass `true` ke, Anda dapat menggunakan variabel resep, selain `component_dependency_name:configuration:json_pointer` variabel resep, dalam pembaruan gabungan. Misalnya, Anda dapat menggunakan variabel `{iot:thingName}` resep dalam pembaruan gabungan untuk menyertakan nama AWS IoT benda perangkat inti dalam nilai konfigurasi komponen, seperti kebijakan otorisasi [komunikasi antarproses (IPC)](interprocess-communication.md#ipc-authorization-policies).

## Contoh
<a name="configuration-update-example"></a>

Contoh berikut menunjukkan pembaruan konfigurasi untuk komponen dasbor yang memiliki konfigurasi default berikut. Contoh komponen ini menampilkan informasi tentang peralatan industri.

```
{
  "name": null,
  "mode": "REQUEST",
  "network": {
    "useHttps": true,
    "port": {
      "http": 80,
      "https": 443
    },
  },
  "tags": []
}
```

### Resep komponen dasbor industri
<a name="w2ab1c24c25c22c16c17b7b1"></a>

------
#### [ JSON ]

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.IndustrialDashboard",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "Displays information about industrial equipment.",
  "ComponentPublisher": "Amazon",
  "ComponentConfiguration": {
    "DefaultConfiguration": {
      "name": null,
      "mode": "REQUEST",
      "network": {
        "useHttps": true,
        "port": {
          "http": 80,
          "https": 443
        },
      },
      "tags": []
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux"
      },
      "Lifecycle": {
        "Run": "python3 -u {artifacts:path}/industrial_dashboard.py"
      }
    },
    {
      "Platform": {
        "os": "windows"
      },
      "Lifecycle": {
        "Run": "py -3 -u {artifacts:path}/industrial_dashboard.py"
      }
    }
  ]
}
```

------
#### [ YAML ]

```
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.IndustrialDashboard
ComponentVersion: '1.0.0'
ComponentDescription: Displays information about industrial equipment.
ComponentPublisher: Amazon
ComponentConfiguration:
  DefaultConfiguration:
    name: null
    mode: REQUEST
    network:
      useHttps: true
      port:
        http: 80
        https: 443
    tags: []
Manifests:
  - Platform:
      os: linux
    Lifecycle:
      Run: |
        python3 -u {artifacts:path}/industrial_dashboard.py
  - Platform:
      os: windows
    Lifecycle:
      Run: |
        py -3 -u {artifacts:path}/industrial_dashboard.py
```

------

**Example Contoh 1: Gabungkan pembaruan**  
Anda membuat penerapan yang menerapkan pemutakhiran konfigurasi berikut, yang menentukan pembaruan gabungan tetapi bukan pembaruan reset. Pembaruan konfigurasi ini memberi tahu komponen untuk menampilkan dasbor pada port HTTP 8080 dengan data dari dua boiler.    
**Konfigurasi untuk digabungkan**  

```
{
  "name": "Factory 2A",
  "network": {
    "useHttps": false,
    "port": {
      "http": 8080
    }
  },
  "tags": [
    "/boiler/1/temperature",
    "/boiler/1/pressure",
    "/boiler/2/temperature",
    "/boiler/2/pressure"
  ]
}
```
Perintah berikut membuat penyebaran ke perangkat inti.  

```
aws greengrassv2 create-deployment --cli-input-json file://dashboard-deployment.json
```
`dashboard-deployment.json`File tersebut berisi dokumen JSON berikut.  

```
{
  "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
  "deploymentName": "Deployment for MyGreengrassCore",
  "components": {
    "com.example.IndustrialDashboard": {
      "componentVersion": "1.0.0",
      "configurationUpdate": {
        "merge": "{\"name\":\"Factory 2A\",\"network\":{\"useHttps\":false,\"port\":{\"http\":8080}},\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
      }
    }
  }
}
```
Perintah [Greengrass CLI](greengrass-cli-component.md) berikut membuat penerapan lokal pada perangkat inti.  

```
sudo greengrass-cli deployment create \
  --recipeDir recipes \
  --artifactDir artifacts \
  --merge "com.example.IndustrialDashboard=1.0.0" \
  --update-config dashboard-configuration.json
```
`dashboard-configuration.json`File tersebut berisi dokumen JSON berikut.  

```
{
  "com.example.IndustrialDashboard": {
    "MERGE": {
      "name": "Factory 2A",
      "network": {
        "useHttps": false,
        "port": {
          "http": 8080
        }
      },
      "tags": [
        "/boiler/1/temperature",
        "/boiler/1/pressure",
        "/boiler/2/temperature",
        "/boiler/2/pressure"
      ]
    }
  }
}
```
Setelah pembaruan ini, komponen dasbor akan memiliki konfigurasi berikut.  

```
{
  "name": "Factory 2A",
  "mode": "REQUEST",
  "network": {
    "useHttps": false,
    "port": {
      "http": 8080,
      "https": 443
    }
  },
  "tags": [
    "/boiler/1/temperature",
    "/boiler/1/pressure",
    "/boiler/2/temperature",
    "/boiler/2/pressure"
  ]
}
```

**Example Contoh 2: Setel ulang dan gabungkan pembaruan**  
Kemudian, Anda membuat penerapan yang menerapkan pemutakhiran konfigurasi berikut, yang menentukan pembaruan reset dan pembaruan gabungan. Pembaruan ini menentukan untuk menampilkan dasbor pada port HTTPS default dengan data dari boiler yang berbeda. Pembaruan ini mengubah konfigurasi yang dihasilkan dari pembaruan konfigurasi pada contoh sebelumnya.    
**Setel ulang jalur**  

```
[
  "/network/useHttps",
  "/tags"
]
```  
**Konfigurasi untuk digabungkan**  

```
{
  "tags": [
    "/boiler/3/temperature",
    "/boiler/3/pressure",
    "/boiler/4/temperature",
    "/boiler/4/pressure"
  ]
}
```
Perintah berikut membuat penyebaran ke perangkat inti.  

```
aws greengrassv2 create-deployment --cli-input-json file://dashboard-deployment2.json
```
`dashboard-deployment2.json`File tersebut berisi dokumen JSON berikut.  

```
{
  "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
  "deploymentName": "Deployment for MyGreengrassCore",
  "components": {
    "com.example.IndustrialDashboard": {
      "componentVersion": "1.0.0",
      "configurationUpdate": {
        "reset": [
          "/network/useHttps",
          "/tags"
        ],
        "merge": "{\"tags\":[\"/boiler/3/temperature\",\"/boiler/3/pressure\",\"/boiler/4/temperature\",\"/boiler/4/pressure\"]}"
      }
    }
  }
}
```
Perintah [Greengrass CLI](greengrass-cli-component.md) berikut membuat penerapan lokal pada perangkat inti.  

```
sudo greengrass-cli deployment create \
  --recipeDir recipes \
  --artifactDir artifacts \
  --merge "com.example.IndustrialDashboard=1.0.0" \
  --update-config dashboard-configuration2.json
```
`dashboard-configuration2.json`File tersebut berisi dokumen JSON berikut.  

```
{
  "com.example.IndustrialDashboard": {
    "RESET": [
      "/network/useHttps",
      "/tags"
    ],
    "MERGE": {
      "tags": [
        "/boiler/3/temperature",
        "/boiler/3/pressure",
        "/boiler/4/temperature",
        "/boiler/4/pressure"
      ]
    }
  }
}
```
Setelah pembaruan ini, komponen dasbor akan memiliki konfigurasi berikut.  

```
{
  "name": "Factory 2A",
  "mode": "REQUEST",
  "network": {
    "useHttps": true,
    "port": {
      "http": 8080,
      "https": 443
    }
  },
  "tags": [
    "/boiler/3/temperature",
    "/boiler/3/pressure",
    "/boiler/4/temperature",
    "/boiler/4/pressure",
  ]
}
```

# Buat subdeployments
<a name="create-subdeployments"></a>

**catatan**  
Fitur subdeployment tersedia di Greengrass nucleus versi 2.9.0 dan yang lebih baru. Tidak mungkin untuk menerapkan konfigurasi ke subdeployment dengan versi komponen inti Greengrass sebelumnya.

Subdeployment adalah penerapan yang menargetkan subset perangkat yang lebih kecil dalam penerapan induk. Anda dapat menggunakan subdeployments untuk menerapkan konfigurasi ke subset perangkat yang lebih kecil. Anda juga dapat membuat subdeployment untuk mencoba kembali penerapan induk yang gagal ketika satu atau beberapa perangkat dalam penerapan induk tersebut gagal. Dengan fitur ini, Anda dapat memilih perangkat yang gagal dalam penerapan induk tersebut dan membuat subdeployment untuk menguji konfigurasi hingga subdeployment berhasil. Setelah subdeployment berhasil, Anda dapat menerapkan ulang konfigurasi tersebut ke penerapan induk.

Ikuti langkah-langkah di bagian ini untuk membuat subdeployment dan memeriksa statusnya. Untuk informasi selengkapnya tentang cara membuat penerapan, lihat [Membuat](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-deployments.html) penerapan.

**Untuk membuat subdeployment ()AWS CLI**

1. <a name="create-subdeployments-step1"></a>Jalankan perintah berikut untuk mengambil penerapan terbaru untuk grup sesuatu. Ganti ARN dalam perintah tersebut dengan ARN dari grup objek untuk kueri. Setel `--history-filter` **LATEST\$1ONLY** untuk melihat penerapan terbaru dari grup benda itu.

   ```
   aws greengrassv2 list-deployments --target-arn arn:aws:iot:region:account-id:thinggroup/thingGroupName --history-filter LATEST_ONLY
   ```

1. Salin `deploymentId` dari respons ke **list-deployments** perintah untuk digunakan pada langkah berikutnya.

1. Jalankan perintah berikut untuk mengambil status deployment. Ganti `deploymentId` dengan ID penyebaran untuk kueri.

   ```
   aws greengrassv2 get-deployment --deployment-id deploymentId
   ```

1. Salin `iotJobId` dari respons ke **get-deployment** perintah yang akan digunakan pada langkah berikut.

1. Jalankan perintah berikut untuk mengambil daftar eksekusi pekerjaan untuk pekerjaan yang ditentukan. Ganti *jobID* dengan `iotJobId` dari langkah sebelumnya. Ganti *status* dengan status yang ingin Anda filter. Anda dapat memfilter hasil dengan status berikut:
   + `QUEUED`
   + `IN_PROGRESS`
   + `SUCCEEDED`
   + `FAILED`
   + `TIMED_OUT`
   + `REJECTED`
   + `REMOVED`
   + `CANCELED`

   ```
   aws iot list-job-executions-for-job --job-id jobID --status status
   ```

1. Buat grup AWS IoT hal baru, atau gunakan grup hal yang sudah ada, untuk subdeployment Anda. Kemudian, tambahkan AWS IoT sesuatu ke grup benda ini. Anda menggunakan grup objek untuk mengelola armada perangkat inti Greengrass. Saat menerapkan komponen perangkat lunak ke perangkat, Anda dapat menargetkan perangkat individual atau grup perangkat. Anda dapat menambahkan perangkat ke grup benda dengan penerapan Greengrass aktif. Setelah ditambahkan, Anda kemudian dapat menyebarkan komponen perangkat lunak grup benda itu ke perangkat itu.

   Untuk membuat grup hal baru dan menambahkan perangkat Anda ke dalamnya, lakukan hal berikut:

   1. Buat grup AWS IoT hal. Ganti *MyGreengrassCoreGroup* dengan nama untuk grup hal baru. Anda tidak dapat menggunakan titik dua (:) dalam nama grup benda.
**catatan**  
Jika grup benda untuk subdeployment digunakan dengan satu`parentTargetArn`, itu tidak dapat digunakan kembali dengan armada induk yang berbeda. Jika grup sesuatu telah digunakan untuk membuat subdeployment untuk armada lain, API akan mengembalikan kesalahan.

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      Jika permintaan berhasil, responsnya terlihat mirip dengan contoh berikut:

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1. Tambahkan inti Greengrass yang disediakan ke grup hal Anda. Jalankan perintah berikut dengan parameter ini:
      + Ganti *MyGreengrassCore* dengan nama inti Greengrass yang Anda sediakan.
      + Ganti *MyGreengrassCoreGroup* dengan nama grup barang Anda.

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      Perintah tersebut tidak memiliki output apa pun jika permintaan berhasil.

1. Buat file bernama `deployment.json`, lalu salin objek JSON berikut ke dalam file. Ganti *targetArn* dengan ARN dari grup AWS IoT benda yang akan ditargetkan untuk subdeployment. Target subdeployment hanya bisa berupa grup benda. Thing group ARNs memiliki format berikut:
   + **Kelompok hal** — `arn:aws:iot:region:account-id:thinggroup/thingGroupName`

   ```
   {
     "targetArn": "targetArn"
   }
   ```

1. Jalankan perintah berikut lagi untuk mendapatkan detail penerapan asli. Detail ini mencakup metadata, komponen, dan konfigurasi pekerjaan. Ganti *deploymentId* dengan ID dari[Step 1](#create-subdeployments-step1). Anda dapat menggunakan konfigurasi penerapan ini untuk mengonfigurasi subdeployment dan membuat perubahan sesuai kebutuhan.

   ```
   aws greengrassv2 get-deployment --deployment-id deploymentId
   ```

   Tanggapan berisi detail deployment. Salin salah satu pasangan kunci-nilai berikut dari respons **get-deployment** perintah ke dalam. `deployment.json` Anda dapat mengubah nilai-nilai ini untuk subdeployment. Untuk informasi selengkapnya tentang detail perintah ini, lihat [GetDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetDeployment.html).
   + `components`— Komponen penyebaran. Untuk menghapus komponen, hapus dari objek ini.
   + `deploymentName`— Nama penyebaran.
   + `deploymentPolicies`— Kebijakan penyebaran.
   + `iotJobConfiguration`— Konfigurasi pekerjaan penerapan.
   + `parentTargetArn`— Target penyebaran induk.
   + `tags`— Tag penyebaran.

1. Jalankan perintah berikut untuk membuat subdeployment dari. `deployment.json` Ganti *subdeploymentName* dengan nama untuk subdeployment.

   ```
   aws greengrassv2 create-deployment --deployment-name subdeploymentName --cli-input-json file://deployment.json
   ```

   Responsnya mencakup a `deploymentId` yang mengidentifikasi subdeployment ini. Anda dapat menggunakan ID deployment untuk memeriksa status deployment. Untuk informasi selengkapnya, lihat [Memeriksa status penerapan](https://docs.aws.amazon.com/greengrass/v2/developerguide/check-deployment-status.html#check-cloud-deployment-status).

1. Jika subdeployment berhasil, Anda dapat menggunakan konfigurasinya untuk merevisi penerapan induk. Salin `deployment.json` yang Anda gunakan pada langkah sebelumnya. Ganti `targetArn` dalam file JSON dengan ARN penerapan induk dan jalankan perintah berikut untuk membuat penyebaran induk menggunakan konfigurasi baru ini.
**catatan**  
Jika Anda membuat revisi penerapan baru dari armada induk, ini akan menggantikan semua revisi penerapan dan subdeployment untuk penerapan induk tersebut. Untuk informasi selengkapnya, lihat [Merevisi penerapan](https://docs.aws.amazon.com/greengrass/v2/developerguide/revise-deployments.html).

   ```
   aws greengrassv2 create-deployment --cli-input-json file://deployment.json
   ```

   <a name="check-new-deployment-status"></a>Tanggapan meliputi `deploymentId` yang menentukan deployment ini. Anda dapat menggunakan ID deployment untuk memeriksa status deployment. Untuk informasi selengkapnya, lihat [Periksa status deployment](check-deployment-status.md#check-cloud-deployment-status).

# Revisi deployment
<a name="revise-deployments"></a>

Setiap objek target atau grup objek dapat memiliki satu deployment pada satu waktu. Ketika Anda membuat deployment untuk target yang sudah memiliki deployment, komponen perangkat lunak dalam deployment baru akan menggantikan komponen dari deployment sebelumnya. Jika penerapan baru tidak menentukan komponen yang ditentukan oleh penerapan sebelumnya, perangkat lunak AWS IoT Greengrass Core akan menghapus komponen tersebut dari perangkat inti target. Anda dapat merevisi deployment yang ada sehingga Anda tidak menghapus komponen yang berjalan di perangkat inti dari deployment sebelumnya ke target.

Untuk merevisi penerapan, Anda membuat penerapan yang dimulai dari komponen dan konfigurasi yang sama yang ada di penerapan sebelumnya. Anda menggunakan [CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html)operasi, yang merupakan operasi yang sama yang Anda gunakan untuk [membuat penerapan](create-deployments.md).

**Untuk merevisi deployment (AWS CLI)**

1. <a name="revise-deployment-list-deployments-intro"></a>Jalankan perintah berikut untuk membuat daftar penerapan untuk target penyebaran. Ganti *targetArn* dengan ARN dari AWS IoT benda target atau kelompok benda.

   ```
   aws greengrassv2 list-deployments --target-arn targetArn
   ```

   Tanggapan berisi daftar dengan deployment terbaru untuk target. Salin `deploymentId` dari respons untuk digunakan di langkah berikutnya.
**catatan**  <a name="revise-deployment-list-deployments-revision-note"></a>
Anda juga dapat merevisi deployment selain revisi terbaru untuk target. Tentukan `--history-filter ALL` untuk mencantumkan semua deployment untuk target. Kemudian, salin ID penerapan yang ingin Anda revisi.

1. <a name="revise-deployment-get-deployment"></a>Jalankan perintah berikut untuk mendapatkan detail penerapan. Detail ini mencakup metadata, komponen, dan konfigurasi pekerjaan. Ganti *deploymentId* dengan ID dari langkah sebelumnya.

   ```
   aws greengrassv2 get-deployment --deployment-id deploymentId
   ```

   Tanggapan berisi detail deployment.

1. Buat file bernama `deployment.json` dan salin respons perintah sebelumnya ke dalam file.

1. Hapus pasangan nilai kunci berikut dari objek JSON di `deployment.json`:
   + `deploymentId`
   + `revisionId`
   + `iotJobId`
   + `iotJobArn`
   + `creationTimestamp`
   + `isLatestForTarget`
   + `deploymentStatus`

   [CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html)Operasi mengharapkan muatan dengan struktur berikut.

   ```
   {
     "targetArn": "String",
     "components": Map of components,
     "deploymentPolicies": DeploymentPolicies,
     "iotJobConfiguration": DeploymentIoTJobConfiguration,
     "tags": Map of tags
   }
   ```

1. Pada `deployment.json`, lakukan langkah-langkah berikut:
   + Ubah nama deployment ini (`deploymentName`).
   + Ubah komponen deployment ini (`components`).
   + Ubah kebijakan deployment ini (`deploymentPolicies`).
   + Ubah konfigurasi tugas deployment (`iotJobConfiguration`).
   + Ubah tag deployment ini (`tags`).

   Untuk informasi lebih lanjut tentang cara menentukan detail deployment ini, lihat [Buat deployment](create-deployments.md).

1. Jalankan perintah berikut untuk membuat deployment dari `deployment.json`.

   ```
   aws greengrassv2 create-deployment --cli-input-json file://deployment.json
   ```

   <a name="check-new-deployment-status"></a>Tanggapan meliputi `deploymentId` yang menentukan deployment ini. Anda dapat menggunakan ID deployment untuk memeriksa status deployment. Untuk informasi selengkapnya, lihat [Periksa status deployment](check-deployment-status.md#check-cloud-deployment-status).

# Batalkan deployment
<a name="cancel-deployments"></a>

Anda dapat membatalkan deployment untuk mencegah komponen perangkat lunaknya diinstal pada perangkat inti AWS IoT Greengrass . Jika Anda membatalkan deployment yang menargetkan grup objek, perangkat inti yang ditambahkan ke grup tidak akan menerima deployment berkelanjutan tersebut. Jika perangkat inti telah menjalankan deployment, Anda tidak akan mengubah komponen di perangkat tersebut saat membatalkan deployment. Anda harus [membuat deployment baru](create-deployments.md) atau [merevisi deployment ini](revise-deployments.md) untuk mengubah komponen yang berjalan pada perangkat inti yang menerima deployment yang dibatalkan.

**Untuk membatalkan deployment (AWS CLI)**

1. Jalankan perintah berikut untuk menemukan ID revisi deployment terbaru untuk target. Revisi terbaru adalah satu-satunya deployment yang dapat aktif untuk target, karena deployment sebelumnya batal ketika Anda membuat revisi baru. Ganti *targetArn* dengan ARN dari AWS IoT benda target atau kelompok benda.

   ```
   aws greengrassv2 list-deployments --target-arn targetArn
   ```

   Tanggapan berisi daftar dengan deployment terbaru untuk target. Salin `deploymentId` dari respons untuk digunakan di langkah berikutnya.

1. Jalankan perintah berikut untuk membatalkan deployment. Ganti *deploymentId* dengan ID dari langkah sebelumnya.

   ```
   aws greengrassv2 cancel-deployment --deployment-id deploymentId
   ```

   Jika operasi berhasil, status deployment akan berubah menjadi `CANCELED`.

# Periksa status deployment
<a name="check-deployment-status"></a>

Anda dapat memeriksa status deployment yang Anda buat di AWS IoT Greengrass. Anda juga dapat memeriksa status AWS IoT pekerjaan yang meluncurkan penerapan ke setiap perangkat inti. Sementara penerapan aktif, status AWS IoT pekerjaan adalah`IN_PROGRESS`. Setelah Anda membuat revisi baru penerapan, status AWS IoT pekerjaan revisi sebelumnya berubah menjadi. `CANCELLED`

**Topics**
+ [Periksa status deployment](#check-cloud-deployment-status)
+ [Periksa status deployment perangkat](#check-device-deployment-status)

## Periksa status deployment
<a name="check-cloud-deployment-status"></a>

Anda dapat memeriksa status deployment yang Anda identifikasi berdasarkan target atau ID-nya.

**Untuk memeriksa status deployment berdasarkan target (AWS CLI)**
+ Jalankan perintah berikut untuk mengambil status deployment terbaru untuk target. Ganti *targetArn* dengan Nama Sumber Daya Amazon (ARN) dari grup AWS IoT benda atau benda yang ditargetkan penerapan.

  ```
  aws greengrassv2 list-deployments --target-arn targetArn
  ```

  Tanggapan berisi daftar dengan deployment terbaru untuk target. Objek deployment ini mencakup status deployment.

**Untuk memeriksa status deployment berdasarkan ID (AWS CLI)**
+ Jalankan perintah berikut untuk mengambil status deployment. Ganti *deploymentId* dengan ID penyebaran untuk kueri.

  ```
  aws greengrassv2 get-deployment --deployment-id deploymentId
  ```

  Tanggapan berisi status deployment.

## Periksa status deployment perangkat
<a name="check-device-deployment-status"></a>

Anda dapat memeriksa status tugas deployment yang berlaku pada perangkat inti individu. Anda juga dapat memeriksa status pekerjaan penerapan untuk penyebaran grup sesuatu.

**Untuk memeriksa status pekerjaan penerapan untuk perangkat inti ()AWS CLI**
+ Jalankan perintah berikut untuk mengambil status semua deployment untuk perangkat inti. Ganti *coreDeviceName* dengan nama perangkat inti untuk kueri.

  ```
  aws greengrassv2 list-effective-deployments --core-device-thing-name coreDeviceName
  ```

  Tanggapan berisi daftar tugas deployment untuk perangkat inti. Anda dapat mengidentifikasi pekerjaan untuk penempatan oleh pekerjaan `deploymentId` atau`targetArn`. Setiap tugas deployment berisi status tugas pada perangkat inti.

**Untuk memeriksa status penerapan untuk grup sesuatu ()AWS CLI**

1. Jalankan perintah berikut untuk mengambil ID dari penyebaran yang ada. Ganti *targetArn* dengan ARN dari kelompok hal target.

   ```
   aws greengrassv2 list-deployments --target-arn targetArn
   ```

   Tanggapan berisi daftar dengan deployment terbaru untuk target. Salin `deploymentId` dari respons untuk digunakan di langkah berikutnya.
**catatan**  
Anda juga dapat membuat daftar penerapan selain penerapan terbaru untuk target. Tentukan `--history-filter ALL` untuk mencantumkan semua deployment untuk target. Kemudian, salin ID penerapan yang ingin Anda periksa statusnya.

1. Jalankan perintah berikut untuk mendapatkan detail penerapan. Ganti *deploymentID* dengan ID dari langkah sebelumnya.

   ```
   aws greengrassv2 get-deployment --deployment-id deploymentId
   ```

   Respons berisi informasi tentang penyebaran. Salin `iotJobId` dari respons yang akan digunakan pada langkah berikut.

1. Jalankan perintah berikut untuk menjelaskan eksekusi pekerjaan perangkat inti untuk penerapan. Ganti *iotJobId* dan *coreDeviceThingName* dengan ID pekerjaan dari langkah sebelumnya dan perangkat inti yang ingin Anda periksa statusnya.

   ```
   aws iot describe-job-execution --job-id iotJobId --thing-name coreDeviceThingName
   ```

   Respons berisi status eksekusi pekerjaan penerapan perangkat inti dan detail tentang status. `detailsMap`Berisi informasi berikut:
   + `detailed-deployment-status`— Status hasil penyebaran, yang dapat menjadi salah satu dari nilai berikut:
     + `SUCCESSFUL`— Penyebaran berhasil.
     + `FAILED_NO_STATE_CHANGE`— Penerapan gagal saat perangkat inti bersiap untuk menerapkan penerapan.
     + `FAILED_ROLLBACK_NOT_REQUESTED`— Penerapan gagal, dan penerapan tidak menentukan untuk memutar kembali ke konfigurasi kerja sebelumnya, sehingga perangkat inti mungkin tidak berfungsi dengan benar.
     + `FAILED_ROLLBACK_COMPLETE`— Penerapan gagal, dan perangkat inti berhasil digulung kembali ke konfigurasi kerja sebelumnya.
     + `FAILED_UNABLE_TO_ROLLBACK`— Penerapan gagal, dan perangkat inti gagal memutar kembali ke konfigurasi kerja sebelumnya, sehingga perangkat inti mungkin tidak berfungsi dengan benar.

     Jika penerapan gagal, periksa `deployment-failure-cause` nilai dan file log perangkat inti untuk mengidentifikasi masalah. Untuk informasi selengkapnya tentang cara mengakses file log perangkat inti, lihat[Memantau AWS IoT Greengrass log](monitor-logs.md).
   + `deployment-failure-cause`— Pesan kesalahan yang memberikan rincian tambahan tentang mengapa eksekusi pekerjaan gagal.

   Responsnya terlihat mirip dengan contoh berikut.

   ```
   {
     "execution": {
       "jobId": "2cc2698a-5175-48bb-adf2-1dd345606ebd",
       "status": "FAILED",
       "statusDetails": {
         "detailsMap": {
           "deployment-failure-cause": "No local or cloud component version satisfies the requirements. Check whether the version constraints conflict and that the component exists in your Akun AWS with a version that matches the version constraints. If the version constraints conflict, revise deployments to resolve the conflict. Component com.example.HelloWorld version constraints: LOCAL_DEPLOYMENT requires =1.0.0, thinggroup/MyGreengrassCoreGroup requires =1.0.1.",
           "detailed-deployment-status": "FAILED_NO_STATE_CHANGE"
         }
       },
       "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
       "queuedAt": "2022-02-15T14:45:53.098000-08:00",
       "startedAt": "2022-02-15T14:46:05.670000-08:00",
       "lastUpdatedAt": "2022-02-15T14:46:20.892000-08:00",
       "executionNumber": 1,
       "versionNumber": 3
     }
   }
   ```