Tutorial: Mengembangkan komponen Greengrass yang menangguhkan pembaruan komponen - AWS IoT Greengrass

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

Tutorial: Mengembangkan komponen Greengrass yang menangguhkan pembaruan komponen

Anda dapat menyelesaikan tutorial ini untuk mengembangkan komponen yang menantang over-the-air pembaruan penyebaran. Saat menerapkan pembaruan ke perangkat, Anda mungkin ingin menunda pembaruan berdasarkan kondisi, seperti berikut ini:

  • Perangkat ini memiliki tingkat baterai rendah.

  • Perangkat menjalankan proses atau pekerjaan yang tidak dapat diganggu.

  • Perangkat ini memiliki koneksi internet terbatas atau mahal.

catatan

SEBUAHbagianadalah modul perangkat lunak yang berjalanAWS IoT Greengrassperangkat inti. Komponen memungkinkan Anda untuk membuat dan mengelola aplikasi yang kompleks sebagai blok bangunan diskrit yang dapat Anda gunakan kembali dari satu perangkat inti Greengrass ke yang lain.

Dalam tutorial ini, Anda melakukan hal-hal berikut:

  1. Instal Greengrass Development Kit CLI (GDK CLI) di komputer pengembangan Anda. GDK CLI menyediakan fitur yang membantu Anda mengembangkan komponen Greengrass kustom.

  2. Kembangkan komponen Hello World yang menunda pembaruan komponen saat level baterai perangkat inti berada di bawah ambang batas. Komponen ini berlangganan untuk memperbarui pemberitahuan menggunakanSubscribeToComponentUpdatesOperasi IPC. Ketika menerima pemberitahuan, ia memeriksa apakah level baterai lebih rendah dari ambang batas yang dapat disesuaikan. Jika tingkat baterai di bawah ambang batas, itu menunda pembaruan selama 30 detik menggunakanDeferComponentUpdateOperasi IPC. Anda mengembangkan komponen ini pada komputer pengembangan Anda menggunakan GDK CLI.

    catatan

    Komponen ini membaca tingkat baterai dari file yang Anda buat pada perangkat inti untuk meniru baterai nyata, sehingga Anda dapat menyelesaikan tutorial ini pada perangkat inti tanpa baterai.

  3. Publikasikan komponen itu keAWS IoT Greengrasslayanan.

  4. Menyebarkan komponen itu dariAWS Cloudke perangkat inti Greengrass untuk mengujinya. Kemudian, Anda memodifikasi level baterai virtual pada perangkat inti, dan membuat penerapan tambahan untuk melihat bagaimana perangkat inti menolak pembaruan saat level baterai rendah.

Anda dapat menghabiskan 20-30 menit pada tutorial ini.

Prasyarat

Untuk menyelesaikan tutorial ini, Anda memerlukan hal berikut:

  • Sebuah Akun AWS. Jika Anda tidak memilikinya, lihat Siapkan Akun AWS.

  • Pengguna AWS Identity and Access Management (IAM) dengan izin administrator

  • Sebuah perangkat inti Greengrass dengan koneksi internet. Untuk informasi lebih lanjut tentang cara menyiapkan perangkat inti, lihat Menyiapkan perangkat inti AWS IoT Greengrass.

    • Python3.6 atau yang lebih baru telah terinstal untuk semua pengguna di perangkat inti dan ditambahkan ke perangkat intiPATHvariabel lingkungan. Pada Windows, Anda juga harus memiliki Python Launcher untuk Windows diinstal untuk semua pengguna.

      penting

      Di Windows, Python tidak diinstal untuk semua pengguna secara default. Ketika Anda menginstal Python, Anda harus menyesuaikan instalasi untuk mengkonfigurasinya untukAWS IoT GreengrassPerangkat lunak inti untuk menjalankan skrip Python. Misalnya, jika Anda menggunakan installer Python grafis, lakukan hal berikut:

      1. PilihInstal peluncur untuk semua pengguna (disarankan).

      2. Pilih Customize installation.

      3. Pilih Next.

      4. Pilih Install for all users.

      5. Pilih Add Python to environment variables.

      6. Pilih Instal.

      Untuk informasi selengkapnya, lihatMenggunakan Python di Windowsdi dalamDokumentasi Python 3.

  • Komputer pengembangan seperti Windows, macOS, atau UNIX dengan koneksi internet.

