Accedi alle risorse di machine learning dalle funzioni Lambda - AWS IoT Greengrass

AWS IoT Greengrass Version 1 è entrato nella fase di estensione della vita utile il 30 giugno 2023. Per ulteriori informazioni, consulta la politica AWS IoT Greengrass V1 di manutenzione. Dopo questa data, AWS IoT Greengrass V1 non rilascerà aggiornamenti che forniscano funzionalità, miglioramenti, correzioni di bug o patch di sicurezza. I dispositivi che funzionano AWS IoT Greengrass V1 non subiranno interruzioni e continueranno a funzionare e a connettersi al cloud. Ti consigliamo vivamente di eseguire la migrazione a AWS IoT Greengrass Version 2, che aggiunge nuove importanti funzionalità e supporto per piattaforme aggiuntive.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Accedi alle risorse di machine learning dalle funzioni Lambda

Le funzioni Lambda definite dall'utente possono accedere alle risorse di machine learning per eseguire inferenze locali sul core. AWS IoT Greengrass Una risorsa di machine learning è costituita dal modello con training e da altri artefatti che vengono scaricati nel dispositivo core.

Per consentire a una funzione Lambda di accedere a una risorsa di machine learning centrale, è necessario collegare la risorsa alla funzione Lambda e definire le autorizzazioni di accesso. La modalità di containerizzazione della funzione Lambda affiliata (o allegata) determina come eseguire questa operazione.

Autorizzazioni di accesso per risorse di Machine Learning

A partire da AWS IoT Greengrass Core v1.10.0, puoi definire un proprietario della risorsa per una risorsa di machine learning. Il proprietario della risorsa rappresenta il gruppo OS e le autorizzazioni utilizzate da AWS IoT Greengrass per scaricare gli artefatti della risorsa. Se il proprietario di una risorsa non è definito, gli artefatti della risorsa scaricati sono accessibili solo al root.

  • Se le funzioni Lambda non containerizzate accedono a una risorsa di machine learning, è necessario definire un proprietario della risorsa perché non esiste alcun controllo delle autorizzazioni da parte del contenitore. Le funzioni Lambda non containerizzate possono ereditare le autorizzazioni del proprietario della risorsa e utilizzarle per accedere alla risorsa.

     

  • Se solo le funzioni Lambda containerizzate accedono alla risorsa, ti consigliamo di utilizzare le autorizzazioni a livello di funzione invece di definire un proprietario della risorsa.

     

Proprietà del proprietario delle risorse

Un proprietario delle risorse specifica un proprietario del gruppo e le autorizzazioni del proprietario del gruppo.

Proprietario del gruppo. L'ID del gruppo (GID) di un gruppo OS Linux esistente sul dispositivo core. Le autorizzazioni del gruppo vengono aggiunte al processo Lambda. In particolare, il GID viene aggiunto agli ID di gruppo supplementari della funzione Lambda.

Se una funzione Lambda del gruppo Greengrass è configurata per essere eseguita come lo stesso gruppo di sistemi operativi del proprietario della risorsa per una risorsa di machine learning, la risorsa deve essere collegata alla funzione Lambda. In caso contrario, la distribuzione non riesce perché questa configurazione fornisce autorizzazioni implicite che la funzione Lambda può utilizzare per accedere alla risorsa senza autorizzazione. AWS IoT Greengrass Il controllo di convalida della distribuzione viene saltato se la funzione Lambda viene eseguita come root (UID=0).

Ti consigliamo di utilizzare un gruppo di sistemi operativi non utilizzato da altre risorse, funzioni Lambda o file sul core Greengrass. L'utilizzo di un gruppo di sistemi operativi condiviso offre alle funzioni Lambda collegate più autorizzazioni di accesso di quelle necessarie. Se si utilizza un gruppo di sistemi operativi condiviso, è necessario allegare anche una funzione Lambda associata a tutte le risorse di machine learning che utilizzano il gruppo di sistemi operativi condiviso. In caso contrario, la distribuzione non riesce.

Autorizzazioni del proprietario del gruppo. L'autorizzazione di sola lettura o lettura e scrittura da aggiungere al processo Lambda.

Le funzioni Lambda non containerizzate devono ereditare queste autorizzazioni di accesso alla risorsa. Le funzioni Lambda containerizzate possono ereditare queste autorizzazioni a livello di risorsa o definire autorizzazioni a livello di funzione. Se definiscono autorizzazioni a livello di funzione, le autorizzazioni devono essere identiche o più restrittive rispetto alle autorizzazioni a livello di risorsa.

Nella tabella seguente vengono illustrate le configurazioni di autorizzazione di accesso supportate.

GGC v1.10 or later
Proprietà Se solo le funzioni Lambda containerizzate accedono alla risorsa Se qualche funzione Lambda non containerizzata accede alla risorsa
Proprietà a livello di funzione

