Mengakses sumber daya machine learning dari fungsi Lambda - AWS IoT Greengrass

AWS IoT Greengrass Version 1 memasuki fase umur panjang pada 30 Juni 2023. Untuk informasi selengkapnya, lihat kebijakan AWS IoT Greengrass V1 pemeliharaan. Setelah tanggal ini, tidak AWS IoT Greengrass V1 akan merilis pembaruan yang menyediakan fitur, penyempurnaan, perbaikan bug, atau patch keamanan. Perangkat yang berjalan AWS IoT Greengrass V1 tidak akan terganggu dan akan terus beroperasi dan terhubung ke cloud. Kami sangat menyarankan Anda bermigrasi ke AWS IoT Greengrass Version 2, yang menambahkan fitur baru yang signifikan dan dukungan untuk platform tambahan.

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

Mengakses sumber daya machine learning dari fungsi Lambda

Fungsi Lambda yang ditentukan pengguna dapat mengakses sumber daya machine learning untuk menjalankan inferensi lokal pada core AWS IoT Greengrass ini. Sumber daya machine learning terdiri dari model terlatih dan artefak lainnya yang diunduh ke perangkat core.

Untuk mengizinkan fungsi Lambda mengakses sumber daya machine learning pada core, Anda harus melampirkan sumber daya ke fungsi Lambda dan menentukan izin akses. Mode kontainerisasi dari afiliasi (atau terlampir) fungsi Lambda menentukan bagaimana Anda melakukan hal ini.

Izin akses untuk sumber daya machine learning

Dimulai pada AWS IoT Greengrass Core v1.10.0, Anda dapat menentukan pemilik sumber daya untuk sumber daya machine learning. Pemilik sumber daya mewakili grup OS dan izin yang AWS IoT Greengrass menggunakan untuk mengunduh artefak sumber daya. Jika pemilik sumber daya tidak didefinisikan, artefak sumber daya yang diunduh hanya dapat diakses oleh root.

  • Jika fungsi Lambda nonkontainerisasi yang mengakses sumber daya machine learning, Anda harus menentukan pemilik sumber daya karena tidak ada kontrol izin dari kontainer. Fungsi nonkontainerisasi Lambda dapat mewarisi izin pemilik sumber daya dan menggunakannya untuk mengakses sumber daya.

     

  • Jika hanya fungsi Lambda terkontainerisasi yang mengakses sumber daya, kami sarankan Anda menggunakan izin tingkat fungsi bukannya mendefinisikan pemilik sumber daya.

     

Properti pemilik sumber daya

Pemilik sumber daya menentukan pemilik grup dan izin pemilik grup.

Pemilik grup. Grup ID (GID) dari grup OS Linux yang ada pada perangkat core. Izin grup ditambahkan ke proses Lambda. Secara khusus, GID ditambahkan ke ID grup tambahan dari fungsi Lambda.

Jika fungsi Lambda dalam grup Greengrass dikonfigurasi untuk jalankan sebagai grup OS yang sama dengan pemilik sumber daya untuk sumber machine learning, sumber daya harus dilampirkan pada fungsi Lambda. Jika tidak, deployment gagal karena konfigurasi ini memberikan izin implisit fungsi Lambda dapat menggunakan untuk mengakses sumber daya tanpa otorisasi AWS IoT Greengrass ini. Pemeriksaan validasi deployment dilewati jika fungsi Lambda berjalan sebagai root (UID = 0).

Kami merekomendasikan bahwa Anda menggunakan grup OS yang tidak digunakan oleh sumber daya lain, fungsi Lambda, atau file pada Greengrass core. Menggunakan grup OS bersama memberikan melekat fungsi Lambda izin akses lebih dari yang mereka butuhkan. Jika Anda menggunakan grup OS bersama, fungsi Lambda terlampir juga harus dilampirkan ke semua sumber daya machine learning yang menggunakan grup OS bersama. Jika tidak, deployment gagal.

Izin pemilik grup. Izin hanya baca atau baca dan tulis untuk menambah proses Lambda.

