Menempatkan pesan tindakan HTTP dalam batch - AWS IoT Core

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

Menempatkan pesan tindakan HTTP dalam batch

Anda dapat menggunakan batching untuk mengirim beberapa pesan tindakan HTTP dalam satu permintaan.

Ikhtisar

Batching memungkinkan Anda mengirim pesan dari AWS IoT Core Rules Engine ke endpoint HTTP Anda dalam batch. Fungsionalitas ini dapat membantu mengurangi biaya Anda dengan menurunkan jumlah eksekusi tindakan HTTP serta meningkatkan efisiensi dengan mengurangi overhead yang terkait dengan membangun koneksi baru.

catatan

Tindakan HTTP batch diukur sebagai tindakan tunggal. Anda diukur dengan penambahan 5 KiB, berdasarkan ukuran payload batch keluar yang dipancarkan oleh Rules Engine ke layanan hilir. AWS IoT Core Untuk informasi lebih lanjut, lihat halaman harga AWS IoT Core.

Saat Anda mengaktifkan batching dalam definisi Tindakan Aturan IoT Anda, parameter berikut akan tersedia untuk konfigurasi:

maxBatchOpenMs

Jumlah waktu maksimum (dalam milidetik) pesan keluar menunggu pesan lain untuk membuat batch. Semakin tinggi pengaturan, semakin lama latensi tindakan HTTP batch.

Nilai Minimum: 5 ms. Nilai Maksimum: 200 ms.

Nilai Default: 20 ms

Mendukung template substitusi: Tidak

maxBatchSize

Jumlah maksimum pesan yang dikumpulkan bersama dalam satu eksekusi tindakan aturan IoT.

Nilai Minimum: 2 pesan. Nilai Maksimum: 10 pesan

Nilai Default: 10 pesan

Mendukung template substitusi: Tidak

maxBatchSizeBytes

Ukuran maksimum kumpulan pesan, dalam byte.

Nilai Minimum: 100 byte. Nilai Maksimum: 131.072 byte

Nilai Default: 5120 byte

Mendukung template substitusi: Tidak

penting

Saat Anda menentukan beberapa parameter batch, batching selesai saat batas pertama tercapai. Misalnya, jika Anda menentukan 100 ms sebagai Waktu Buka Batch Maksimum dan 5 KiB sebagai Ukuran Batch Maksimum, dan Batch Rules Engine hanya 2 KiB dalam 100 ms, maka batch 2 KiB akan dibuat dan dikirim.

Menggunakan header HTTP dalam batch

Saat Anda menggunakan header dalam tindakan HTTP Anda, permintaan batch menggunakan nilai header dari pesan terakhir yang ditambahkan ke batch (belum tentu pesan terakhir yang Anda terbitkan). Sebaiknya gunakan nilai header yang berupa:

  • Identik di semua pesan dalam batch

  • Berlaku untuk semua pesan (misalnya, kredensyal otentikasi)

Header dikirim dengan permintaan HTTP dan bukan bagian dari badan pesan.

catatan

Saat batching diaktifkan:

  • Permintaan batch secara otomatis menyertakan Content-Type: application/json header, karena batch dikirim sebagai array JSON.

  • Kami tidak dapat menjamin bahwa pesan terakhir dalam batch adalah pesan terakhir yang Anda terbitkan. Ini adalah pesan terakhir yang berhasil masuk ke dalam batch.

Contoh Muatan

Contoh berikut menunjukkan struktur payload pesan batch yang dikirim ke titik akhir HTTP Anda:

[ { "user_id": "user1", "steps_today": 1000 }, { "user_id": "user2", "steps_today": 21000 }, { "user_id": "user8", "steps_today": 1500 }, ... ]

Batasan

Berikut ini adalah batasan batching:

  • AWS IoT Core tidak menjamin pemesanan pesan secara keseluruhan. Batching dilakukan secara lokal pada setiap host, yang dapat mengakibatkan pesan dalam batch diproses dalam urutan yang berbeda dari yang diterima.

  • AWS IoT Core tidak menyediakan dukungan pemrosesan pesan di sisi penerima. Anda bertanggung jawab untuk memastikan bahwa layanan hilir Anda dikonfigurasi untuk menerima dan memproses data dalam batch.

  • Batching lintas akun tidak didukung, bahkan jika pesan ditujukan untuk pengenal sumber daya yang sama (URL HTTP atau ARN sumber daya).

  • AWS IoT Core tidak menjamin bahwa ukuran batch akan memenuhi konfigurasi yang Anda tentukan. Batch mungkin lebih kecil dari batas yang dikonfigurasi berdasarkan waktu dan alur pesan.

  • Saat batching diaktifkan, muatan biner (data non-UTF-8) tidak didukung. Hanya muatan teks UTF-8 (seperti JSON) yang diterima. Untuk mengirim data biner, base64 menyandikannya sebelum mengirimnya ke aksi HTTP, dan kemudian mendekodekannya di titik akhir penerima Anda. Misalnya, Anda dapat menggunakan fungsi encode dalam aturan IoT untuk menyandikan payload biner. Atau, Anda dapat menyandikan payload biner di perangkat IoT Anda dan mempublikasikannya ke. AWS IoT Core