Autorizzazioni (lettura/scrittura)

Obbligatorie a meno che la risorsa non definisca un proprietario delle risorse. Se viene definito un proprietario delle risorse, le autorizzazioni a livello di funzione devono essere identiche o più restrittive rispetto alle autorizzazioni del proprietario delle risorse.

Se solo le funzioni Lambda containerizzate accedono alla risorsa, ti consigliamo di non definire un proprietario della risorsa.

Funzioni Lambda non containerizzate:

Non supportato. Le funzioni Lambda non containerizzate devono ereditare le autorizzazioni a livello di risorsa.

Funzioni Lambda containerizzate:

Facoltativo, ma devono essere identiche o più restrittive rispetto alle autorizzazioni a livello di risorse.

Proprietà a livello di risorse

Proprietario delle risorse

Facoltativo (non consigliato).

Obbligatorio.

Autorizzazioni (lettura/scrittura)

Facoltativo (non consigliato).

Obbligatorio.

GGC v1.9 or earlier
Proprietà Se solo le funzioni Lambda containerizzate accedono alla risorsa Se qualche funzione Lambda non containerizzata accede alla risorsa
Proprietà a livello di funzione

Autorizzazioni (lettura/scrittura)

Obbligatorio.

Non supportato.

Proprietà a livello di risorse

Proprietario delle risorse

Non supportato.

Non supportato.

Autorizzazioni (lettura/scrittura)

Non supportato.

Non supportato.

Nota

Quando si utilizza l'AWS IoT GreengrassAPI per configurare le funzioni e le risorse Lambda, è richiesta anche la ResourceId proprietà a livello di funzione. La ResourceId proprietà collega la risorsa di machine learning alla funzione Lambda.

Definizione delle autorizzazioni di accesso per le funzioni Lambda (console)

Nella AWS IoT console, definisci le autorizzazioni di accesso quando configuri una risorsa di machine learning o ne alleghi una a una funzione Lambda.

Funzioni Lambda containerizzate

Se alla risorsa di machine learning sono collegate solo funzioni Lambda containerizzate:

  • Scegli Nessun gruppo di sistema come proprietario della risorsa di machine learning. Questa è l'impostazione consigliata quando solo le funzioni Lambda containerizzate accedono alla risorsa di machine learning. Altrimenti, potresti concedere alle funzioni Lambda allegate più autorizzazioni di accesso di quelle necessarie.

     

 

Funzioni Lambda non containerizzate (richiede GGC v1.10 o versione successiva)

Se alla risorsa di machine learning sono collegate funzioni Lambda non containerizzate:

  • Specificate il System group ID (GID) da utilizzare come proprietario della risorsa di machine learning. Scegli Specificare il gruppo di sistema e le autorizzazioni e inserisci il GID. È possibile utilizzare il getent group comando sul dispositivo principale per cercare l'ID di un gruppo di sistema.

     

  • Scegli Accesso in sola lettura o Accesso in lettura e scrittura per le autorizzazioni del gruppo di sistema.

Definizione delle autorizzazioni di accesso per le funzioni Lambda (API)

Nell'AWS IoT GreengrassAPI, definisci le autorizzazioni per le risorse di machine learning nella ResourceAccessPolicy proprietà della funzione Lambda o nella proprietà OwnerSetting della risorsa.

Funzioni Lambda containerizzate

Se alla risorsa di machine learning sono collegate solo funzioni Lambda containerizzate:

  • Per le funzioni Lambda containerizzate, definisci le autorizzazioni di accesso nella proprietà della Permission proprietà. ResourceAccessPolicies Per esempio:

    "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 } } ]
  • Per le risorse di machine learning, ometti la proprietà OwnerSetting. Per esempio:

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

    Questa è la configurazione consigliata quando solo le funzioni Lambda containerizzate accedono alla risorsa di machine learning. Altrimenti, potresti concedere alle funzioni Lambda allegate più autorizzazioni di accesso di quelle necessarie.

 

Funzioni Lambda non containerizzate (richiede GGC v1.10 o versione successiva)

Se alla risorsa di machine learning sono collegate funzioni Lambda non containerizzate:

  • Per le funzioni Lambda non containerizzate, ometti la proprietà in. Permission ResourceAccessPolicies Questa configurazione è obbligatoria e consente alla funzione di ereditare l'autorizzazione a livello di risorsa. Per esempio:

    "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 } } ]
  • Per le funzioni Lambda containerizzate che accedono anche alla risorsa di machine learning, ometti la Permission proprietà ResourceAccessPolicies o definisci un'autorizzazione uguale o più restrittiva dell'autorizzazione a livello di risorsa. Per esempio:

    "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 } } ]
  • Per le risorse di machine learning, definisci la proprietà OwnerSetting, inclusi il figlio GroupOwner e le proprietà GroupPermission. Per esempio:

    "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" } } } } ]