Langkah 1: Instal Greengrass Development Kit CLI

YangKit Pengembangan Greengrass CLI (GDK CLI)menyediakan fitur yang membantu Anda mengembangkan komponen Greengrass kustom. Anda dapat menggunakan GDK CLI untuk membuat, membangun, dan mempublikasikan komponen kustom.

Jika Anda belum menginstal GDK CLI di komputer pengembangan Anda, selesaikan langkah-langkah berikut untuk menginstalnya.

Pasang versi terbaru dari GDK CLI

  1. Pada komputer pengembangan Anda, jalankan perintah berikut untuk menginstal versi terbaru GDK CLI dari versi terbaru GDK CLI.GitHubrepositori.

    python3 -m pip install -U git+https://github.com/aws-greengrass/aws-greengrass-gdk-cli.git@v1.1.0
  2. Jalankan perintah berikut untuk memverifikasi bahwa GDK CLI berhasil diinstal.

    gdk --help

    Jikagdkperintah tidak ditemukan, tambahkan folder ke PATH.

    • Di perangkat Linux, tambahkan/home/MyUser/.local/binke PATH, dan gantiMyUserdengan nama pengguna Anda.

    • Pada perangkat Windows, tambahkanPythonPath\Scriptske PATH, dan gantiPythonPathdengan path ke folder Python di perangkat Anda.

Langkah 2: Kembangkan komponen yang menentang pembaruan

Di bagian ini, Anda mengembangkan komponen Hello World dengan Python yang menangkal pembaruan komponen saat level baterai perangkat inti berada di bawah ambang batas yang Anda konfigurasikan saat Anda menerapkan komponen. Dalam komponen ini, Anda menggunakanantarmuka komunikasi antar proses (IPC)di dalamAWS IoT Device SDKv2 untuk Python. Anda menggunakanSubscribeToComponentUpdatesOperasi IPC untuk menerima pemberitahuan saat perangkat inti menerima deployment. Kemudian, Anda menggunakanDeferComponentUpdateOperasi IPC untuk menunda atau mengakui pembaruan berdasarkan tingkat baterai perangkat.