Fungsi Lambda nonkontainerisasi harus mewarisi izin akses ini ke sumber daya. Fungsi Lambda terkontainerisasi dapat mewarisi izin tingkat sumber daya ini atau menentukan izin tingkat fungsi. Jika mereka menentukan izin tingkat fungsi, izin harus sama atau lebih ketat daripada izin tingkat sumber daya.

Tabel berikut menunjukkan konfigurasi izin akses yang didukung.

GGC v1.10 or later
Properti Jika hanya fungsi Lambda terkontainerisasi yang mengakses sumber daya Jika ada fungsi Lambda nonkontainerisasi yang mengakses sumber daya
Properti tingkat fungsi

Izin (baca/tulis)

Diperlukan kecuali sumber daya mendefinisikan pemilik sumber daya. Jika pemilik sumber daya didefinisikan, izin tingkat fungsi harus sama atau lebih ketat daripada izin pemilik sumber daya.

Jika hanya fungsi Lambda terkontainerisasi yang mengakses sumber daya, kami sarankan Anda tidak menentukan pemilik sumber daya.

Fungsi Lambda non-kontainer:

Tidak didukung. Fungsi Lambda nonkontainerisasi harus mewarisi izin tingkat sumber daya.

Fungsi Lambda dalam peti kemas:

Opsional, tetapi harus sama atau lebih ketat daripada izin tingkat sumber daya.

Properti tingkat sumber daya

Pemilik sumber daya

Opsional (tidak disarankan).

Wajib.

Izin (baca/tulis)

Opsional (tidak disarankan).

Wajib.

GGC v1.9 or earlier
Properti Jika hanya fungsi Lambda terkontainerisasi yang mengakses sumber daya Jika ada fungsi Lambda nonkontainerisasi yang mengakses sumber daya
Properti tingkat fungsi

Izin (baca/tulis)

Wajib.

Tidak didukung.

Properti tingkat sumber daya

Pemilik sumber daya

Tidak didukung.

Tidak didukung.

Izin (baca/tulis)

Tidak didukung.

Tidak didukung.

catatan

Ketika Anda menggunakan API AWS IoT Greengrass untuk mengonfigurasi fungsi Lambda dan sumber daya, tingkat fungsi properti ResourceId juga diperlukan. Properti ResourceId melampirkanl sumber daya machine learning untuk fungsi Lambda.

Mendefinisikan izin akses untuk fungsi Lambda (konsol)

Di AWS IoT konsol, Anda menentukan izin akses ketika Anda mengonfigurasi sumber daya machine learning atau melampirkan satu ke fungsi Lambda.

Fungsi Lambda dalam peti kemas

Jika hanya fungsi Lambda terkontainerisasi terlampir pada sumber daya machine learning:

  • Pilih Tidak ada grup sistem sebagai pemilik sumber daya untuk sumber daya pembelajaran mesin. Ini adalah pengaturan yang direkomendasikan ketika hanya fungsi Lambda terkontainerisasi yang mengakses sumber daya machine learning. Jika tidak, Anda mungkin memberikan fungsi Lambda yang dilampirkan izin akses lebih dari yang mereka butuhkan.

     

 

Fungsi Lambda nonkontainerisasi (memerlukankan GC v1.10 atau lebih baru)

Jika ada fungsi Lambda nonkontainerisasi terlampir pada sumber daya machine learning:

  • Tentukan ID grup Sistem (GID) yang akan digunakan sebagai pemilik sumber daya untuk sumber daya pembelajaran mesin. Pilih Tentukan grup sistem dan izin dan masukkan GID. Anda dapat menggunakan getent group perintah pada perangkat inti Anda untuk mencari ID grup sistem.

     

  • Pilih Akses hanya-baca atau akses Baca dan tulis untuk izin grup Sistem.

Mendefinisikan izin akses untuk fungsi Lambda (API)

Di AWS IoT Greengrass API, Anda menentukan izin untuk sumber daya machine learning di ResourceAccessPolicy Properti untuk fungsi Lambda atau OwnerSetting properti untuk sumber daya.

Fungsi Lambda dalam peti kemas