Accesso alle risorse di machine learning dal codice della funzione Lambda

Le funzioni Lambda definite dall'utente utilizzano interfacce del sistema operativo specifiche della piattaforma per accedere alle risorse di machine learning su un dispositivo principale.

GGC v1.10 or later

Per le funzioni Lambda containerizzate, la risorsa è montata all'interno del contenitore Greengrass e disponibile nel percorso di destinazione locale definito per la risorsa. Per le funzioni Lambda non containerizzate, la risorsa è collegata simbolicamente a una directory di lavoro specifica di Lambda e passata alla variabile di ambiente nel processo Lambda. AWS_GG_RESOURCE_PREFIX

Per ottenere il percorso degli artefatti scaricati di una risorsa di machine learning, le funzioni Lambda aggiungono la variabile di AWS_GG_RESOURCE_PREFIX ambiente al percorso di destinazione locale definito per la risorsa. Per le funzioni Lambda containerizzate, il valore restituito è una singola barra (). /

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

Gli artefatti scaricati di una risorsa di machine learning si trovano nel percorso di destinazione locale definito per la risorsa. Solo le funzioni Lambda containerizzate possono accedere alle risorse di machine learning in AWS IoT Greengrass Core v1.9 e versioni precedenti.

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

L'implementazione del caricamento del modello dipende dalla libreria ML.

Risoluzione dei problemi

Utilizza le informazioni seguenti per risolvere problemi relativi all'accesso alle risorse di machine learning.

InvalidMLModelOwner : GroupOwnerSetting è fornito nella risorsa del modello ML, ma non è presente o non è presente GroupOwner GroupPermission

Soluzione: viene visualizzato questo errore se una risorsa di machine learning contiene l'ResourceDownloadOwnerSettingoggetto ma il requisito GroupOwner o la GroupPermission proprietà non sono definiti. Per risolvere questo problema, definisci la proprietà mancante.

 

NoContainer la funzione non può configurare l'autorizzazione quando si collegano risorse di Machine Learning. <function-arn>si riferisce alla risorsa Machine Learning <resource-id>con autorizzazione <ro/rw> nella politica di accesso alle risorse.

Soluzione: viene visualizzato questo errore se una funzione Lambda non containerizzata specifica autorizzazioni a livello di funzione per una risorsa di machine learning. Le funzioni non containerizzate devono ereditare le autorizzazioni dalle autorizzazioni del proprietario della risorsa definite nella risorsa di machine learning. Per risolvere questo problema, scegli di ereditare le autorizzazioni del proprietario della risorsa (console) o rimuovere le autorizzazioni dalla politica di accesso alle risorse (API) della funzione Lambda.

 

La funzione <function-arn>si riferisce alla risorsa di Machine Learning <resource-id>con autorizzazione mancante in entrambe ResourceAccessPolicy le risorse OwnerSetting.

Soluzione: viene visualizzato questo errore se le autorizzazioni per la risorsa di machine learning non sono configurate per la funzione Lambda o la risorsa allegata. Per risolvere questo problema, configura le autorizzazioni nella ResourceAccessPolicyproprietà per la funzione Lambda o nella proprietà per OwnerSettingla risorsa.

 

La funzione <function-arn>si riferisce alla risorsa Machine Learning <resource-id>con autorizzazione\ "rw\», mentre l'impostazione del proprietario della risorsa consente GroupPermission solo\ "ro\».

Soluzione: viene visualizzato questo errore se le autorizzazioni di accesso definite per la funzione Lambda allegata superano le autorizzazioni del proprietario della risorsa definite per la risorsa di machine learning. Per risolvere questo problema, imposta autorizzazioni più restrittive per la funzione Lambda o autorizzazioni meno restrittive per il proprietario della risorsa.

 

NoContainer La funzione <function-arn>si riferisce alle risorse del percorso di destinazione annidato.

Soluzione: viene visualizzato questo errore se più risorse di machine learning collegate a una funzione Lambda non containerizzata utilizzano lo stesso percorso di destinazione o un percorso di destinazione annidato. Per risolvere questo problema, specifica percorsi di destinazione separati per le risorse.

 

Lambda <function-arn> ottiene l'accesso alla risorsa <resource-id> condividendo lo stesso ID del proprietario del gruppo

Soluzione: viene visualizzato questo errore runtime.log se viene specificato lo stesso gruppo di sistema operativo come identità Esegui come identità della funzione Lambda e proprietario della risorsa per una risorsa di machine learning, ma la risorsa non è associata alla funzione Lambda. Questa configurazione fornisce alla funzione Lambda autorizzazioni implicite che può utilizzare per accedere alla risorsa senza autorizzazione. AWS IoT Greengrass

Per risolvere questo problema, usa un gruppo di sistemi operativi diverso per una delle proprietà o collega la risorsa di machine learning alla funzione Lambda.

Consulta anche