Untuk mengembangkan komponen Hello World yang menentang pembaruan

  1. Di komputer pengembangan Anda, buat folder untuk kode sumber komponen.

    mkdir com.example.BatteryAwareHelloWorld cd com.example.BatteryAwareHelloWorld
  2. Gunakan editor teks untuk membuat file dengan namagdk-config.json. GDK CLI membaca dariFile konfigurasi GDK CLIbernamagdk-config.json, untuk membangun dan mempublikasikan komponen. File konfigurasi ini ada di root folder komponen.

    Sebagai contoh, pada sistem berbasis Linux, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat file.

    nano gdk-config.json

    Salin JSON berikut ke dalam file.

    • GantiAmazondengan namamu.

    • Gantius-west-2denganWilayah AWSdi mana perangkat inti Anda beroperasi. GDK CLI menerbitkan komponen dalam hal iniWilayah AWS.

    • Gantigreengrass-component-artifactsdengan prefiks bucket S3 untuk digunakan. Saat Anda menggunakan GDK CLI untuk mempublikasikan komponen, GDK CLI mengunggah artefak komponen ke bucket S3 yang namanya terbentuk dari nilai ini,Wilayah AWS,Akun AWSID menggunakan format berikut:bucketPrefix-region-accountId.

      Misalnya, jika Anda menentukangreengrass-component-artifactsdanus-west-2,Akun AWSID adalah123456789012, GDK CLI menggunakan bucket S3 bernamagreengrass-component-artifacts-us-west-2-123456789012.

    { "component": { "com.example.BatteryAwareHelloWorld": { "author": "Amazon", "version": "NEXT_PATCH", "build": { "build_system" : "zip" }, "publish": { "region": "us-west-2", "bucket": "greengrass-component-artifacts" } } }, "gdk_version": "1.0.0" }

    File konfigurasi menentukan hal berikut:

    • Versi yang akan digunakan saat GDK CLI menerbitkan komponen Greengrass keAWS IoT GreengrassLayanan cloud.NEXT_PATCHmenentukan untuk memilih versi patch berikutnya setelah versi terbaru yang tersedia diAWS IoT GreengrassLayanan cloud. Jika komponen tidak memiliki versi diAWS IoT Greengrasslayanan cloud belum, GDK CLI menggunakan1.0.0.

    • Sistem build untuk komponen. Saat Anda menggunakanzipmembangun sistem, GDK CLI paket sumber komponen ke dalam file ZIP yang menjadi artefak tunggal komponen.

    • YangWilayah AWSdimana GDK CLI menerbitkan komponen Greengrass.

    • Prefiks bucket S3 tempat GDK CLI mengunggah artefak komponen.

  3. Gunakan editor teks untuk membuat kode sumber komponen pada file yang bernamamain.py.

    Sebagai contoh, pada sistem berbasis Linux, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat file.

    nano main.py

    Salin kode Python berikut ke file.

    import json import os import sys import time import traceback from pathlib import Path from awsiot.greengrasscoreipc.clientv2 import GreengrassCoreIPCClientV2 HELLO_WORLD_PRINT_INTERVAL = 15 # Seconds DEFER_COMPONENT_UPDATE_INTERVAL = 30 * 1000 # Milliseconds class BatteryAwareHelloWorldPrinter(): def __init__(self, ipc_client: GreengrassCoreIPCClientV2, battery_file_path: Path, battery_threshold: float): self.battery_file_path = battery_file_path self.battery_threshold = battery_threshold self.ipc_client = ipc_client self.subscription_operation = None def on_component_update_event(self, event): try: if event.pre_update_event is not None: if self.is_battery_below_threshold(): self.defer_update(event.pre_update_event.deployment_id) print('Deferred update for deployment %s' % event.pre_update_event.deployment_id) else: self.acknowledge_update( event.pre_update_event.deployment_id) print('Acknowledged update for deployment %s' % event.pre_update_event.deployment_id) elif event.post_update_event is not None: print('Applied update for deployment') except: traceback.print_exc() def subscribe_to_component_updates(self): if self.subscription_operation == None: # SubscribeToComponentUpdates returns a tuple with the response and the operation. _, self.subscription_operation = self.ipc_client.subscribe_to_component_updates( on_stream_event=self.on_component_update_event) def close_subscription(self): if self.subscription_operation is not None: self.subscription_operation.close() self.subscription_operation = None def defer_update(self, deployment_id): self.ipc_client.defer_component_update( deployment_id=deployment_id, recheck_after_ms=DEFER_COMPONENT_UPDATE_INTERVAL) def acknowledge_update(self, deployment_id): # Specify recheck_after_ms=0 to acknowledge a component update. self.ipc_client.defer_component_update( deployment_id=deployment_id, recheck_after_ms=0) def is_battery_below_threshold(self): return self.get_battery_level() < self.battery_threshold def get_battery_level(self): # Read the battery level from the virtual battery level file. with self.battery_file_path.open('r') as f: data = json.load(f) return float(data['battery_level']) def print_message(self): message = 'Hello, World!' if self.is_battery_below_threshold(): message += ' Battery level (%d) is below threshold (%d), so the component will defer updates' % ( self.get_battery_level(), self.battery_threshold) else: message += ' Battery level (%d) is above threshold (%d), so the component will acknowledge updates' % ( self.get_battery_level(), self.battery_threshold) print(message) def main(): # Read the battery threshold and virtual battery file path from command-line args. args = sys.argv[1:] battery_threshold = float(args[0]) battery_file_path = Path(args[1]) print('Reading battery level from %s and deferring updates when below %d' % ( str(battery_file_path), battery_threshold)) try: # Create an IPC client and a Hello World printer that defers component updates. ipc_client = GreengrassCoreIPCClientV2() hello_world_printer = BatteryAwareHelloWorldPrinter( ipc_client, battery_file_path, battery_threshold) hello_world_printer.subscribe_to_component_updates() try: # Keep the main thread alive, or the process will exit. while True: hello_world_printer.print_message() time.sleep(HELLO_WORLD_PRINT_INTERVAL) except InterruptedError: print('Subscription interrupted') hello_world_printer.close_subscription() except Exception: print('Exception occurred', file=sys.stderr) traceback.print_exc() exit(1) if __name__ == '__main__': main()

    Aplikasi Python ini melakukan hal berikut:

    • Membaca level baterai perangkat inti dari file level baterai virtual yang akan Anda buat di perangkat inti nanti. File level baterai virtual ini meniru baterai asli, sehingga Anda dapat menyelesaikan tutorial ini pada perangkat inti yang tidak memiliki baterai.

    • Membaca argumen baris perintah untuk ambang baterai dan jalur ke file level baterai virtual. Resep komponen menetapkan argumen baris perintah ini berdasarkan parameter konfigurasi, sehingga Anda dapat menyesuaikan nilai-nilai ini ketika Anda menerapkan komponen.

    • Menggunakan klien IPC V2 diAWS IoT Device SDKv2 untuk Pythonuntuk berkomunikasi denganAWS IoT GreengrassPerangkat lunak inti. Dibandingkan dengan klien IPC asli, klien IPC V2 mengurangi jumlah kode yang perlu Anda tulis untuk menggunakan IPC dalam komponen khusus.

    • Berlangganan untuk memperbarui pemberitahuan menggunakanSubscribeToComponentUpdatesOperasi IPC. YangAWS IoT GreengrassPerangkat lunak inti mengirimkan pemberitahuan sebelum dan sesudah setiap penyebaran. Komponen memanggil fungsi berikut setiap kali menerima notifikasi. Jika notifikasi untuk penerapan yang akan datang, komponen akan memeriksa apakah level baterai lebih rendah dari ambang batas. Jika level baterai di bawah ambang batas, komponen akan menentang pembaruan selama 30 detik menggunakanDeferComponentUpdateOperasi IPC. Jika tidak, jika level baterai tidak di bawah ambang batas, komponen mengakui pembaruan, sehingga pembaruan dapat dilanjutkan.

      def on_component_update_event(self, event): try: if event.pre_update_event is not None: if self.is_battery_below_threshold(): self.defer_update(event.pre_update_event.deployment_id) print('Deferred update for deployment %s' % event.pre_update_event.deployment_id) else: self.acknowledge_update( event.pre_update_event.deployment_id) print('Acknowledged update for deployment %s' % event.pre_update_event.deployment_id) elif event.post_update_event is not None: print('Applied update for deployment') except: traceback.print_exc()
      catatan

      YangAWS IoT GreengrassPerangkat lunak inti tidak mengirim pemberitahuan pembaruan untuk penyebaran lokal, jadi Anda menerapkan komponen ini menggunakanAWS IoT Greengrasslayanan cloud untuk mengujinya.

  4. Gunakan editor teks untuk membuat resep komponen pada file yang bernamarecipe.jsonataurecipe.yaml. Komponenresepmenentukan metadata komponen, parameter konfigurasi default, dan skrip siklus hidup khusus platform.

    JSON

    Sebagai contoh, pada sistem berbasis Linux, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat file.

    nano recipe.json

    Salin JSON berikut ke dalam file.

    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "COMPONENT_NAME", "ComponentVersion": "COMPONENT_VERSION", "ComponentDescription": "This Hello World component defers updates when the battery level is below a threshold.", "ComponentPublisher": "COMPONENT_AUTHOR", "ComponentConfiguration": { "DefaultConfiguration": { "BatteryThreshold": 50, "LinuxBatteryFilePath": "/home/ggc_user/virtual_battery.json", "WindowsBatteryFilePath": "C:\\Users\\ggc_user\\virtual_battery.json" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "Install": "python3 -m pip install --user awsiotsdk --upgrade", "Run": "python3 -u {artifacts:decompressedPath}/com.example.BatteryAwareHelloWorld/main.py \"{configuration:/BatteryThreshold}\" \"{configuration:/LinuxBatteryFilePath}\"" }, "Artifacts": [ { "URI": "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/com.example.BatteryAwareHelloWorld.zip", "Unarchive": "ZIP" } ] }, { "Platform": { "os": "windows" }, "Lifecycle": { "Install": "py -3 -m pip install --user awsiotsdk --upgrade", "Run": "py -3 -u {artifacts:decompressedPath}/com.example.BatteryAwareHelloWorld/main.py \"{configuration:/BatteryThreshold}\" \"{configuration:/WindowsBatteryFilePath}\"" }, "Artifacts": [ { "URI": "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/com.example.BatteryAwareHelloWorld.zip", "Unarchive": "ZIP" } ] } ] }
    YAML

    Sebagai contoh, pada sistem berbasis Linux, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat file.

    nano recipe.yaml

    Salin YAL berikut ke file.

    --- RecipeFormatVersion: "2020-01-25" ComponentName: "COMPONENT_NAME" ComponentVersion: "COMPONENT_VERSION" ComponentDescription: "This Hello World component defers updates when the battery level is below a threshold." ComponentPublisher: "COMPONENT_AUTHOR" ComponentConfiguration: DefaultConfiguration: BatteryThreshold: 50 LinuxBatteryFilePath: "/home/ggc_user/virtual_battery.json" WindowsBatteryFilePath: "C:\\Users\\ggc_user\\virtual_battery.json" Manifests: - Platform: os: linux Lifecycle: Install: python3 -m pip install --user awsiotsdk --upgrade Run: python3 -u {artifacts:decompressedPath}/com.example.BatteryAwareHelloWorld/main.py "{configuration:/BatteryThreshold}" "{configuration:/LinuxBatteryFilePath}" Artifacts: - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/com.example.BatteryAwareHelloWorld.zip" Unarchive: ZIP - Platform: os: windows Lifecycle: Install: py -3 -m pip install --user awsiotsdk --upgrade Run: py -3 -u {artifacts:decompressedPath}/com.example.BatteryAwareHelloWorld/main.py "{configuration:/BatteryThreshold}" "{configuration:/WindowsBatteryFilePath}" Artifacts: - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/com.example.BatteryAwareHelloWorld.zip" Unarchive: ZIP

    Resep ini menentukan hal berikut:

    • Parameter konfigurasi default untuk ambang baterai, jalur file baterai virtual pada perangkat inti Linux, dan jalur file baterai virtual pada perangkat inti Windows.

    • SesiInstallsiklus hidup yang menginstal versi terbaruAWS IoT Device SDKv2 untuk Python.

    • SEBUAHRunsiklus hidup yang menjalankan aplikasi Python dimain.py.

    • Placeholder, sepertiCOMPONENT_NAMEdanCOMPONENT_VERSION, di mana GDK CLI menggantikan informasi ketika membangun resep komponen.

    Untuk informasi lebih lanjut tentang resep komponen, lihatReferensi resep komponen AWS IoT Greengrass.

