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 il per AWS CLI creare e monitorare una distribuzione di gruppo in blocco 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 Iniziare con AWS IoT Greengrass.
-
AWS CLI Installato e configurato sulla tua macchina. Per ulteriori informazioni, consulta la Guida per l'utente di AWS CLI.
-
Un bucket S3 creato nello stesso modo Regione AWS di. AWS IoT Greengrass Per informazioni, consulta Creazione e configurazione di un bucket S3 nella Guida per l'utente di 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, crei un file di input per la distribuzione e lo carichi nel tuo bucket Amazon S3. Questo file è un file JSON serializzato e delimitato da righe che contiene informazioni su ciascun gruppo della distribuzione di massa. AWS IoT Greengrass utilizza queste informazioni per distribuire ciascun gruppo per tuo conto quando inizializzi la distribuzione di gruppo in blocco.
-
Eseguire il seguente comando per ottenere il
groupId
per ciascun gruppo da distribuire. ImmetteregroupId
nel file di input della distribuzione di massa in modo che AWS IoT Greengrass possa identificare ciascun gruppo da distribuire.Nota
Puoi trovare questi valori anche nella console. AWS IoT L'ID gruppo viene visualizzato nella pagina Settings (Impostazioni) del gruppo. IDs Le versioni del gruppo vengono visualizzate nella scheda Distribuzioni del gruppo.
aws greengrass list-groups
La risposta contiene informazioni su ogni gruppo del tuo AWS IoT Greengrass account:
{ "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. Prendi nota del
Version
valore della versione di gruppo che desideri utilizzare.{ "Versions": [ { "Arn": "string", "Id": "string", "Version": "
string
", "CreationTimestamp": "string" } ], "NextToken": "string" } -
Nel terminale o nell'editor che preferisci, crea un file
MyBulkDeploymentInputFile
, usando l'esempio seguente. Questo file contiene informazioni su ciascun AWS IoT Greengrass gruppo 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
eGroupVersionId
e unDeploymentType
. Attualmente AWS IoT Greengrass supporta solo i tipi di distribuzione inNewDeployment
blocco.Salvare e chiudere il file. Prendere nota del percorso del file.
-
Usa il seguente comando nel tuo terminale per caricare il file di input nel tuo 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://amzn-s3-demo-bucket
/
Fase 2: creazione e configurazione di un ruolo di esecuzione IAM
In questo passaggio, utilizzi la console IAM per creare un ruolo di esecuzione autonomo. Quindi stabilisci una relazione di fiducia tra il ruolo AWS IoT Greengrass e ti assicuri che il tuo utente IAM disponga PassRole
dei privilegi per il ruolo di esecuzione. Ciò consente di AWS IoT Greengrass assumere il ruolo di esecuzione e creare le distribuzioni per conto dell'utente.
-
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": ["*"]
-
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 anche le chiavi del contesto
aws:SourceArn
e della condizioneaws:SourceAccount
globale nella tua politica di fiducia per evitare il confuso problema della vice sicurezza. Le chiavi di contesto delle condizioni limitano l'accesso per consentire solo le richieste che provengono dall'account specificato e dall'area di lavoro Greengrass. Per ulteriori informazioni sul problema del "confused deputy", consulta Prevenzione 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
:*" } } } ] } -
Concedi
PassRole
le autorizzazioni IAM per il tuo ruolo di esecuzione al tuo utente IAM. Questo utente IAM è quello utilizzato per avviare la distribuzione in blocco.PassRole
le autorizzazioni consentono all'utente IAM di passare il ruolo di esecuzione all'uso. AWS IoT Greengrass Per ulteriori informazioni, consulta Concedere a un utente le autorizzazioni per passare un ruolo a un servizio. AWSUtilizza l'esempio seguente per aggiornare la policy IAM associata al tuo 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 in blocco, il ruolo di esecuzione deve essere in grado di leggere il file di input della distribuzione di massa dal bucket Amazon S3. Allega la seguente policy di esempio al tuo bucket Amazon S3 in modo che le sue GetObject
autorizzazioni siano accessibili al tuo 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:::amzn-s3-demo-bucket
/objectKey
" } ] }
Utilizzare il comando seguente nel terminale per verificare la policy del bucket.
aws s3api get-bucket-policy --bucket
amzn-s3-demo-bucket
Nota
Puoi modificare direttamente il tuo ruolo di esecuzione per concedergli invece l'autorizzazione alle autorizzazioni del GetObject
tuo bucket Amazon S3. 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:::
amzn-s3-demo-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.
-
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
Sebbene le operazioni di distribuzione in blocco non siano attualmente supportate, puoi creare regole di EventBridge eventi Amazon per ricevere notifiche sulle modifiche allo stato della distribuzione per singoli gruppi. Per ulteriori informazioni, consulta Ottenere le notifiche di distribuzione.
-
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 in blocco è stata ricevuta e l'esecuzione si sta preparando per l'avvio. -
Running
. L'esecuzione della distribuzione in blocco è iniziata. -
Completed
. L'esecuzione della distribuzione in blocco ha terminato l'elaborazione di tutti i record. -
Stopping
. L'esecuzione della distribuzione in blocco ha ricevuto un comando di interruzione e verrà interrotta a breve. Non potrai avviare una nuova distribuzione di massa se lo stato di quella precedente èStopping
. -
Stopped
. L'esecuzione della distribuzione in blocco è stata interrotta manualmente. -
Failed
. L'esecuzione della distribuzione in blocco ha rilevato un errore ed è terminata. Puoi trovare i dettagli dell'errore nel campoErrorDetails
.
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
eGroupVersionId
. -
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.
Controlla 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.
Controlla il registro AWS IoT Greengrass principale
Puoi risolvere i problemi visualizzando i log AWS IoT Greengrass principali. Utilizza i seguenti comandi per visualizzare runtime.log
:
cd /greengrass/ggc/var/log sudo cat system/runtime.log | more
Per ulteriori informazioni sulla AWS IoT Greengrass registrazione, vedere. Monitoraggio con AWS IoT Greengrass registri
Consulta anche
Per ulteriori informazioni, consulta le seguenti risorse: