Creazione di distribuzioni in blocco per i gruppi - 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à.

Creazione di distribuzioni in blocco per i gruppi

Puoi utilizzare semplici chiamate API per distribuire un numero elevato di gruppi Greengrass contemporaneamente. Queste distribuzioni vengono attivate a una velocità adattiva con un limite superiore fisso.

Questo tutorial descrive come utilizzare AWS CLI per creare e monitorare una distribuzione di massa dei gruppi in AWS IoT Greengrass. L'esempio di distribuzione di massa di questo tutorial include più gruppi. Puoi utilizzare l'esempio nella tua implementazione per aggiungere il numero di gruppi desiderato.

Il tutorial include le seguenti fasi di alto livello:

Prerequisiti

Per completare questo tutorial, è necessario quanto segue:

  • Uno o più gruppi Greengrass distribuibili. Per ulteriori informazioni sulla creazione di core e gruppi AWS IoT Greengrass, consulta Guida introduttiva con AWS IoT Greengrass.

  • L'AWS CLI installata e configurata nel computer. Per ulteriori informazioni, consulta la Guida per l'utente di AWS CLI.

  • Un bucket S3 creato nella stessa regioneRegione AWScomeAWS IoT Greengrass. Per informazioni, consulta .Creazione e configurazione di un bucket S3nellaGuida dell'utente Amazon Simple Storage Service.

    Nota

    Al momento, i bucket abilitati per SSE KMS non sono supportati.

Fase 1: Creazione e caricamento del file di input della distribuzione di massa

In questa fase, creerai un file di input della distribuzione e lo caricherai nel bucket Amazon S3. Si tratta di un file JSON delimitato da righe e serializzato contenente informazioni su ciascun gruppo della distribuzione di massa. AWS IoT Greengrass utilizza queste informazioni per distribuire in modo automatico ciascun gruppo durante l'inizializzazione della distribuzione di massa dei gruppi.

  1. Eseguire il seguente comando per ottenere il groupId per ciascun gruppo da distribuire. Immettere groupId nel file di input della distribuzione di massa in modo che AWS IoT Greengrass possa identificare ciascun gruppo da distribuire.

    Nota

    Questi valori sono disponibili anche inAWS IoTConsole. L'ID gruppo viene visualizzato nella pagina Settings (Impostazioni) del gruppo. Gli ID della versione del gruppo vengono visualizzati nellaDistribuzioniTabulatore.

    aws greengrass list-groups

    La risposta contiene informazioni su ciascun gruppo nel tuo account AWS IoT Greengrass:

    { "Groups": [ { "Name": "string", "Id": "string", "Arn": "string", "LastUpdatedTimestamp": "string", "CreationTimestamp": "string", "LatestVersion": "string", "LatestVersionArn": "string" } ], "NextToken": "string" }

    Eseguire il seguente comando per ottenere il groupVersionId di ciascun gruppo da distribuire.

    list-group-versions --group-id groupId

    La risposta contiene informazioni su tutte le versioni del gruppo. Prendere nota delVersionvalore per la versione del gruppo da utilizzare.

    { "Versions": [ { "Arn": "string", "Id": "string", "Version": "string", "CreationTimestamp": "string" } ], "NextToken": "string" }
  2. Nel terminale del computer o nell'editor desiderato, creare un file,MyBulkDeploymentInputFile, dal seguente esempio. Questo file contiene informazioni su ciascun gruppo AWS IoT Greengrass da includere in una distribuzione di massa. Benché questo esempio definisca più gruppi, per questo tutorial il tuo file potrà contenerne solo uno.

    Nota

    Le dimensioni di questo file devono essere inferiori a 100 MB.

    {"GroupId":"groupId1", "GroupVersionId":"groupVersionId1", "DeploymentType":"NewDeployment"} {"GroupId":"groupId2", "GroupVersionId":"groupVersionId2", "DeploymentType":"NewDeployment"} {"GroupId":"groupId3", "GroupVersionId":"groupVersionId3", "DeploymentType":"NewDeployment"} ...

    Ciascun record (o riga) contiene un oggetto gruppo. Ogni oggetto gruppo contiene i corrispondenti GroupId e GroupVersionId e un DeploymentType. Al momento, AWS IoT Greengrass supporta solo i tipi di distribuzione di massa NewDeployment.

    Salvare e chiudere il file. Prendere nota del percorso del file.

  3. Utilizzare il comando seguente nel terminale per caricare i file di input nel bucket Amazon S3. Specificare il percorso e il nome del file. Per informazioni, consulta Aggiunta di un oggetto a un bucket.

    aws s3 cp path/MyBulkDeploymentInputFile s3://my-bucket/

Fase 2: Creazione e configurazione di un ruolo di esecuzione IAM

