

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

# Membuat pembaruan OTA dengan AWS CLI
<a name="ota-cli-workflow"></a>

Saat Anda menggunakan AWS CLI untuk membuat pembaruan OTA, Anda:

1. Tanda tangani gambar firmware Anda secara digital.

1. Buat aliran gambar firmware Anda yang ditandatangani secara digital.

1. Mulai pekerjaan pembaruan OTA.

## Menandatangani pembaruan firmware Anda secara digital
<a name="ota-sign-cli"></a>

Ketika Anda menggunakan AWS CLI untuk melakukan pembaruan OTA, Anda dapat menggunakan Penandatanganan Kode untuk AWS IoT, atau Anda dapat menandatangani pembaruan firmware Anda sendiri. Untuk daftar algoritma penandatanganan kriptografi dan hashing yang didukung oleh Penandatanganan Kode, lihat. AWS IoT[ SigningConfigurationOverrides](https://docs.aws.amazon.com/signer/latest/api/API_SigningConfigurationOverrides.html) Jika Anda ingin menggunakan algoritma kriptografi yang tidak didukung oleh Penandatanganan Kode untuk AWS IoT, Anda harus menandatangani biner firmware Anda sebelum mengunggahnya ke Amazon S3.

### Menandatangani gambar firmware Anda dengan Penandatanganan Kode untuk AWS IoT
<a name="ota-sign-csfa"></a>

Untuk menandatangani gambar firmware Anda menggunakan Penandatanganan Kode untuk AWS IoT, Anda dapat menggunakan salah satu [alat AWS SDKs atau baris perintah](https://aws.amazon.com/tools/). Untuk informasi selengkapnya tentang Penandatanganan Kode AWS IoT, lihat [Penandatanganan Kode untuk AWS IoT](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html).

Setelah menginstal dan mengonfigurasi alat penandatanganan kode, salin gambar firmware yang tidak ditandatangani ke bucket Amazon S3 dan mulai pekerjaan penandatanganan kode dengan perintah berikut. AWS CLI **put-signing-profile**Perintah membuat profil penandatanganan kode yang dapat digunakan kembali. **start-signing-job**Perintah memulai pekerjaan penandatanganan.

```
aws signer put-signing-profile \
    --profile-name your_profile_name \
    --signing-material certificateArn=arn:aws:acm::your-region:your-aws-account-id:certificate/your-certificate-id \
    --platform your-hardware-platform \
    --signing-parameters certname=your_certificate_path_on_device
```

```
aws signer start-signing-job \
    --source 's3={bucketName=your_s3_bucket,key=your_s3_object_key,version=your_s3_object_version_id}' \
    --destination 's3={bucketName=your_destination_bucket}' \
    --profile-name your_profile_name
```

**catatan**  
*your-source-bucket-name*dan *your-destination-bucket-name* bisa menjadi bucket Amazon S3 yang sama.

Ini adalah parameter untuk **start-signing-job** perintah **put-signing-profile** dan:

**`source`**  
Menentukan lokasi firmware yang tidak ditandatangani dalam bucket S3.  
+ `bucketName`: Nama ember S3 Anda.
+ `key`: Kunci (nama file) firmware Anda di bucket S3 Anda.
+ `version`: Versi S3 firmware Anda di bucket S3 Anda. Ini berbeda dengan versi firmware Anda. **Anda dapat menemukannya dengan menjelajah ke konsol Amazon S3, memilih bucket Anda, dan di bagian atas halaman, di sebelah **Versi**, memilih Tampilkan.**

**`destination`**  
Tujuan pada perangkat tempat firmware yang ditandatangani di ember S3 akan disalin. Format parameter ini sama dengan `source` parameter.

**`signing-material`**  
ARN sertifikat penandatanganan kode Anda. ARN ini dihasilkan saat Anda mengimpor sertifikat Anda ke ACM.

**`signing-parameters`**  
Peta pasangan kunci-nilai untuk penandatanganan. Ini dapat mencakup informasi apa pun yang ingin Anda gunakan selama penandatanganan.  
Parameter ini diperlukan saat Anda membuat profil penandatanganan kode untuk menandatangani pembaruan OTA dengan Penandatanganan Kode untuk. AWS IoT

**`platform`**  
Platform perangkat keras tempat Anda mendistribusikan pembaruan OTA. `platformId`  
Untuk mengembalikan daftar platform yang tersedia dan `platformId` nilainya, gunakan `aws signer list-signing-platforms` perintah.

Pekerjaan penandatanganan dimulai dan menulis gambar firmware yang ditandatangani ke bucket Amazon S3 tujuan. Nama file untuk image firmware yang ditandatangani adalah GUID. Anda memerlukan nama file ini saat Anda membuat aliran. Anda dapat menemukan nama file dengan menjelajah ke konsol Amazon S3 dan memilih bucket Anda. Jika Anda tidak melihat file dengan nama file GUID, segarkan browser Anda.

Perintah menampilkan ARN pekerjaan dan ID pekerjaan. Anda membutuhkan nilai-nilai ini nanti. Untuk informasi selengkapnya tentang Penandatanganan Kode AWS IoT, lihat [Penandatanganan Kode untuk AWS IoT](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html).

### Menandatangani gambar firmware Anda secara manual
<a name="ota-sign-manual"></a>

Tanda tangani gambar firmware Anda secara digital dan unggah gambar firmware yang ditandatangani ke dalam bucket Amazon S3 Anda.

## Membuat aliran pembaruan firmware Anda
<a name="ota-stream"></a>

Stream adalah antarmuka abstrak ke data yang dapat dikonsumsi oleh perangkat. Streaming dapat menyembunyikan kompleksitas mengakses data yang disimpan di lokasi yang berbeda atau layanan berbasis cloud yang berbeda. Layanan OTA Update Manager memungkinkan Anda untuk menggunakan beberapa bagian data, disimpan di berbagai lokasi di Amazon S3, untuk melakukan Pembaruan OTA.

Saat membuat Pembaruan AWS IoT OTA, Anda juga dapat membuat aliran yang berisi pembaruan firmware yang ditandatangani. Buat file JSON (`stream.json`) yang mengidentifikasi image firmware yang ditandatangani. File JSON harus berisi yang berikut ini.

```
[
  {
    "fileId":"your_file_id",
    "s3Location":{
      "bucket":"your_bucket_name",
      "key":"your_s3_object_key"
    }
  }   
]
```

Ini adalah atribut dalam file JSON:

**`fileId`**  
Bilangan bulat arbitrer antara 0-255 yang mengidentifikasi gambar firmware Anda.

**`s3Location`**  
Bucket dan kunci untuk firmware untuk streaming.    
**`bucket`**  
Bucket Amazon S3 tempat penyimpanan image firmware yang tidak ditandatangani.  
**`key`**  
Nama file gambar firmware Anda yang ditandatangani di bucket Amazon S3. Anda dapat menemukan nilai ini di konsol Amazon S3 dengan melihat isi bucket Anda.  
Jika Anda menggunakan Penandatanganan Kode untuk AWS IoT, nama file adalah GUID yang dihasilkan oleh Penandatanganan Kode untuk AWS IoT.

Gunakan perintah **create-stream** AWS CLI untuk membuat aliran.

```
aws iot create-stream \
    --stream-id your_stream_id \
    --description your_description \
    --files file://stream.json \
    --role-arn your_role_arn
```

Ini adalah argumen untuk **create-stream** AWS CLI perintah:

**`stream-id`**  
String arbitrer untuk mengidentifikasi aliran.

**`description`**  
Deskripsi opsional aliran.

**`files`**  
Satu atau lebih referensi ke file JSON yang berisi data tentang gambar firmware untuk streaming. File JSON harus berisi atribut berikut:    
**`fileId`**  
ID file arbitrer.  
**`s3Location`**  
Nama bucket tempat image firmware yang ditandatangani disimpan dan kunci (nama file) dari image firmware yang ditandatangani.  
**`bucket`**  
Bucket Amazon S3 tempat gambar firmware yang ditandatangani disimpan.  
**`key`**  
Kunci (nama file) dari gambar firmware yang ditandatangani.  
Saat Anda menggunakan Penandatanganan Kode untuk AWS IoT, kunci ini adalah GUID.
Berikut ini adalah contoh `stream.json` file.  

```
[
    {
        "fileId":123,
        "s3Location": {
            "bucket":"codesign-ota-bucket",
            "key":"48c67f3c-63bb-4f92-a98a-4ee0fbc2bef6"
        }
    }
]
```

**`role-arn`**  
[Peran layanan OTA](create-service-role.md) yang juga memberikan akses ke bucket Amazon S3 tempat image firmware disimpan.

Untuk menemukan kunci objek Amazon S3 dari gambar firmware yang ditandatangani, gunakan **aws signer describe-signing-job --job-id *my-job-id*** perintah di mana `my-job-id` ID pekerjaan ditampilkan oleh perintah. **create-signing-job** AWS CLI Output dari **describe-signing-job** perintah berisi kunci gambar firmware yang ditandatangani. 

```
... text deleted for brevity ...
  "signedObject": {
    "s3": {
      "bucketName": "ota-bucket",
      "key": "7309da2c-9111-48ac-8ee4-5a4262af4429"
    }
  }
... text deleted for brevity ...
```

## Membuat pembaruan OTA
<a name="create-ota-update"></a>

Gunakan **create-ota-update** AWS CLI perintah untuk membuat pekerjaan pembaruan OTA.

**catatan**  
Jangan gunakan informasi identitas pribadi (PII) apa pun di ID pekerjaan pembaruan OTA Anda. Contoh informasi yang dapat diidentifikasi secara pribadi meliputi:  
Nama.
Alamat IP.
Alamat email.
Lokasi.
Rincian bank.
Informasi medis.

```
aws iot  create-ota-update \
    --ota-update-id value \
    [--description value] \
    --targets value \
    [--protocols value] \
    [--target-selection value] \
    [--aws-job-executions-rollout-config value] \
    [--aws-job-presigned-url-config value] \
    [--aws-job-abort-config value] \
    [--aws-job-timeout-config value] \
    --files value \
    --role-arn value \
    [--additional-parameters value] \
    [--tags value]  \
    [--cli-input-json value] \
    [--generate-cli-skeleton]
```

 `cli-input-json`format

```
{
  "otaUpdateId": "string",
  "description": "string",
  "targets": [
    "string"
  ],
  "protocols": [
    "string"
  ],
  "targetSelection": "string",
  "awsJobExecutionsRolloutConfig": {
    "maximumPerMinute": "integer",
    "exponentialRate": {
      "baseRatePerMinute": "integer",
      "incrementFactor": "double",
      "rateIncreaseCriteria": {
        "numberOfNotifiedThings": "integer",
        "numberOfSucceededThings": "integer"
      }
    }
  },
  "awsJobPresignedUrlConfig": {
    "expiresInSec": "long"
  },
  "awsJobAbortConfig": {
    "abortCriteriaList": [
      {
        "failureType": "string",
        "action": "string",
        "thresholdPercentage": "double",
        "minNumberOfExecutedThings": "integer"
      }
    ]
  },
  "awsJobTimeoutConfig": {
    "inProgressTimeoutInMinutes": "long"
  },
  "files": [
    {
      "fileName": "string",
      "fileType": "integer",
      "fileVersion": "string",
      "fileLocation": {
        "stream": {
          "streamId": "string",
          "fileId": "integer"
        },
        "s3Location": {
          "bucket": "string",
          "key": "string",
          "version": "string"
        }
      },
      "codeSigning": {
        "awsSignerJobId": "string",
        "startSigningJobParameter": {
          "signingProfileParameter": {
            "certificateArn": "string",
            "platform": "string",
            "certificatePathOnDevice": "string"
          },
          "signingProfileName": "string",
          "destination": {
            "s3Destination": {
              "bucket": "string",
              "prefix": "string"
            }
          }
        },
        "customCodeSigning": {
          "signature": {
            "inlineDocument": "blob"
          },
          "certificateChain": {
            "certificateName": "string",
            "inlineDocument": "string"
          },
          "hashAlgorithm": "string",
          "signatureAlgorithm": "string"
        }
      },
      "attributes": {
        "string": "string"
      }
    }
  ],
  "roleArn": "string",
  "additionalParameters": {
    "string": "string"
  },
  "tags": [
    {
      "Key": "string",
      "Value": "string"
    }
  ]
}
```


**`cli-input-json`bidang**  

| Nama | Tipe | Deskripsi | 
| --- | --- | --- | 
| `otaUpdateId` |  string  (maks: 128 menit: 1)  | ID pembaruan OTA yang akan dibuat. | 
| `description` |  string  (maks: 2028)  | Deskripsi pembaruan OTA. | 
| `targets` |  daftar  | Perangkat ditargetkan untuk menerima pembaruan OTA. | 
| `protocols` |  daftar  |  Protokol yang digunakan untuk mentransfer gambar pembaruan OTA. Nilai yang valid adalah [HTTP], [MQTT], [HTTP, MQTT]. Ketika HTTP dan MQTT ditentukan, perangkat target dapat memilih protokol.  | 
| `targetSelection` | string |  Menentukan apakah update akan terus berjalan (CONTINUOUS), atau akan selesai setelah semua hal yang ditentukan sebagai target telah menyelesaikan update (SNAPSHOT). Jika terus menerus, pembaruan juga dapat dijalankan pada suatu hal ketika perubahan terdeteksi di target. Misalnya, pembaruan akan berjalan pada sesuatu ketika benda itu ditambahkan ke grup target, bahkan setelah pembaruan selesai oleh semua hal yang awalnya ada di grup. Nilai yang valid: CONTINUOUS \$1 SNAPSHOT. enum: TERUS MENERUS \$1 SNAPSHOT  | 
| `awsJobExecutionsRolloutConfig` |  | Konfigurasi untuk peluncuran pembaruan OTA. | 
| `maximumPerMinute` |  integer  (maks: 1000 menit: 1)  | Jumlah maksimum eksekusi pekerjaan pembaruan OTA dimulai per menit. | 
| `exponentialRate` |  |  Tingkat kenaikan untuk peluncuran pekerjaan. Parameter ini memungkinkan Anda untuk menentukan kenaikan tingkat eksponensial untuk peluncuran pekerjaan.  | 
| `baseRatePerMinute` |  integer  (maks: 1000 menit: 1)  |  Jumlah minimum hal yang akan diberitahukan tentang pekerjaan yang tertunda, per menit, pada awal peluncuran pekerjaan. Ini adalah tingkat awal peluncuran.  | 
|   `rateIncreaseCriteria`  |   |  Kriteria untuk memulai peningkatan tingkat peluncuran untuk suatu pekerjaan. AWS IoT mendukung hingga satu digit setelah desimal (misalnya, 1,5, tetapi tidak 1,55).  | 
|   `numberOfNotifiedThings`  |  integer  (min: 1)  |  Ketika jumlah hal ini telah diberitahukan, itu akan memulai peningkatan tingkat peluncuran.  | 
|   `numberOfSucceededThings`  |  integer  (min: 1)  |  Ketika sejumlah hal ini telah berhasil dalam pelaksanaan pekerjaan mereka, itu akan memulai peningkatan tingkat peluncuran.  | 
| `awsJobPresignedUrlConfig` |  |  Informasi konfigurasi untuk pra-ditandatangani URLs. | 
|   `expiresInSec`  |  long |  Berapa lama (dalam detik) pra-ditandatangani URLs valid. Nilai yang valid adalah 60 - 3600, nilai default adalah 1800 detik. URLs Pra-ditandatangani dibuat ketika permintaan untuk dokumen pekerjaan diterima.  | 
|   `awsJobAbortConfig`  |   |  Kriteria yang menentukan kapan dan bagaimana penghentian pekerjaan terjadi. | 
|   `abortCriteriaList`  |  daftar  |  Daftar kriteria yang menentukan kapan dan bagaimana menghentikan pekerjaan. | 
|   `failureType`  |  string |  Jenis kegagalan eksekusi pekerjaan yang dapat memulai penghentian pekerjaan.  enum: GAGAL \$1 DITOLAK \$1 TIMED\$1OUT \$1 SEMUA  | 
|   `action`  |  string |  Jenis tindakan pekerjaan yang harus diambil untuk memulai penghentian pekerjaan.  enum: BATALKAN  | 
|   `minNumberOfExecutedThings`  |  integer  (min: 1)  |  Jumlah minimum hal yang harus menerima pemberitahuan pelaksanaan pekerjaan sebelum pekerjaan dapat dihentikan.  | 
|   `awsJobTimeoutConfig`  |   |  Menentukan jumlah waktu setiap perangkat harus menyelesaikan pelaksanaan pekerjaan. Timer dimulai saat status eksekusi pekerjaan disetel ke`IN_PROGRESS`. Jika status eksekusi pekerjaan tidak disetel ke status terminal lain sebelum timer kedaluwarsa, itu akan secara otomatis diatur ke`TIMED_OUT`.  | 
|   `inProgressTimeoutInMinutes`  |  long |  Menentukan jumlah waktu, dalam menit, perangkat ini harus menyelesaikan pelaksanaan pekerjaan ini. Interval batas waktu dapat berkisar antara 1 menit dan 7 hari (1 hingga 10080 menit). Timer yang sedang berlangsung tidak dapat diperbarui dan akan berlaku untuk semua eksekusi pekerjaan untuk pekerjaan itu. Setiap kali eksekusi pekerjaan tetap dalam status IN\$1PROGRESS lebih lama dari interval ini, eksekusi pekerjaan akan gagal dan beralih ke status terminal`TIMED_OUT`.  | 
|   `files`  |  daftar  |  File yang akan dialirkan oleh pembaruan OTA. | 
|   `fileName`  |  string |  Nama file. | 
|   `fileType`  |  integer  rentang- maks: 255 menit: 0  |  Nilai integer yang dapat Anda sertakan dalam dokumen pekerjaan untuk memungkinkan perangkat Anda mengidentifikasi jenis file yang diterima dari cloud.  | 
|   `fileVersion`  |  string |  Versi file. | 
|   `fileLocation`  |   |  Lokasi firmware yang diperbarui. | 
|   `stream`  |   |  Aliran yang berisi pembaruan OTA. | 
|   `streamId`  |  string  (maks: 128 menit: 1)  |  ID stream. | 
|   `fileId`  |  integer  (maks: 255 menit: 0)  |  ID file yang terkait dengan aliran. | 
|   `s3Location`  |   |  Lokasi firmware yang diperbarui di S3. | 
|   `bucket`  |  string  (min: 1)  |  Ember S3. | 
|   `key`  |  string  (min: 1)  |  Tombol S3. | 
|   `version`  |  string |  Versi bucket S3. | 
|   `codeSigning`  |   |  Metode penandatanganan kode file. | 
|   `awsSignerJobId`  |  string |  ID dari AWSSigner Job yang dibuat untuk menandatangani file. | 
|   `startSigningJobParameter`  |   |  Menjelaskan pekerjaan penandatanganan kode. | 
|   `signingProfileParameter`  |   |  Menjelaskan profil penandatanganan kode. | 
|   `certificateArn`  |  string |  Sertifikat ARN. | 
|   `platform`  |  string |  Platform perangkat keras perangkat Anda. | 
|   `certificatePathOnDevice`  |  string |  Lokasi sertifikat penandatanganan kode di perangkat Anda. | 
|   `signingProfileName`  |  string |  Nama profil penandatanganan kode. | 
|   `destination`  |   |  Lokasi untuk menulis file yang ditandatangani kode. | 
|   `s3Destination`  |   |  Menjelaskan lokasi di S3 dari firmware yang diperbarui. | 
|   `bucket`  |  string  (min: 1)  |  Bucket S3 yang berisi firmware yang diperbarui. | 
|   `prefix`  |  string |  Awalan S3. | 
|   `customCodeSigning`  |   |  Metode khusus untuk penandatanganan kode file. | 
|   `signature`  |   |  Tanda tangan untuk file tersebut. | 
|   `inlineDocument`  |  blob |  Representasi biner yang dikodekan base64 dari tanda tangan penandatanganan kode. | 
|   `certificateChain`  |   |  Rantai sertifikat. | 
|   `certificateName`  |  string |  Nama sertifikat. | 
|   `inlineDocument`  |  string |  Representasi biner yang dikodekan base64 dari rantai sertifikat penandatanganan kode. | 
|   `hashAlgorithm`  |  string |  Algoritma hash yang digunakan untuk kode menandatangani file. | 
|   `signatureAlgorithm`  |  string |  Algoritma tanda tangan yang digunakan untuk kode menandatangani file. | 
|   `attributes`  |  map |  Daftar name/attribute pasangan. | 
|   `roleArn`  |  string  (maks: 2048 menit: 20)  |  Peran IAM yang memberikan AWS IoT akses ke Amazon S3 AWS IoT , pekerjaan, AWS dan sumber daya Penandatanganan Kode untuk membuat pekerjaan pembaruan OTA. | 
|   `additionalParameters`  |  map |  Daftar parameter pembaruan OTA tambahan yang merupakan pasangan nama-nilai. | 
|   `tags`  |  daftar  |  Metadata yang dapat digunakan untuk mengelola pembaruan. | 
|   `Key`  |  string  (maks: 128 menit: 1)  |  Kunci tag. | 
|   `Value`  |  string  (maks: 256 menit: 1)  |  Nilai tag. | 

Output

```
{
  "otaUpdateId": "string",
  "awsIotJobId": "string",
  "otaUpdateArn": "string",
  "awsIotJobArn": "string",
  "otaUpdateStatus": "string"
}
```


**AWS CLI bidang keluaran**  

|  Nama |  Tipe |  Deskripsi | 
| --- | --- | --- | 
|   `otaUpdateId`  |  string  (maks: 128 menit: 1)  |  ID pembaruan OTA. | 
|   `awsIotJobId`  |  string |  ID AWS IoT pekerjaan yang terkait dengan pembaruan OTA. | 
|   `otaUpdateArn`  |  string |  Pembaruan OTA ARN. | 
|   `awsIotJobArn`  |  string |   AWS IoT Pekerjaan ARN terkait dengan pembaruan OTA. | 
|   `otaUpdateStatus`  |  string |  Status pembaruan OTA.  enum: CREATE\$1PENDING \$1 CREATE\$1IN\$1PROGRESS \$1 CREATE\$1COMPLETE \$1 CREATE\$1FAILED  | 

Berikut ini adalah contoh file JSON yang diteruskan ke **create-ota-update** perintah yang menggunakan Code Signing for AWS IoT.

```
[
  {
    "fileName": "firmware.bin",                
    "fileType": 1,
    "fileLocation": {
      "stream": {
        "streamId": "004",                         
        "fileId":123
      }                        
    },
    "codeSigning": {
      "awsSignerJobId": "48c67f3c-63bb-4f92-a98a-4ee0fbc2bef6"     
    }
  }
]
```

Berikut ini adalah contoh file JSON yang diteruskan ke **create-ota-update** AWS CLI perintah yang menggunakan file inline untuk menyediakan materi penandatanganan kode khusus.

```
[
  {
    "fileName": "firmware.bin",
    "fileType": 1,
    "fileLocation": {
      "stream": {
        "streamId": "004",
        "fileId": 123
      }
    },
    "codeSigning": {
      "customCodeSigning":{
        "signature":{
          "inlineDocument":"your_signature"
        },
        "certificateChain": {
          "certificateName": "your_certificate_name",
          "inlineDocument":"your_certificate_chain"
        },
        "hashAlgorithm":"your_hash_algorithm",
        "signatureAlgorithm":"your_signature_algorithm"
      }
    }
  }
]
```

Berikut ini adalah contoh file JSON yang diteruskan ke **create-ota-update** AWS CLI perintah yang memungkinkan FreerTOS OTA untuk memulai pekerjaan penandatanganan kode dan membuat profil dan streaming penandatanganan kode.

```
[
  {
    "fileName": "your_firmware_path_on_device",
    "fileType": 1,
    "fileVersion": "1",
    "fileLocation": {
      "s3Location": {
        "bucket": "your_bucket_name",
        "key": "your_object_key",
        "version": "your_S3_object_version"
      }
    },
    "codeSigning":{
      "startSigningJobParameter":{
        "signingProfileName": "myTestProfile",
        "signingProfileParameter": {
          "certificateArn": "your_certificate_arn",
          "platform": "your_platform_id",
          "certificatePathOnDevice": "certificate_path"
        },
        "destination": {
          "s3Destination": {
            "bucket": "your_destination_bucket"
          }
        }
      }
    }  
  }
]
```

Berikut ini adalah contoh file JSON yang diteruskan ke **create-ota-update** AWS CLI perintah yang membuat pembaruan OTA yang memulai pekerjaan penandatanganan kode dengan profil yang ada dan menggunakan aliran yang ditentukan.

```
[
  {
    "fileName": "your_firmware_path_on_device",
    "fileType": 1,
    "fileVersion": "1",
    "fileLocation": {
      "s3Location": {
        "bucket": "your_s3_bucket_name",
        "key": "your_object_key",
        "version": "your_S3_object_version"
      }
    },
    "codeSigning":{
      "startSigningJobParameter":{
        "signingProfileName": "your_unique_profile_name",
        "destination": {
          "s3Destination": {
            "bucket": "your_destination_bucket"
          }
        }
      }
    }  
  }
]
```

Berikut ini adalah contoh file JSON yang diteruskan ke **create-ota-update** AWS CLI perintah yang memungkinkan FreeRTOS OTA untuk membuat aliran dengan ID pekerjaan penandatanganan kode yang ada.

```
[
  {
    "fileName": "your_firmware_path_on_device",
    "fileType": 1,
    "fileVersion": "1",
    "codeSigning":{
      "awsSignerJobId": "your_signer_job_id"
    }  
  }
]
```

Berikut ini adalah contoh file JSON yang diteruskan ke **create-ota-update** AWS CLI perintah yang membuat pembaruan OTA. Pembaruan membuat aliran dari objek S3 yang ditentukan dan menggunakan penandatanganan kode khusus.

```
[
  {
    "fileName": "your_firmware_path_on_device",
    "fileType": 1,
    "fileVersion": "1",
    "fileLocation": {
      "s3Location": {
        "bucket": "your_bucket_name",
        "key": "your_object_key",
        "version": "your_S3_object_version"
      }
    },
    "codeSigning":{
      "customCodeSigning": {
        "signature":{
          "inlineDocument":"your_signature"
        },
        "certificateChain": {
          "inlineDocument":"your_certificate_chain",
          "certificateName": "your_certificate_path_on_device"
        },
        "hashAlgorithm":"your_hash_algorithm",
        "signatureAlgorithm":"your_sig_algorithm"
      }
    }  
  }
]
```

## Daftar pembaruan OTA
<a name="list-ota-updates"></a>

Anda dapat menggunakan **list-ota-updates** AWS CLI perintah untuk mendapatkan daftar semua pembaruan OTA.

```
aws iot list-ota-updates
```

Output dari **list-ota-updates** perintah terlihat seperti ini.

```
{
  "otaUpdates": [
     
    {
      "otaUpdateId": "my_ota_update2",
      "otaUpdateArn": "arn:aws:iot:us-west-2:123456789012:otaupdate/my_ota_update2",
      "creationDate": 1522778769.042
    },
    {
      "otaUpdateId": "my_ota_update1",
      "otaUpdateArn": "arn:aws:iot:us-west-2:123456789012:otaupdate/my_ota_update1",
      "creationDate": 1522775938.956
    },
    {
      "otaUpdateId": "my_ota_update",
      "otaUpdateArn": "arn:aws:iot:us-west-2:123456789012:otaupdate/my_ota_update",
      "creationDate": 1522775151.031
    }
  ]
}
```

## Mendapatkan informasi tentang pembaruan OTA
<a name="get-ota-updates"></a>

Anda dapat menggunakan **get-ota-update** AWS CLI perintah untuk mendapatkan status pembuatan atau penghapusan pembaruan OTA.

```
aws iot get-ota-update --ota-update-id your-ota-update-id
```

Output dari **get-ota-update** perintah terlihat seperti berikut ini.

```
{ 
    "otaUpdateInfo": { 
        "otaUpdateId": "ota-update-001", 
        "otaUpdateArn": "arn:aws:iot:region:123456789012:otaupdate/ota-update-001", 
        "creationDate": 1575414146.286, 
        "lastModifiedDate": 1575414149.091, 
        "targets": [ 
            "arn:aws:iot:region:123456789012:thing/myDevice" 
        ], 
        "protocols": [ "HTTP" ], 
        "awsJobExecutionsRolloutConfig": { 
            "maximumPerMinute": 0 
        }, 
        "awsJobPresignedUrlConfig": { 
            "expiresInSec": 1800 
        }, 
        "targetSelection": "SNAPSHOT", 
        "otaUpdateFiles": [ 
            { 
                "fileName": "my_firmware.bin", 
                "fileType": 1,
                "fileLocation": { 
                    "s3Location": { 
                        "bucket": "my-bucket", 
                        "key": "my_firmware.bin", 
                        "version": "AvP3bfJC9gyqnwoxPHuTqM5GWENt4iii" 
                    } 
                }, 
                "codeSigning": { 
                    "awsSignerJobId": "b7a55a54-fae5-4d3a-b589-97ed103737c2", 
                    "startSigningJobParameter": { 
                        "signingProfileParameter": {}, 
                        "signingProfileName": "my-profile-name", 
                        "destination": { 
                            "s3Destination": { 
                                "bucket": "some-ota-bucket", 
                                "prefix": "SignedImages/" 
                            } 
                        } 
                    }, 
                    "customCodeSigning": {} 
                } 
            } 
        ], 
        "otaUpdateStatus": "CREATE_COMPLETE", 
        "awsIotJobId": "AFR_OTA-ota-update-001", 
        "awsIotJobArn": "arn:aws:iot:region:123456789012:job/AFR_OTA-ota-update-001" 
    } 
}
```

Nilai yang dikembalikan untuk `otaUpdateStatus` meliputi yang berikut:

**`CREATE_PENDING`**  
Pembuatan pembaruan OTA sedang menunggu keputusan.

**`CREATE_IN_PROGRESS`**  
Pembaruan OTA sedang dibuat.

**`CREATE_COMPLETE`**  
Pembaruan OTA telah dibuat.

**`CREATE_FAILED`**  
Pembuatan pembaruan OTA gagal.

**`DELETE_IN_PROGRESS`**  
Pembaruan OTA sedang dihapus.

**`DELETE_FAILED`**  
Penghapusan pembaruan OTA gagal.

**catatan**  
Untuk mendapatkan status eksekusi pembaruan OTA setelah dibuat, Anda perlu menggunakan **describe-job-execution** perintah. Untuk informasi selengkapnya, lihat [Menjelaskan Eksekusi Pekerjaan](https://docs.aws.amazon.com/iot/latest/developerguide/manage-job-cli.html#describe-job-execution).

## Menghapus data terkait OTA
<a name="delete-ota-data"></a>

Saat ini, Anda tidak dapat menggunakan AWS IoT konsol untuk menghapus aliran atau pembaruan OTA. Anda dapat menggunakan file AWS CLI untuk menghapus aliran, pembaruan OTA, dan AWS IoT pekerjaan yang dibuat selama pembaruan OTA.

### Menghapus aliran OTA
<a name="delete-ota-stream"></a>

Saat Anda membuat pembaruan OTA yang menggunakan MQTT, Anda dapat menggunakan baris perintah atau AWS IoT konsol untuk membuat aliran untuk memecah firmware menjadi beberapa bagian sehingga dapat dikirim melalui MQTT. Anda dapat menghapus aliran ini dengan **delete-stream** AWS CLI perintah, seperti yang ditunjukkan pada contoh berikut.

```
aws iot delete-stream --stream-id your_stream_id
```

### Menghapus pembaruan OTA
<a name="delete-ota-update"></a>

Saat Anda membuat pembaruan OTA, berikut ini dibuat:
+ Entri dalam database pekerjaan pembaruan OTA.
+  AWS IoT Pekerjaan untuk melakukan pembaruan.
+ Eksekusi AWS IoT pekerjaan untuk setiap perangkat yang diperbarui.

**delete-ota-update**Perintah menghapus entri di database pekerjaan pembaruan OTA saja. Anda harus menggunakan **delete-job** perintah untuk menghapus AWS IoT pekerjaan.

Gunakan **delete-ota-update** perintah untuk menghapus pembaruan OTA.

```
aws iot delete-ota-update --ota-update-id your_ota_update_id
```

**`ota-update-id`**  
ID pembaruan OTA untuk dihapus.

**`delete-stream`**  
Menghapus aliran yang terkait dengan pembaruan OTA.

**`force-delete-aws-job`**  
Menghapus AWS IoT pekerjaan yang terkait dengan pembaruan OTA. Jika bendera ini tidak disetel dan pekerjaan dalam `In_Progress` status, pekerjaan tidak dihapus.

### Menghapus pekerjaan IoT yang dibuat untuk pembaruan OTA
<a name="delete-ota-job"></a>

FreeRTOS menciptakan pekerjaan saat Anda membuat AWS IoT pembaruan OTA. Eksekusi pekerjaan juga dibuat untuk setiap perangkat yang memproses pekerjaan. Anda dapat menggunakan **delete-job** AWS CLI perintah untuk menghapus pekerjaan dan eksekusi pekerjaan yang terkait.

```
aws iot delete-job --job-id your-job-id --no-force
```

`no-force`Parameter menentukan bahwa hanya pekerjaan yang berada dalam status terminal (SELESAI atau DIBATALKAN) yang dapat dihapus. Anda dapat menghapus pekerjaan yang berada dalam keadaan non-terminal dengan meneruskan `force` parameter. Untuk informasi selengkapnya, lihat [DeleteJob API](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJob.html).

**catatan**  
Menghapus pekerjaan dengan status IN\$1PROGRESS akan mengganggu eksekusi pekerjaan apa pun yang IN\$1PROGRESS di perangkat Anda dan dapat mengakibatkan perangkat dibiarkan dalam status nondeterministik. Pastikan bahwa setiap perangkat yang menjalankan pekerjaan yang telah dihapus dapat pulih ke keadaan yang diketahui.

Bergantung pada jumlah eksekusi pekerjaan yang dibuat untuk pekerjaan itu dan faktor lainnya, perlu beberapa menit untuk menghapus pekerjaan. Saat pekerjaan sedang dihapus, statusnya adalah DELETION\$1IN\$1PROGRESS. Mencoba menghapus atau membatalkan pekerjaan yang statusnya sudah DELETION\$1IN\$1PROGRESS menghasilkan kesalahan.

Anda dapat menggunakan **delete-job-execution** untuk menghapus eksekusi pekerjaan. Anda mungkin ingin menghapus eksekusi pekerjaan ketika sejumlah kecil perangkat tidak dapat memproses pekerjaan. Ini menghapus eksekusi pekerjaan untuk satu perangkat, seperti yang ditunjukkan pada contoh berikut.

```
aws iot delete-job-execution --job-id your-job-id --thing-name
                    your-thing-name --execution-number your-job-execution-number --no-force
```

Seperti halnya **delete-job** AWS CLI perintah, Anda dapat meneruskan `--force` parameter **delete-job-execution** ke untuk memaksa penghapusan eksekusi pekerjaan. Untuk informasi selengkapnya, lihat [DeleteJobExecutionAPI](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJobExecution.html).

**catatan**  
Menghapus eksekusi pekerjaan dengan status IN\$1PROGRESS akan mengganggu eksekusi pekerjaan apa pun yang IN\$1PROGRESS di perangkat Anda dan dapat mengakibatkan perangkat dibiarkan dalam status nondeterministik. Pastikan bahwa setiap perangkat yang menjalankan pekerjaan yang telah dihapus dapat pulih ke keadaan yang diketahui.

Untuk informasi selengkapnya tentang menggunakan aplikasi demo pembaruan OTA, lihat[Over-the-air memperbarui aplikasi demo](ota-demo.md).