Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengembangkan AWS IoT TwinMaker konektor data seri waktu
Bagian ini menjelaskan cara mengembangkan konektor data deret waktu dalam proses langkah demi langkah. Selain itu, kami menyajikan contoh konektor data deret waktu berdasarkan seluruh sampel pabrik cookie, yang mencakup model 3D, entitas, komponen, alarm, dan konektor. Sumber sampel pabrik cookie tersedia di GitHub repositori AWS IoT TwinMaker sampel
Topik
AWS IoT TwinMaker prasyarat konektor data deret waktu
Sebelum mengembangkan konektor data deret waktu Anda, kami sarankan Anda menyelesaikan tugas-tugas berikut:
-
Buat jenis AWS IoT TwinMaker komponen.
(Opsional) Baca Menggunakan dan membuat tipe komponen.
(Opsional) Baca antarmuka konektor AWS IoT TwinMaker data untuk mendapatkan pemahaman umum tentang konektor AWS IoT TwinMaker data.
catatan
Untuk contoh konektor yang diimplementasikan sepenuhnya, lihat contoh implementasi pabrik cookie kami.
Time-series latar belakang konektor data
Bayangkan Anda bekerja dengan pabrik yang memiliki satu set mixer kue dan tangki air. Anda ingin membangun kembar AWS IoT TwinMaker digital dari entitas fisik ini sehingga Anda dapat memantau keadaan operasional mereka dengan memeriksa berbagai metrik deret waktu.
Anda telah menyiapkan sensor di tempat dan Anda sudah mengalirkan data pengukuran ke database Timestream. Anda ingin dapat melihat dan mengatur data pengukuran AWS IoT TwinMaker dengan overhead minimal. Anda dapat menyelesaikan tugas ini dengan menggunakan konektor data deret waktu. Gambar berikut menunjukkan contoh tabel telemetri, yang diisi melalui penggunaan konektor deret waktu.
Kumpulan data dan tabel Timestream yang digunakan dalam tangkapan layar ini tersedia di repositori sampel. AWS IoT TwinMaker GitHub
Time-series aliran data konektor data
Untuk kueri bidang data AWS IoT TwinMaker , mengambil properti yang sesuai dari komponen dan tipe komponen dari komponen dan definisi tipe komponen. AWS IoT TwinMaker meneruskan properti ke AWS Lambda fungsi bersama dengan parameter kueri API apa pun dalam kueri.
AWS IoT TwinMaker menggunakan fungsi Lambda untuk mengakses dan menyelesaikan kueri dari sumber data dan mengembalikan hasil kueri tersebut. Fungsi Lambda menggunakan properti tipe komponen dan komponen dari bidang data untuk menyelesaikan permintaan awal.
Hasil kueri Lambda dipetakan ke respons API dan dikembalikan kepada Anda.
AWS IoT TwinMaker mendefinisikan antarmuka konektor data dan menggunakannya untuk berinteraksi dengan fungsi Lambda. Dengan menggunakan konektor data, Anda dapat menanyakan sumber data Anda dari AWS IoT TwinMaker API tanpa upaya migrasi data apa pun. Gambar berikut menguraikan aliran data dasar yang dijelaskan dalam paragraf sebelumnya.
Mengembangkan konektor data deret waktu
Prosedur berikut menguraikan model pengembangan yang secara bertahap membangun konektor data deret waktu fungsional. Langkah-langkah dasarnya adalah sebagai berikut:
-
Buat tipe komponen dasar yang valid
Dalam tipe komponen, Anda menentukan properti umum yang dibagikan di seluruh komponen Anda. Untuk mempelajari selengkapnya tentang mendefinisikan tipe komponen, lihat Menggunakan dan membuat tipe komponen.
AWS IoT TwinMaker menggunakan pola pem odelan entitas komponen
sehingga setiap komponen dilampirkan ke entitas. Sebaiknya Anda memodelkan setiap item fisik sebagai entitas dan memodelkan sumber data yang berbeda dengan tipe komponennya sendiri. Contoh berikut menunjukkan tipe komponen template Timestream dengan satu properti:
{"componentTypeId": "com.example.timestream-telemetry", "workspaceId": "MyWorkspace", "functions": { "dataReader": { "implementedBy": { "lambda": { "arn": "lambdaArn" } } } }, "propertyDefinitions": { "telemetryType": { "dataType": { "type": "STRING" }, "isExternalId": false, "isStoredExternally": false, "isTimeSeries": false, "isRequiredInEntity": true }, "telemetryId": { "dataType": { "type": "STRING" }, "isExternalId": true, "isStoredExternally": false, "isTimeSeries": false, "isRequiredInEntity": true }, "Temperature": { "dataType": { "type": "DOUBLE" }, "isExternalId": false, "isTimeSeries": true, "isStoredExternally": true, "isRequiredInEntity": false } } }Elemen kunci dari jenis komponen adalah sebagai berikut:
-
Pro
telemetryIdperti mengidentifikasi kunci unik dari item fisik di sumber data yang sesuai. Konektor data menggunakan properti ini sebagai kondisi filter untuk hanya menanyakan nilai yang terkait dengan item yang diberikan. Selain itu, jika Anda menyertelemetryIdtakan nilai properti dalam respons API bidang data, maka sisi klien mengambil ID dan dapat melakukan pencarian terbalik jika perlu. -
Bid
lambdaArnang mengidentifikasi fungsi Lambda yang melibatkan tipe komponen. -
isRequiredInEntityBendera memberlakukan pembuatan ID. Bendera ini diperlukan agar ketika komponen dibuat, ID item juga dibuat instansiasi. -
Dit
TelemetryIdambahkan ke tipe komponen sebagai id eksternal sehingga item dapat diidentifikasi dalam tabel Timestream.
-
Membuat komponen dengan tipe komponen
Untuk menggunakan jenis komponen yang Anda buat, Anda harus membuat komponen dan melampirkannya ke entitas tempat Anda ingin mengambil data. Langkah-langkah berikut merinci proses pembuatan komponen itu:
Navigasikan ke konsol AWS IoT TwinMaker
tersebut. Pilih dan buka ruang kerja yang sama di mana Anda membuat jenis komponen.
Arahkan ke halaman entitas.
Buat entitas baru atau pilih entitas yang ada dari tabel.
Setelah Anda memilih entitas yang ingin Anda gunakan, pilih Tambahkan komponen untuk membuka halaman Tambah komponen.
Berikan nama komponen dan untuk Type, pilih jenis komponen yang Anda buat dengan template di 1. Buat tipe komponen dasar yang valid.
-
Jadikan jenis komponen Anda memanggil konektor Lambda
Konektor Lambda perlu mengakses sumber data dan menghasilkan pernyataan kueri berdasarkan input dan meneruskannya ke sumber data. Contoh berikut menunjukkan template permintaan JSON yang melakukan ini.
{ "workspaceId": "MyWorkspace", "entityId": "MyEntity", "componentName": "TelemetryData", "selectedProperties": ["Temperature"], "startTime": "2022-08-25T00:00:00Z", "endTime": "2022-08-25T00:00:05Z", "maxResults": 3, "orderByTime": "ASCENDING", "properties": { "telemetryType": { "definition": { "dataType": { "type": "STRING" }, "isExternalId": false, "isFinal": false, "isImported": false, "isInherited": false, "isRequiredInEntity": false, "isStoredExternally": false, "isTimeSeries": false }, "value": { "stringValue": "Mixer" } }, "telemetryId": { "definition": { "dataType": { "type": "STRING" }, "isExternalId": true, "isFinal": true, "isImported": false, "isInherited": false, "isRequiredInEntity": true, "isStoredExternally": false, "isTimeSeries": false }, "value": { "stringValue": "item_A001" } }, "Temperature": { "definition": { "dataType": { "type": "DOUBLE", }, "isExternalId": false, "isFinal": false, "isImported": true, "isInherited": false, "isRequiredInEntity": false, "isStoredExternally": false, "isTimeSeries": true } } } }Elemen kunci dari permintaan:
-
Ini
selectedPropertiesadalah daftar yang Anda isi dengan properti yang Anda inginkan pengukuran Timestream. -
Bidang
startDateTimestartTime,EndDateTime,, danendTimemenentukan rentang waktu untuk permintaan. Ini menentukan rentang sampel untuk pengukuran yang dikembalikan. -
Ini
entityIdadalah nama entitas tempat Anda menanyakan data. -
Ini
componentNameadalah nama komponen dari mana Anda menanyakan data. -
Gunakan
orderByTimebidang untuk mengatur urutan di mana hasil ditampilkan.
Dalam contoh permintaan sebelumnya, kita berharap mendapatkan serangkaian sampel untuk properti yang dipilih selama jendela waktu yang diberikan untuk item tertentu, dengan urutan waktu yang dipilih. Pernyataan respons dapat diringkas sebagai berikut:
{ "propertyValues": [ { "entityPropertyReference": { "entityId": "MyEntity", "componentName": "TelemetryData", "propertyName": "Temperature" }, "values": [ { "time": "2022-08-25T00:00:00Z", "value": { "doubleValue": 588.168 } }, { "time": "2022-08-25T00:00:01Z", "value": { "doubleValue": 592.4224 } }, { "time": "2022-08-25T00:00:02Z", "value": { "doubleValue": 594.9383 } } ] } ], "nextToken": "..." } -
Perbarui tipe komponen Anda untuk memiliki dua properti
Template JSON berikut menunjukkan tipe komponen yang valid dengan dua properti:
{ "componentTypeId": "com.example.timestream-telemetry", "workspaceId": "MyWorkspace", "functions": { "dataReader": { "implementedBy": { "lambda": { "arn": "lambdaArn" } } } }, "propertyDefinitions": { "telemetryType": { "dataType": { "type": "STRING" }, "isExternalId": false, "isStoredExternally": false, "isTimeSeries": false, "isRequiredInEntity": true }, "telemetryId": { "dataType": { "type": "STRING" }, "isExternalId": true, "isStoredExternally": false, "isTimeSeries": false, "isRequiredInEntity": true }, "Temperature": { "dataType": { "type": "DOUBLE" }, "isExternalId": false, "isTimeSeries": true, "isStoredExternally": true, "isRequiredInEntity": false }, "RPM": { "dataType": { "type": "DOUBLE" }, "isExternalId": false, "isTimeSeries": true, "isStoredExternally": true, "isRequiredInEntity": false } } }Perbarui konektor Lambda untuk menangani properti kedua
API AWS IoT TwinMaker bidang data mendukung kueri beberapa properti dalam satu permintaan, dan AWS IoT TwinMaker mengikuti permintaan tunggal ke konektor dengan menyediakan daftar
selectedProperties.Permintaan JSON berikut menunjukkan template yang dimodifikasi yang sekarang mendukung permintaan untuk dua properti.
{ "workspaceId": "MyWorkspace", "entityId": "MyEntity", "componentName": "TelemetryData", "selectedProperties": ["Temperature", "RPM"], "startTime": "2022-08-25T00:00:00Z", "endTime": "2022-08-25T00:00:05Z", "maxResults": 3, "orderByTime": "ASCENDING", "properties": { "telemetryType": { "definition": { "dataType": { "type": "STRING" }, "isExternalId": false, "isFinal": false, "isImported": false, "isInherited": false, "isRequiredInEntity": false, "isStoredExternally": false, "isTimeSeries": false }, "value": { "stringValue": "Mixer" } }, "telemetryId": { "definition": { "dataType": { "type": "STRING" }, "isExternalId": true, "isFinal": true, "isImported": false, "isInherited": false, "isRequiredInEntity": true, "isStoredExternally": false, "isTimeSeries": false }, "value": { "stringValue": "item_A001" } }, "Temperature": { "definition": { "dataType": { "type": "DOUBLE" }, "isExternalId": false, "isFinal": false, "isImported": true, "isInherited": false, "isRequiredInEntity": false, "isStoredExternally": false, "isTimeSeries": true } }, "RPM": { "definition": { "dataType": { "type": "DOUBLE" }, "isExternalId": false, "isFinal": false, "isImported": true, "isInherited": false, "isRequiredInEntity": false, "isStoredExternally": false, "isTimeSeries": true } } } }Demikian pula, respons yang sesuai juga diperbarui, seperti yang ditunjukkan pada contoh berikut:
{ "propertyValues": [ { "entityPropertyReference": { "entityId": "MyEntity", "componentName": "TelemetryData", "propertyName": "Temperature" }, "values": [ { "time": "2022-08-25T00:00:00Z", "value": { "doubleValue": 588.168 } }, { "time": "2022-08-25T00:00:01Z", "value": { "doubleValue": 592.4224 } }, { "time": "2022-08-25T00:00:02Z", "value": { "doubleValue": 594.9383 } } ] }, { "entityPropertyReference": { "entityId": "MyEntity", "componentName": "TelemetryData", "propertyName": "RPM" }, "values": [ { "time": "2022-08-25T00:00:00Z", "value": { "doubleValue": 59 } }, { "time": "2022-08-25T00:00:01Z", "value": { "doubleValue": 60 } }, { "time": "2022-08-25T00:00:02Z", "value": { "doubleValue": 60 } } ] } ], "nextToken": "..." }catatan
Dalam hal pagination untuk kasus ini, ukuran halaman dalam permintaan berlaku untuk semua properti. Ini berarti bahwa dengan lima properti dalam kueri dan ukuran halaman 100, jika ada cukup titik data di sumber, Anda harus mengharapkan untuk melihat 100 titik data per properti, dengan total 500 titik data.
Untuk contoh implementasi, lihat contoh konektor Snowflake
pada GitHub.
Meningkatkan konektor data Anda
Menangani pengecualian
Aman bagi konektor Lambda untuk melempar pengecualian. Dalam panggilan API bidang data, AWS IoT TwinMaker layanan menunggu fungsi Lambda mengembalikan respons. Jika implementasi konektor melempar pengecualian, AWS IoT TwinMaker menerjemahkan jenis pengecualian menjadiConnectorFailure, membuat klien API sadar bahwa masalah terjadi di dalam konektor.
Penanganan pagination
Dalam contoh, Timestream menyediakan fungsi utilitas
Ketika token baru dikembalikan AWS IoT TwinMaker melalui antarmuka respons konektor, token dienkripsi sebelum dikembalikan ke klien API. Ketika token disertakan dalam permintaan lain, AWS IoT TwinMaker dekripsi sebelum meneruskannya ke konektor Lambda. Kami menyarankan Anda menghindari menambahkan informasi sensitif ke token.
Menguji konektor Anda
Meskipun Anda masih dapat memperbarui implementasi setelah Anda menautkan konektor ke jenis komponen, kami sangat menyarankan Anda memverifikasi konektor Lambda sebelum mengintegrasikan dengan AWS IoT TwinMaker.
Ada beberapa cara untuk menguji konektor Lambda Anda: Anda dapat menguji konektor Lambda di konsol Lambda atau secara lokal di. AWS CDK
Untuk informasi selengkapnya tentang pengujian fungsi Lambda Anda, lihat Meng uji fungsi Lambda dan Aplikasi pengujian AWS CDK lokal.
Keamanan
Untuk dokumentasi tentang praktik terbaik keamanan dengan Timestream, lihat Keamanan di Timestream.
Untuk contoh pencegahan injeksi SQL, lihat skrip Python berikut
Membuat AWS IoT TwinMaker sumber daya
Setelah Anda menerapkan fungsi Lambda, Anda dapat membuat AWS IoT TwinMaker sumber daya seperti jenis komponen, entitas, dan komponen melalui AWS IoT TwinMaker konsol
catatan
Jika Anda mengikuti petunjuk penyiapan dalam GitHub sampel, semua AWS IoT TwinMaker sumber daya tersedia secara otomatis. Anda dapat memeriksa definisi tipe komponen dalam AWS IoT TwinMaker GitHub sampel
Pengujian integrasi
Sebaiknya lakukan pengujian terintegrasi dengan AWS IoT TwinMaker untuk memverifikasi bahwa kueri bidang data berfungsi dari ujung ke ujung. Anda dapat melakukannya melalui GetPropertyValueHistory API atau dengan mudah di AWS IoT TwinMaker konsol
Di AWS IoT TwinMaker konsol, buka detail komponen dan kemudian di bawah Test, Anda akan melihat semua properti dalam komponen terdaftar di sana. Area Uji konsol memungkinkan Anda untuk menguji properti deret waktu serta properti non-deret waktu. Untuk properti deret waktu, Anda juga dapat menggunakan GetPropertyValueHistory API dan untuk properti non-deret waktu menggunakan API. GetPropertyValue Jika konektor Lambda Anda mendukung beberapa kueri properti, Anda dapat memilih lebih dari satu properti.
Apa selanjutnya
Anda sekarang dapat mengatur dasbor AWS IoT TwinMaker Grafana untuk memvisualisasikan metrik. Anda juga dapat menjelajahi sampel konektor data lainnya di GitHub repositori AWS IoT TwinMaker sampel