In questa fase, utilizzerai la console IAM per creare un ruolo di esecuzione autonomo. Stabilire quindi una relazione di trust tra il ruolo eAWS IoT Greengrasse assicurati che il tuo utente IAM abbiaPassRolei privilegi per il ruolo di esecuzione. Ciò consente a AWS IoT Greengrass di assumere il ruolo di esecuzione e creare automaticamente le distribuzioni.

  1. Usa la seguente policy per creare un ruolo di esecuzione. Questo documento della policy consente a AWS IoT Greengrass di accedere al file di input della distribuzione di massa al momento delle creazione automatica di ciascuna distribuzione.

    Per ulteriori informazioni sulla creazione di ruolo IAM e la delega delle autorizzazioni, consulta Creazione di ruoli IAM.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "greengrass:CreateDeployment", "Resource": [ "arn:aws:greengrass:region:accountId:/greengrass/groups/groupId1", "arn:aws:greengrass:region:accountId:/greengrass/groups/groupId2", "arn:aws:greengrass:region:accountId:/greengrass/groups/groupId3", ... ] } ] }
    Nota

    Questa policy deve disporre di una risorsa per ciascun gruppo o versione del gruppo nel file di input della distribuzione di massa da distribuire da parte di AWS IoT Greengrass. Per consentire l'accesso a tutti i gruppi di risorse, per Resource, specificare un asterisco:

    "Resource": ["*"]
  2. Modificare la relazione di trust per il ruolo di esecuzione in modo da includere AWS IoT Greengrass. Ciò consente a AWS IoT Greengrass di utilizzare il tuo ruolo di esecuzione e le relative autorizzazioni collegate. Per informazioni, consulta Modifica della relazione di trust per un ruolo esistente.

    Ti consigliamo di includere ancheaws:SourceArneaws:SourceAccountChiavi di contesto delle condizioni globali nella policy di trust per prevenireconfused deputyproblema di sicurezza. Le chiavi di contesto della condizione limitano l'accesso per consentire solo le richieste che provengono dall'account specificato e dallo spazio di lavoro Greengrass. Per ulteriori informazioni sul problema del «confused deputy», consultaPrevenzione del problema "confused deputy" tra servizi.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "greengrass.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:greengrass:region:account-id:*" } } } ] }
  3. Dai IAMPassRolele autorizzazioni per il ruolo di esecuzione all'utente IAM. L'utente IAM verrà utilizzato per avviare la distribuzione di massa.PassRolele autorizzazioni consentono all'utente IAM di trasferire il ruolo di esecuzione aAWS IoT Greengrassper l'uso. Per ulteriori informazioni, consulta Concessione di autorizzazioni utente per il passaggio di un ruolo a un servizio AWS.

    Utilizzare l'esempio seguente per aggiornare la policy IAM associata al ruolo di esecuzione. Se necessario, è possibile modificarlo.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1508193814000", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::account-id:user/executionRoleArn" ] "Condition": { "StringEquals": { "iam:PassedToService": "greengrass.amazonaws.com" } } } ] }

Fase 3: Autorizzazione per l'accesso al bucket S3 da parte del ruolo di esecuzione

Per avviare la distribuzione di massa, il ruolo di esecuzione deve essere in grado di leggere il file di input della distribuzione di massa dal bucket Amazon S3. Collegare la seguente policy di esempio al bucket Amazon S3, in modo cheGetObjectle autorizzazioni sono accessibili al ruolo di esecuzione.

Per ulteriori informazioni, consulta In che modo aggiungere una policy del bucket S3?