Jika hanya fungsi Lambda terkontainerisasi terlampir pada sumber daya machine learning:

  • Untuk fungsi Lambda terkontainerisasi, tentukan izin akses di properti Permission dari properti ResourceAccessPolicies ini. Sebagai contoh:

    "Functions": [ { "Id": "my-containerized-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", "FunctionConfiguration": { "Environment": { "ResourceAccessPolicies": [ { "ResourceId": "my-resource-id", "Permission": "ro-or-rw" } ] }, "MemorySize": 512, "Pinned": true, "Timeout": 5 } } ]
  • Untuk sumber daya machine learning, abaikan properti OwnerSetting ini. Sebagai contoh:

    "Resources": [ { "Id": "my-resource-id", "Name": "my-resource-name", "ResourceDataContainer": { "S3MachineLearningModelResourceData": { "DestinationPath": "/local-destination-path", "S3Uri": "s3://uri-to-resource-package" } } } ]

    Ini adalah konfigurasi yang direkomendasikan ketika hanya fungsi Lambda terkontainerisasi yang mengakses sumber daya machine learning. Jika tidak, Anda mungkin memberikan fungsi Lambda yang dilampirkan izin akses lebih dari yang mereka butuhkan.

 

Fungsi Lambda nonkontainerisasi (memerlukankan GC v1.10 atau lebih baru)