Tindakan Kesalahan untuk Batching

Anda tidak akan dapat mendefinisikan logika batching terpisah dalam definisi Tindakan Kesalahan Anda. Namun, Error Action Anda akan mendukung batching jika Anda telah menentukan logika batching di Action utama Anda.

Ketika permintaan batch gagal, mesin AWS IoT Core Rules akan mengikuti logika coba lagi tindakan HTTP. Setelah percobaan ulang terakhir, tindakan kesalahan akan dipanggil untuk seluruh batch yang gagal.

Berikut ini adalah contoh pesan tindakan kesalahan dengan batching diaktifkan:

{ "ruleName": "FailedTopicRule", "topic": "topic/rulesengine", "payloadsWithMetadata": [ { "id": 1, "cloudwatchTraceId": "bebd6d93-6d4a-899e-9e40-56e82252d2be", "clientId": "Test", "sourceIp": "10.0.0.0", "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0=" }, { "id": 2, "cloudwatchTraceId": "af94d3b8-0b18-1dbf-2c7d-513f5cb9e2e1", "clientId": "Test", "sourceIp": "10.0.0.0", "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0=" }, { "id": 3, "cloudwatchTraceId": "ca441266-c2ce-c916-6aee-b9e5c7831675", "clientId": "Test", "sourceIp": "10.0.0.0", "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0=" } ], "failures": [ { "affectedIds": [ 1, 2, 3 ], "failedAction": "HttpAction", "failedResource": "https://example.foobar.com/HttpAction", "errorMessage": "HttpAction failed to make a request to the specified endpoint. StatusCode: 500. Reason: Internal Server Error." }, { "affectedIds": [ 3 ], "failedAction": "S3Action", "failedResource": "amzn-s3-demo-bucket", "errorMessage": "Failed to put S3 object. The error received was The specified bucket does not exist" }, { "affectedIds": [ 3 ], "failedAction": "LambdaAction", "failedResource": "arn:aws:lambda:us-west-2:123456789012:function:dummy", "errorMessage": "Failed to invoke lambda function. Received Server error from Lambda. The error code is 403" } ] }
catatan

Kegagalan tindakan batch juga menghasilkan muatan tindakan kesalahan yang lebih besar yang dapat meningkatkan kemungkinan kegagalan tindakan kesalahan karena ukurannya. Anda dapat memantau kegagalan tindakan kesalahan menggunakan ErrorActionFailure metrik. Untuk informasi selengkapnya, lihat Metrik tindakan aturan.

Mengelompokkan pesan tindakan HTTP dengan AWS CLI

Membuat atau memperbarui tindakan aturan dengan batching

  1. Gunakan AWS CLI perintah yang sesuai untuk membuat atau memperbarui aturan:

    • Untuk membuat aturan baru, gunakan create-topic-ruleperintah:

      aws iot create-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
    • Untuk memperbarui aturan yang ada, gunakan replace-topic-ruleperintah:

      aws iot replace-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
  2. Aktifkan kemampuan batching dengan menyetel parameter enableBatching ke true di payload aturan topik Anda:

    { "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "http": { "url": "https://www.example.com/subpath", "confirmationUrl": "https://www.example.com", "headers": [ { "key": "static_header_key", "value": "static_header_value" }, { "key": "substitutable_header_key", "value": "${value_from_payload}" } ], "enableBatching": true, "batchConfig": { "maxBatchOpenMs": 100, "maxBatchSize": 5, "maxBatchSizeBytes": 1024 } } } ] }
  3. Konfigurasikan parameter batching. Anda tidak perlu menentukan semua parameter batch. Anda dapat memilih untuk menentukan 1, 2, atau semua 3 parameter batch. Jika Anda tidak menentukan parameter batch, Rules Engine akan memperbarui parameter itu dengan nilai default. Untuk informasi selengkapnya tentang parameter batching dan nilai defaultnya, lihat parameter HTTP.