{ "Version": "2008-10-17", "Id": "examplePolicy", "Statement": [ { "Sid": "Stmt1535408982966", "Effect": "Allow", "Principal": { "AWS": [ "executionRoleArn" ] }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-bucket/objectKey" } ] }

Utilizzare il comando seguente nel terminale per verificare la policy del bucket.

aws s3api get-bucket-policy --bucket my-bucket
Nota

È possibile modificare direttamente il ruolo di esecuzione per concedere l'autorizzazione per i bucket Amazon S3GetObjectautorizzazioni in sostituzione. A tale scopo, collegare la seguente policy di esempio al ruolo di esecuzione.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-bucket/objectKey" } ] }

Fase 4: Distribuzione dei gruppi

In questo fase, inizierai un'operazione di distribuzione di massa di tutte le versioni dei gruppi configurate nel file di input della distribuzione di massa. L'operazione di distribuzione per tutte le versioni di gruppo è di tipo NewDeploymentType.

Nota

Non potrai utilizzare StartBulkDeployment mentre è in esecuzione un'altra distribuzione di massa dallo stesso account. La richiesta viene respinta.

  1. Per avviare la distribuzione di massa, utilizzare il comando seguente:

    Ti consigliamo di includere un token X-Amzn-Client-Token in ciascuna richiesta StartBulkDeployment. Tali richieste sono idempotenti rispetto al token e ai parametri della richiesta. Il token può essere qualsiasi stringa univoca che preveda una distinzione tra lettere maiuscole e minuscole, composta da un massimo di 64 caratteri ASCII.

    aws greengrass start-bulk-deployment --cli-input-json "{ "InputFileUri":"URI of file in S3 bucket", "ExecutionRoleArn":"ARN of execution role", "AmznClientToken":"your Amazon client token" }"

    Il comando deve restituire correttamente il codice 200, oltre alla seguente risposta:

    { "bulkDeploymentId": UUID }

    Prendere nota dell'ID della distribuzione di massa. Potrà essere utilizzato per controllare lo stato della distribuzione di massa.

    Nota

    Anche se le operazioni di distribuzione in blocco non sono attualmente supportate, puoi creare Amazon EventBridge regole di eventi per ricevere notifiche sulle modifiche dello stato della distribuzione per i singoli gruppi. Per ulteriori informazioni, consulta la pagina Ottenere le notifiche di distribuzione .

  2. Utilizzare il seguente comando per controllare lo stato della distribuzione di massa:

    aws greengrass get-bulk-deployment-status --bulk-deployment-id 1234567

    Il comando deve restituire il codice di stato 200 oltre a un payload JSON di informazioni:

    { "BulkDeploymentStatus": Running, "Statistics": { "RecordsProcessed": integer, "InvalidInputRecords": integer, "RetryAttempts": integer }, "CreatedAt": "string", "ErrorMessage": "string", "ErrorDetails": [ { "DetailedErrorCode": "string", "DetailedErrorMessage": "string" } ] }

    BulkDeploymentStatus contiene lo stato corrente dell'esecuzione di massa. L'esecuzione può avere uno di sei diversi stati:

    • Initializing. La richiesta di distribuzione di massa è stata ricevuta e l'esecuzione sta per iniziare.

    • Running. L'esecuzione della distribuzione di massa è iniziata.

    • Completed. L'esecuzione della distribuzione di massa ha terminato l'elaborazione di tutti i record.

    • Stopping. L'esecuzione della distribuzione di massa ha ricevuto un comando di arresto e si interromperà a breve. Non potrai avviare una nuova distribuzione di massa se lo stato di quella precedente è Stopping.

    • Stopped. L'esecuzione della distribuzione di massa è stata interrotta manualmente.

    • Failed. Si è verificato un errore durante l'esecuzione della distribuzione di massa, che è stata interrotta. Puoi trovare i dettagli dell'errore nel campo ErrorDetails.

    Il payload JSON, inoltre, include informazioni statistiche sull'avanzamento della distribuzione di massa. Puoi utilizzare tali informazioni per stabilire quanti gruppi sono stati elaborati e quanti non lo sono stati. Le informazioni statistiche includono:

    • RecordsProcessed: il numero di gruppi di record che si è tentato di elaborare.

    • InvalidInputRecords: il numero totale di record che hanno restituito un errore irreversibile. Ad esempio, questo può verificarsi se un gruppo di record del file di input utilizza un formato non valido o specifica una versione di gruppo inesistente oppure se l'esecuzione non concede l'autorizzazione per la distribuzione di un gruppo o di una versione del gruppo.

    • RetryAttempts: il numero totale di tentativi di distribuzione che hanno restituito un errore irreversibile. Ad esempio, un nuovo tentativo viene attivato se quello di distribuzione di un gruppo precedente restituisce un errore di throttling. Hai a disposizione cinque tentativi di distribuzione del gruppo.

    In caso di errore di esecuzione della distribuzione di massa, il payload include anche una sezione ErrorDetails utilizzabile per la risoluzione dei problemi. Contiene informazioni sulla causa dell'errore di esecuzione.

    Puoi controllare periodicamente lo stato della distribuzione di massa per accertarti che stia procedendo come previsto. Al termine della distribuzione, RecordsProcessed dovrebbe essere pari al numero di gruppi di distribuzione del file di input della distribuzione di massa. Questo indica sono stati elaborati tutti i record.

Fase 5: Test della distribuzione

Utilizza il comando ListBulkDeployments per trovare l'ID della distribuzione di massa.

aws greengrass list-bulk-deployments

Questo comando restituisce un elenco di tutte le distribuzioni di massa, dalla più recente a quella meno recente, incluso BulkDeploymentId.

{ "BulkDeployments": [ { "BulkDeploymentId": 1234567, "BulkDeploymentArn": "string", "CreatedAt": "string" } ], "NextToken": "string" }

Chiamare ora il comando ListBulkDeploymentDetailedReports per raccogliere informazioni dettagliate su ciascuna distribuzione.

aws greengrass list-bulk-deployment-detailed-reports --bulk-deployment-id 1234567

Il comando deve restituire il codice di stato 200 insieme a un payload JSON di informazioni:

{ "BulkDeploymentResults": [ { "DeploymentId": "string", "GroupVersionedArn": "string", "CreatedAt": "string", "DeploymentStatus": "string", "ErrorMessage": "string", "ErrorDetails": [ { "DetailedErrorCode": "string", "DetailedErrorMessage": "string" } ] } ], "NextToken": "string" }

Questo payload include in genere un elenco impaginato di ciascuna distribuzione e del relativo stato, dalla più recente alla meno recente. Contiene inoltre altre informazioni in caso di errore di esecuzione della distribuzione di massa. Anche in questo caso, il numero totale di distribuzioni in elenco deve corrispondere al numero di gruppi identificati nel file di input della distribuzione di massa.

Le informazioni restituite possono modificare finché le distribuzioni finché non sono nello stato terminale (esito positivo o negativo). Questo comando può essere richiamato periodicamente fino a quel momento.

Risoluzione dei problemi di distribuzione di massa

Se la distribuzione di massa non viene completata correttamente, puoi provare a eseguire la procedura di risoluzione dei problemi riportata di seguito. Eseguire i comandi nel terminale.

Risoluzione degli errori del file di input

La distribuzione di massa può avere esito negativo in caso di errori di sintassi nel file di input della distribuzione di massa. Questo restituisce lo stato Failed della distribuzione di massa, con un messaggio di errore che indica il numero di riga del primo errore di convalida. Possono verificarsi quattro tipi di errore:

  • InvalidInputFile: Missing GroupId at line number: line number

    Questo errore indica che la riga del file di input non è in grado di registrare il parametro specificato. I possibili parametri mancanti sono GroupId e GroupVersionId.

  • InvalidInputFile: Invalid deployment type at line number : line number. Only valid type is 'NewDeployment'.

    Questo errore indica che la riga del file di input elenca un tipo di distribuzione non valido. Al momento, l'unico tipo di distribuzione supportato è NewDeployment.

  • Line %s is too long in S3 File. Valid line is less than 256 chars.

    Questo errore indica che la riga del file di input è troppo lunga e deve essere abbreviata.

  • Failed to parse input file at line number: line number

    Questo errore indica che la riga del file di input non è considerata un json valido.

Verifica delle distribuzioni di massa simultanee

Non è possibile avviare una nuova distribuzione di massa mentre un'altra è ancora in esecuzione o non presenta lo stato terminale. Ciò può restituire Concurrent Deployment Error. Puoi utilizzare il comando ListBulkDeployments per verificare che una distribuzione di massa non sia attualmente in corso. Questo comando elenca le distribuzioni di massa dalla più recente alla meno recente.

{ "BulkDeployments": [ { "BulkDeploymentId": BulkDeploymentId, "BulkDeploymentArn": "string", "CreatedAt": "string" } ], "NextToken": "string" }

Utilizzare BulkDeploymentId della prima distribuzione di massa dell'elenco per eseguire il comando GetBulkDeploymentStatus. Se la distribuzione di massa più recente è in esecuzione (Initializing o Running), utilizzare il comando seguente per interromperla.

aws greengrass stop-bulk-deployment --bulk-deployment-id BulkDeploymentId

Questa operazione restituirà lo stato Stopping finché la distribuzione non raggiunge quello Stopped. Dopo che la distribuzione ha raggiunto lo stato Stopped, potrai avviare una nuova distribuzione di massa.

Check ErrorDetails

Eseguire il comando GetBulkDeploymentStatus per restituire un payload JSON contenente informazioni dettagliate su qualsiasi errore di esecuzione della distribuzione di massa.

"Message": "string", "ErrorDetails": [ { "DetailedErrorCode": "string", "DetailedErrorMessage": "string" } ]

Quando si verifica un errore, il payload JSON ErrorDetails restituito da questa chiamata fornisce ulteriori informazioni sull'errore di esecuzione della distribuzione di massa. Ad esempio, un codice di stato dell'errore della serie 400, indica un errore di input che può essersi verificato nei parametri di input o nelle dipendenze del chiamante.

Verifica del log core AWS IoT Greengrass

Puoi risolvere i problemi visualizzando i log core AWS IoT Greengrass. Utilizza i seguenti comandi per visualizzare runtime.log:

cd /greengrass/ggc/var/log sudo cat system/runtime.log | more

Per ulteriori informazioni sulla registrazione di AWS IoT Greengrass, consulta Monitoraggio con i log AWS IoT Greengrass.

Consultare anche

Per ulteriori informazioni, consulta le seguenti risorse :