Jika ada fungsi Lambda nonkontainerisasi terlampir pada sumber daya machine learning:

  • Untuk fungsi Lambda nonkontainerisasi, abaikan properti Permission di ResourceAccessPolicies. Konfigurasi ini diperlukan dan memungkinkan fungsi untuk mewarisi izin tingkat sumber daya. Sebagai contoh:

    "Functions": [ { "Id": "my-non-containerized-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", "FunctionConfiguration": { "Environment": { "Execution": { "IsolationMode": "NoContainer", }, "ResourceAccessPolicies": [ { "ResourceId": "my-resource-id" } ] }, "Pinned": true, "Timeout": 5 } } ]
  • Untuk fungsi Lambda terkontainerisasi yang juga mengakses sumber daya machine learning, abaikan properti Permission di ResourceAccessPolicies atau tentukan izin yang sama atau lebih ketat sebagai izin tingkat sumber daya. Sebagai contoh:

    "Functions": [ { "Id": "my-containerized-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", "FunctionConfiguration": { "Environment": { "ResourceAccessPolicies": [ { "ResourceId": "my-resource-id", "Permission": "ro-or-rw" // Optional, but cannot exceed the GroupPermission defined for the resource. } ] }, "MemorySize": 512, "Pinned": true, "Timeout": 5 } } ]
  • Untuk sumber daya machine learning, tentukan OwnerSetting properti, termasuk anak GroupOwner dan GroupPermission properti. Sebagai contoh:

    "Resources": [ { "Id": "my-resource-id", "Name": "my-resource-name", "ResourceDataContainer": { "S3MachineLearningModelResourceData": { "DestinationPath": "/local-destination-path", "S3Uri": "s3://uri-to-resource-package", "OwnerSetting": { "GroupOwner": "os-group-id", "GroupPermission": "ro-or-rw" } } } } ]

Mengakses sumber daya machine learning dari kode fungsi Lambda

Fungsi Lambda yang ditentukan pengguna menggunakan antarmuka OS platform spesifik untuk mengakses sumber daya machine learning pada perangkat core.

GGC v1.10 or later

Untuk fungsi Lambda terkontainerisasi, sumber daya dipasang di dalam kontainer Greengrass dan tersedia di jalur tujuan lokal yang didefinisikan untuk sumber daya. Untuk fungsi Lambda nonkontainerisasi, sumber daya adalah symlinked ke direktori kerja Lambda-spesifik dan diteruskan ke AWS_GG_RESOURCE_PREFIX variabel lingkungan dalam proses Lambda.

Untuk mendapatkan jalur ke artefak yang diunduh dari sumber daya machine learning, fungsi Lambda menambahkan AWS_GG_RESOURCE_PREFIX ke jalur tujuan lokal yang ditetapkan untuk sumber daya. Untuk fungsi Lambda terkontainerisasi, nilai yang dikembalikan adalah garis miring tunggal (/).

resourcePath = os.getenv("AWS_GG_RESOURCE_PREFIX") + "/destination-path" with open(resourcePath, 'r') as f: # load_model(f)
GGC v1.9 or earlier

Artefak yang diunduh dari sumber machine learning terletak di jalur tujuan lokal yang ditentukan untuk sumber daya. Hanya fungsi Lambda terkontainerisasi yang dapat mengakses sumber daya machine learning di Core AWS IoT Greengrass v1.9 dan sebelumnya.

resourcePath = "/local-destination-path" with open(resourcePath, 'r') as f: # load_model(f)

Implementasi pemuatan model Anda tergantung pada perpustakaan ML Anda.

Memecahkan masalah

Gunakan informasi berikut untuk membantu memecahkan masalah dengan mengakses sumber daya machine learning.

InvalidML ModelOwner - GroupOwnerSetting disediakan dalam sumber daya model ML, tetapi GroupOwner atau GroupPermission tidak ada

Solusi: Anda menerima kesalahan ini jika sumber pembelajaran mesin berisi ResourceDownloadOwnerSettingobjek tetapi diperlukan GroupOwner atau GroupPermission properti tidak ditentukan. Untuk mengatasi masalah ini, tentukan properti yang hilang.

 

NoContainer fungsi tidak dapat mengonfigurasi izin saat melampirkan sumber daya Machine Learning. <function-arn>mengacu pada sumber daya Machine Learnin <resource-id>dengan izin <ro/rw> dalam kebijakan akses sumber daya.

Solusi: Anda menerima error ini jika fungsi Lambda non-containerized menentukan tingkat fungsi izin untuk sumber daya machine learning. Fungsi non-wadah harus mewarisi izin dari izin pemilik sumber daya yang ditetapkan pada sumber daya machine learning. Untuk mengatasi masalah ini, pilih untuk mewarisi izin pemilik sumber daya (konsol) atau menghapus izin dari fungsi Lambda sumber daya kebijakan akses (API).

 

Fungsi <function-arn>mengacu pada sumber daya Machine Learning <resource-id>dengan izin yang hilang di keduanya ResourceAccessPolicy dan sumber daya OwnerSetting.

Solusi: Anda menerima kesa ini jika izin untuk sumber daya machine learning tidak dikonfigurasi untuk fungsi Lambda terlampir atau sumber daya. Untuk mengatasi masalah ini, konfigurasikan izin di ResourceAccessPolicyproperti untuk fungsi Lambda atau properti untuk OwnerSettingsumber daya.

 

Fungsi <function-arn>mengacu pada sumber daya Machine Learning <resource-id>dengan izin\ "rw\”, sedangkan pengaturan pemilik sumber daya GroupPermission hanya mengizinkan\ "ro\”.

Solusi: Anda menerima error ini jika izin akses yang ditetapkan untuk fungsi Lambda terlampir melebihi izin pemilik sumber daya yang ditetapkan untuk sumber daya machine learning. Untuk mengatasi masalah ini, tetapkan izin yang lebih ketat untuk fungsi Lambda atau kurang membatasi izin untuk pemilik sumber daya.

 

NoContainer Fungsi <function-arn>mengacu pada sumber daya jalur tujuan bersarang.

Solusi: Anda menerima error ini jika beberapa sumber daya machine learning yang terlampir pada fungsi Lambda non-containerized menggunakan lintasan tujuan yang sama atau lintasan tujuan bersarang. Untuk mengatasi masalah ini, tentukan jalur tujuan terpisah untuk sumber daya.

 

Lambda <function-arn> mendapatkan akses ke sumber daya <resource-id> dengan berbagi id pemilik grup yang sama

Solusi: Anda menerima keslaahan ini di runtime.log jika kelompok OS yang sama ditentukan sebagai fungsi Lambda Jalankan sebagai identitas dan pemilik sumber daya untuk sumber daya machine learning, tetapi sumber daya tidak terlampir pada fungsi Lambda. Konfigurasi ini memberikan fungsi Lambda izin implisit yang dapat digunakan untuk mengakses sumber daya tanpa AWS IoT Greengrass otorisasi.

Untuk mengatasi masalah ini, gunakan grup OS yang berbeda untuk salah satu properti atau melampirkan sumber daya machine learning untuk fungsi Lambda.

Lihat juga