Langkah 3: Publikasikan komponen keAWS IoT Greengrasslayanan

Di bagian ini, Anda mempublikasikan komponen Hello World keAWS IoT GreengrassLayanan cloud. Setelah komponen tersedia diAWS IoT Greengrasslayanan cloud, Anda dapat men-deploy ke perangkat inti. Anda menggunakan GDK CLI untuk menerbitkan komponen dari komputer pengembangan Anda ke komputer pengembanganAWS IoT GreengrassLayanan cloud. GDK CLI mengunggah resep dan artefak komponen untuk Anda.

Untuk mempublikasikan komponen Hello World keAWS IoT Greengrasslayanan

  1. Jalankan perintah berikut untuk membangun komponen menggunakan GDK CLI. Yangkomponen membangun perintahmembuat resep dan artefak berdasarkan file konfigurasi GDK CLI. Dalam proses ini, GDK CLI membuat file ZIP yang berisi kode sumber komponen.

    gdk component build

    Anda akan melihat pesan yang mirip dengan contoh berikut ini.

    [2022-04-28 11:20:16] INFO - Getting project configuration from gdk-config.json [2022-04-28 11:20:16] INFO - Found component recipe file 'recipe.yaml' in the project directory. [2022-04-28 11:20:16] INFO - Building the component 'com.example.BatteryAwareHelloWorld' with the given project configuration. [2022-04-28 11:20:16] INFO - Using 'zip' build system to build the component. [2022-04-28 11:20:16] WARNING - This component is identified as using 'zip' build system. If this is incorrect, please exit and specify custom build command in the 'gdk-config.json'. [2022-04-28 11:20:16] INFO - Zipping source code files of the component. [2022-04-28 11:20:16] INFO - Copying over the build artifacts to the greengrass component artifacts build folder. [2022-04-28 11:20:16] INFO - Updating artifact URIs in the recipe. [2022-04-28 11:20:16] INFO - Creating component recipe in 'C:\Users\finthomp\greengrassv2\com.example.BatteryAwareHelloWorld\greengrass-build\recipes'.
  2. Jalankan perintah berikut untuk mempublikasikan komponen keAWS IoT GreengrassLayanan cloud. Yangkomponen mempublikasikan perintahupload komponen artefak file ZIP ke bucket S3. Kemudian, memperbarui URI S3 file ZIP dalam resep komponen dan mengunggah resep keAWS IoT Greengrasslayanan. Dalam proses ini, GDK CLI memeriksa versi komponen Hello World yang sudah tersedia diAWS IoT Greengrasslayanan cloud, sehingga dapat memilih versi patch berikutnya setelah versi itu. Jika komponen belum ada, GDK CLI menggunakan versi1.0.0.

    gdk component publish

    Anda akan melihat pesan yang mirip dengan contoh berikut ini. Output memberi tahu Anda versi komponen yang dibuat oleh GDK CLI.

    [2022-04-28 11:20:29] INFO - Getting project configuration from gdk-config.json [2022-04-28 11:20:29] INFO - Found component recipe file 'recipe.yaml' in the project directory. [2022-04-28 11:20:29] INFO - Found credentials in shared credentials file: ~/.aws/credentials [2022-04-28 11:20:30] INFO - No private version of the component 'com.example.BatteryAwareHelloWorld' exist in the account. Using '1.0.0' as the next version to create. [2022-04-28 11:20:30] INFO - Publishing the component 'com.example.BatteryAwareHelloWorld' with the given project configuration. [2022-04-28 11:20:30] INFO - Uploading the component built artifacts to s3 bucket. [2022-04-28 11:20:30] INFO - Uploading component artifacts to S3 bucket: greengrass-component-artifacts-us-west-2-123456789012. If this is your first time using this bucket, add the 's3:GetObject' permission to each core device's token exchange role to allow it to download the component artifacts. For more information, see https://docs.aws.amazon.com/greengrass/v2/developerguide/device-service-role.html. [2022-04-28 11:20:30] INFO - Not creating an artifacts bucket as it already exists. [2022-04-28 11:20:30] INFO - Updating the component recipe com.example.BatteryAwareHelloWorld-1.0.0. [2022-04-28 11:20:31] INFO - Creating a new greengrass component com.example.BatteryAwareHelloWorld-1.0.0 [2022-04-28 11:20:31] INFO - Created private version '1.0.0' of the component in the account.'com.example.BatteryAwareHelloWorld'.
  3. Salin nama bucket S3 dari output. Anda menggunakan nama bucket nanti untuk memungkinkan perangkat inti mengunduh artefak komponen dari bucket ini.

  4. (Opsional) Lihat komponen diAWS IoT Greengrasskonsol untuk memverifikasi bahwa itu upload berhasil. Lakukan hal berikut:

    1. Pada menu navigasi konsol AWS IoT Greengrass tersebut, pilih Komponen.

    2. PadaKomponenhalaman, pilihKomponen sayatab, dan kemudian pilihcom.example.BatteryAwareHelloWorld.

      Di halaman ini, Anda dapat melihat resep komponen dan informasi lainnya tentang komponen.

  5. Izinkan perangkat inti mengakses artefak komponen dalam bucket S3.

    Setiap perangkat inti memilikiPerangkat inti peran IAMyang memungkinkannya untuk berinteraksi denganAWS IoTdan mengirim log keAWSCloud. Peran perangkat ini tidak mengizinkan akses ke bucket S3 secara default, sehingga Anda harus membuat dan melampirkan kebijakan yang memungkinkan perangkat inti mengambil artefak komponen dari bucket S3.

    Jika peran perangkat Anda sudah memungkinkan akses ke bucket S3, Anda dapat melewati langkah ini. Jika tidak, buat kebijakan IAM yang memungkinkan akses dan melampirkannya pada peran, sebagai berikut:

    1. DiKonsol IAMmenu navigasi, pilihKebijakan, dan kemudian pilihBuat kebijakan.

    2. Pada tab JSON, ganti placeholder konten dengan kebijakan berikut. Gantigreengrass-component-artifacts-us-123456789012dengan nama bucket S3 tempat GDK CLI mengunggah artefak komponen.

      Misalnya, jika Anda menentukangreengrass-component-artifactsdanus-west-2dalam file konfigurasi GDK CLI, danAkun AWSID adalah123456789012, GDK CLI menggunakan bucket S3 bernamagreengrass-component-artifacts-us-west-2-123456789012.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::greengrass-component-artifacts-us-west-2-123456789012/*" } ] }
    3. Pilih Berikutnya: Tag, lalu pilih Berikutnya: Peninjauan.

    4. Untuk Nama, masukkan MyGreengrassV2ComponentArtifactPolicy.

    5. Pilih Buat kebijakan.

    6. DiKonsol IAMmenu navigasi, pilihPeran, dan kemudian pilih nama peran untuk perangkat inti. Anda menentukan nama peran ini saat Anda menginstalAWS IoT GreengrassPerangkat lunak inti. Jika Anda tidak menentukan nama, defaultnyaGreengrassV2TokenExchangeRole.

    7. Di bawahIzin,Tambahkan izin,Lampirkan kebijakan.

    8. PadaTambahkan izinhalaman, pilih kotak centang di sampingMyGreengrassV2ComponentArtifactPolicykebijakan yang Anda buat, lalu pilihLampirkan kebijakan.

Langkah 4: Menerapkan dan menguji komponen pada perangkat inti

Di bagian ini, Anda men-deploy komponen ke perangkat inti untuk menguji fungsinya. Pada perangkat inti, Anda membuat file level baterai virtual untuk meniru baterai sungguhan. Kemudian, Anda membuat penerapan tambahan dan mengamati file log komponen pada perangkat inti untuk melihat komponen menunda dan mengakui pembaruan.

Untuk menyebarkan dan menguji komponen Hello World yang menangguhkan pembaruan

  1. Gunakan editor teks untuk membuat file level baterai virtual. File ini meniru baterai sungguhan.

    • Pada perangkat inti Linux, buat file bernama/home/ggc_user/virtual_battery.json. Jalankan editor teks dengansudoizin.

    • Pada perangkat inti Windows, buat file bernamaC:\Users\ggc_user\virtual_battery.json. Jalankan editor teks sebagai administrator.

    Sebagai contoh, pada sistem berbasis Linux, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat file.

    sudo nano /home/ggc_user/virtual_battery.json

    Salin JSON berikut ke dalam file.

    { "battery_level": 50 }
  2. Men-deploy komponen Hello World ke perangkat inti. Lakukan hal berikut:

    1. Pada menu navigasi konsol AWS IoT Greengrass tersebut, pilih Komponen.

    2. PadaKomponenhalaman, pilihKomponen sayatab, dan kemudian pilihcom.example.BatteryAwareHelloWorld.

    3. Pada halaman com.example.BatteryAwareHelloWorld pilih Deploy.

    4. FromTambahkan ke deployment, pilih penerapan yang ada untuk direvisi, atau pilih untuk membuat penyebaran baru, lalu pilihSelanjutnya.

    5. Jika Anda memilih untuk membuat deployment baru, pilih perangkat inti target atau grup objek untuk deployment. PadaTentukan targethalaman, di bawahTarget penyebaran, pilih perangkat inti atau grup benda, lalu pilihSelanjutnya.

    6. PadaPilih komponenhalaman, verifikasi bahwacom.example.BatteryAwareHelloWorldkomponen dipilih, pilihSelanjutnya.

    7. PadaKonfigurasikan komponenhalaman, pilihcom.example.BatteryAwareHelloWorld, dan kemudian lakukan hal berikut:

      1. Pilih Konfigurasi komponen.

      2. DiKonfigurasicom.example.BatteryAwareHelloWorldmodal, di bawahPembaruan konfigurasi, diKonfigurasikan untuk digabungkan, masukkan pembaruan konfigurasi berikut.

        { "BatteryThreshold": 70 }
      3. PilihKonfirmasiuntuk menutup modal, dan kemudian memilihSelanjutnya.

    8. PadaKonfirmasikan pengaturan lanjutanhalaman, diKebijakan deploymentbagian, di bawahKebijakan pembaruan komponen,Beri tahu komponenTerpilih. Beri tahu komponendipilih secara default saat Anda membuat deployment baru.

    9. Di halaman Tinjau, pilih Deploy.

      Deployment dapat memakan waktu hingga satu menit untuk diselesaikan.

  3. YangAWS IoT GreengrassPerangkat lunak inti menyimpan stdout dari proses komponen untuk log file dilogsfolder. Jalankan perintah berikut untuk memverifikasi bahwa komponen Hello World berjalan dan mencetak pesan status.

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/com.example.BatteryAwareHelloWorld.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\com.example.BatteryAwareHelloWorld.log
    PowerShell
    gc C:\greengrass\v2\logs\com.example.BatteryAwareHelloWorld.log -Tail 10 -Wait

    Anda akan melihat pesan yang mirip dengan contoh berikut ini.

    Hello, World! Battery level (50) is below threshold (70), so the component will defer updates.
    catatan

    Jika file tidak ada, deployment mungkin belum lengkap. Jika file tidak ada dalam waktu 30 detik, deployment mungkin gagal. Ini dapat terjadi jika perangkat inti tidak memiliki izin untuk mengunduh artefak komponen dari bucket S3, misalnya. Jalankan perintah berikut untuk menampilkanAWS IoT GreengrassFile log perangkat lunak inti. File ini mencakup log dari layanan deployment perangkat inti Greengrass.

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/greengrass.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\greengrass.log

    Yangtypeperintah menulis isi file ke terminal. Jalankan perintah ini beberapa kali untuk mengamati perubahan dalam file.

    Yangtypeperintah menulis isi file ke terminal. Jalankan perintah ini beberapa kali untuk mengamati perubahan dalam file.

    PowerShell
    gc C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait
  4. Buat penyebaran baru ke perangkat inti untuk memverifikasi bahwa komponen menentang pembaruan. Lakukan hal berikut:

    1. DiAWS IoT Greengrasskonsolmenu navigasi, pilihDeployment.

    2. Pilih penyebaran yang Anda buat atau revisi sebelumnya.

    3. Pada halaman penyebaran, pilihRevisi.

    4. DiRevisi deploymentmodal, pilihRevisi deployment.

    5. PilihSelanjutnyadi setiap langkah, dan kemudian pilihDeploy.

  5. Jalankan perintah berikut untuk menampilkan log komponen lagi, dan memverifikasi bahwa perintah defers pembaruan.

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/com.example.BatteryAwareHelloWorld.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\com.example.BatteryAwareHelloWorld.log
    PowerShell
    gc C:\greengrass\v2\logs\com.example.BatteryAwareHelloWorld.log -Tail 10 -Wait

    Anda akan melihat pesan yang mirip dengan contoh berikut ini. Komponen menentang pembaruan selama 30 detik, sehingga komponen mencetak pesan ini berulang kali.

    Deferred update for deployment 50722a95-a05f-4e2a-9414-da80103269aa.
  6. Gunakan editor teks untuk mengedit file level baterai virtual dan ubah level baterai ke nilai di atas ambang batas, sehingga penyebaran dapat dilanjutkan.

    • Pada perangkat inti Linux, edit file bernama/home/ggc_user/virtual_battery.json. Jalankan editor teks dengansudoizin.

    • Pada perangkat inti Windows, edit file bernamaC:\Users\ggc_user\virtual_battery.json. Jalankan editor teks sebagai administrator.

    Sebagai contoh, pada sistem berbasis Linux, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat file.

    sudo nano /home/ggc_user/virtual_battery.json

    Ubah level baterai ke80.

    { "battery_level": 80 }
  7. Jalankan perintah berikut untuk menampilkan log komponen lagi, dan memverifikasi bahwa perintah mengakui pembaruan.

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/com.example.BatteryAwareHelloWorld.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\com.example.BatteryAwareHelloWorld.log
    PowerShell
    gc C:\greengrass\v2\logs\com.example.BatteryAwareHelloWorld.log -Tail 10 -Wait

    Anda akan melihat pesan yang mirip dengan contoh berikut ini.

    Hello, World! Battery level (80) is above threshold (70), so the component will acknowledge updates. Acknowledged update for deployment f9499eb2-4a40-40a7-86c1-c89887d859f1.

Anda telah menyelesaikan tutorial ini. Komponen Hello World menolak atau mengakui pembaruan berdasarkan tingkat baterai perangkat inti. Untuk informasi selengkapnya tentang topik yang dieksplorasi pada tutorial ini, lihat berikut ini: