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à.
Connettore di distribuzione dell'applicazione Docker
Il connettore di distribuzione delle applicazioni Greengrass Docker semplifica l'esecuzione delle immagini Docker su un core. AWS IoT Greengrass Il connettore utilizza Docker Compose per avviare un'applicazione Docker multi-container da un file docker-compose.yml
. In particolare, il connettore esegue i comandi docker-compose
per gestire container Docker su un singolo dispositivo core. Per ulteriori informazioni, consulta Overview of Docker Compose
Dopo aver distribuito il gruppo Greengrass, il connettore recupera le immagini più recenti e avvia i contenitori Docker. Esegue il comando and. docker-compose pull
docker-compose
up
Quindi, il connettore pubblica lo stato del comando in un argomento MQTT di output. Inoltre, registra le informazioni di stato relative all'esecuzione dei container Docker. In questo modo è possibile monitorare i log delle applicazioni in Amazon CloudWatch. Per ulteriori informazioni, consulta Monitoraggio con i log AWS IoT Greengrass. Il connettore avvia inoltre container Docker ad ogni riavvio del daemon Greengrass. Il numero di container Docker che possono essere eseguiti sul core dipende dall'hardware in uso.
I container Docker vengono eseguiti all'esterno del dominio Greengrass sul dispositivo core, pertanto non possano accedere alla comunicazione tra processi (IPC) del core. Tuttavia, è possibile configurare alcuni canali di comunicazione con componenti Greengrass, come le funzioni Lambda locali. Per ulteriori informazioni, consulta Comunicazione con i container Docker.
Puoi utilizzare il connettore per scenari come l'hosting di un server Web o di un server MySQL sul dispositivo core. I servizi locali nelle applicazioni Docker possono comunicare tra loro, con altri processi nell'ambiente locale e con i servizi cloud. Ad esempio, puoi eseguire un server Web sul core che invia le richieste dalle funzioni Lambda a un servizio Web nel cloud.
Questo connettore viene eseguito in modalità di isolamento Nessun container, quindi è possibile distribuirlo in un gruppo Greengrass che viene eseguito senza la containerizzazione di Greengrass.
Questo connettore ha le seguenti versioni.
Versione |
ARN |
---|---|
7 |
|
6 |
|
5 |
|
4 |
|
3 |
|
2 |
|
1 |
|
Per informazioni sulle modifiche di ogni versione, consulta Changelog.
Requisiti
Questo connettore presenta i seguenti requisiti:
-
AWS IoT GreengrassSoftware principale v1.10 o successivo.
Nota
Questo connettore non è supportato nelle distribuzioni. OpenWrt
-
Python
versione 3.7 o 3.8 installata sul dispositivo principale e aggiunta alla variabile di ambiente PATH. Nota
Per usare Python 3.8, esegui il seguente comando per creare un collegamento simbolico dalla cartella di installazione predefinita di Python 3.7 ai binari Python 3.8 installati.
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7Questo configura il dispositivo in modo che soddisfi il requisito Python per AWS IoT Greengrass.
-
Un minimo di 36 MB di RAM sul core Greengrass per consentire al connettore per monitorare i container Docker in esecuzione. Il requisito di memoria totale dipende dal numero di container Docker in esecuzione sul core.
-
Docker Engine
v1.1.9.1 o versione successiva installato sul core Greengrass. La versione 19.0.3 è l'ultima versione verificata per il funzionamento con il connettore. L'eseguibile
docker
deve trovarsi nella directory/usr/bin
o/usr/local/bin
.Importante
Ti consigliamo di installare un archivio delle credenziali per proteggere le copie locali delle credenziali Docker. Per ulteriori informazioni, consulta Note sulla sicurezza.
Per informazioni sull'installazione di Docker su distribuzioni Amazon Linux, consulta Docker basics for Amazon ECS nella Amazon Elastic Container Service Developer Guide.
-
Docker Compose
installato sul core Greengrass. L'eseguibile docker-compose
deve trovarsi nella directory/usr/bin
o/usr/local/bin
.Le seguenti versioni di Docker Compose sono state verificate per il funzionamento con il connettore.
Versione connettore
Versione Docker Compose verificata
7
1.25.4
6
1.25.4
5
1.25.4
4
1.25.4
3
1.25.4
2
1.25.1
1
1.24.1
-
Un singolo file Docker Compose (ad esempio,
docker-compose.yml
), archiviato in Amazon Simple Storage Service (Amazon S3). Il formato deve essere compatibile con la versione di Docker Compose installata sul core. È opportuno testare il file prima di utilizzarlo sul core. Se modifichi il file dopo la distribuzione del gruppo Greengrass, devi ridistribuire il gruppo per aggiornare la copia locale sul core. -
Un utente Linux che dispone dell'autorizzazione per chiamare il daemon Docker locale e scrivere nella directory che archivia la copia locale del file Compose. Per ulteriori informazioni, consulta Configurazione dell'utente Docker sul core.
-
Il ruolo del gruppo Greengrass configurato per consentire l'operazione
s3:GetObject
sul bucket S3 che contiene il file Compose. Questa autorizzazione è mostrata nel seguente esempio di politica IAM.{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToComposeFileS3Bucket", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Effect": "Allow", "Resource": "arn:aws:s3:::
bucket-name
/*" } ] }Nota
Se il tuo bucket S3 è abilitato al controllo delle versioni, allora il ruolo deve essere configurato anche per consentire l'azione.
s3:GetObjectVersion
Per ulteriori informazioni, consulta Using versioning nella Amazon Simple Storage Service User Guide.Per il requisito del ruolo di gruppo, è necessario configurare il ruolo in modo da concedere le autorizzazioni necessarie e assicurarsi che il ruolo sia stato aggiunto al gruppo. Per ulteriori informazioni, consulta Gestione del ruolo del gruppo Greengrass (console) o Gestione del ruolo del gruppo Greengrass (CLI).
-
Se il file Docker Compose fa riferimento a un'immagine Docker archiviata in Amazon ECR, il ruolo del gruppo Greengrass è configurato per consentire quanto segue:
-
ecr:GetDownloadUrlForLayer
eecr:BatchGetImage
azioni sui tuoi repository Amazon ECR che contengono le immagini Docker. -
Operazione
ecr:GetAuthorizationToken
sulle risorse.
I repository devono trovarsi nello stesso Account AWS e Regione AWS nel connettore.
Importante
Le autorizzazioni nel ruolo di gruppo possono essere assunte da tutte le funzioni e i connettori Lambda del gruppo Greengrass. Per ulteriori informazioni, consulta Note sulla sicurezza.
Queste autorizzazioni vengono mostrate nella policy di esempio riportata di seguito.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGetEcrRepositories", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": [ "arn:aws:ecr:
region
:account-id
:repository/repository-name
" ] }, { "Sid": "AllowGetEcrAuthToken", "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" } ] }Per ulteriori informazioni, consulta gli esempi di policy relative ai repository di Amazon ECR nella Amazon ECR User Guide.
Per il requisito del ruolo di gruppo, è necessario configurare il ruolo in modo da concedere le autorizzazioni necessarie e assicurarsi che il ruolo sia stato aggiunto al gruppo. Per ulteriori informazioni, consulta Gestione del ruolo del gruppo Greengrass (console) o Gestione del ruolo del gruppo Greengrass (CLI).
-
-
Se il file di Docker Compose fa riferimento a un'immagine Docker di Marketplace AWS
, anche il connettore dispone dei seguenti requisiti: -
È necessario essere iscritti ai prodotti container Marketplace AWS. Per ulteriori informazioni, consulta la sezione relativa all'individuazione e alla sottoscrizione ai prodotti container nella Marketplace AWS Subscribers Guide.
-
AWS IoT Greengrassdeve essere configurato per supportare i segreti locali, come descritto in Secrets Requirements. Il connettore utilizza questa funzionalità solo per recuperare i segreti daAWS Secrets Manager, non per archiviarli.
-
È necessario creare un segreto in Secrets Manager per ogni Marketplace AWS registro che memorizza un'immagine Docker a cui si fa riferimento nel file Compose. Per ulteriori informazioni, consulta Accesso alle immagini Docker da repository privati.
-
-
Se il tuo file Docker Compose fa riferimento a un'immagine Docker da archivi privati in registri diversi da Amazon ECR, come Docker Hub, il connettore ha anche i seguenti requisiti:
-
AWS IoT Greengrassdeve essere configurato per supportare i segreti locali, come descritto in Secrets Requirements. Il connettore utilizza questa funzionalità solo per recuperare i segreti daAWS Secrets Manager, non per archiviarli.
-
È necessario creare un segreto in Secrets Manager per ogni repository privato che memorizza un'immagine Docker a cui si fa riferimento nel file Compose. Per ulteriori informazioni, consulta Accesso alle immagini Docker da repository privati.
-
-
Il daemon Docker deve essere in esecuzione quando si distribuisce un gruppo Greengrass contenente questo connettore.
Accesso alle immagini Docker da repository privati
Se utilizzi le credenziali per accedere alle immagini Docker, il connettore deve poter accedere ad esse. La modalità utilizzata dipende dalla posizione dell'immagine Docker.
Per le immagini Docker archiviate in Amazon ECR, concedi l'autorizzazione a ottenere il token di autorizzazione nel ruolo del gruppo Greengrass. Per ulteriori informazioni, consulta Requisiti.
Per le immagini Docker archiviate in altri repository privati o registri, è necessario creare un segreto AWS Secrets Manager per archiviare le informazioni di accesso. Ciò include le immagini Docker a cui hai effettuato la sottoscrizione in Marketplace AWS. Crea un segreto per ogni repository. Se aggiorni i tuoi segreti in Secrets Manager, le modifiche si propagano al core la prossima volta che distribuisci il gruppo.
Nota
Secrets Manager è un servizio che puoi utilizzare per archiviare e gestire in modo sicuro credenziali, chiavi e altri segreti in. Cloud AWS Per ulteriori informazioni, consulta Che cos'è AWS Secrets Manager? nella Guida per l'utente di AWS Secrets Manager.
Ogni segreto deve contenere le seguenti chiavi:
Chiave |
Valore |
---|---|
|
Il nome utente utilizzato per accedere al repository o al registro. |
|
La password utilizzata per accedere al repository o al registro. |
|
L'endpoint del registro. Questo deve corrispondere all'URL del registro corrispondente nel file Compose. |
Nota
Per consentire a AWS IoT Greengrass di accedere a un segreto per impostazione predefinita, il nome del segreto deve iniziare con greengrass-. In caso contrario, il ruolo del servizio Greengrass deve concedere l'accesso. Per ulteriori informazioni, consulta Consentire a AWS IoT Greengrass di ottenere i valori segreti.
- Per ottenere le informazioni di accesso per le immagini Docker da Marketplace AWS
-
-
Ottieni la password per le immagini Docker Marketplace AWS utilizzando il comando.
aws ecr get-login-password
Per ulteriori informazioni, consulta la sezione get-login-password nella Documentazione di riferimento della AWS CLI.aws ecr get-login-password
-
Recupera l'URL del registro per l'immagine Docker. Apri il Marketplace AWS sito Web e apri la pagina di lancio del prodotto container. In Immagini del contenitore, scegli Visualizza i dettagli dell'immagine del contenitore per individuare il nome utente e l'URL del registro.
Utilizza il nome utente, la password e l'URL del registro recuperati per creare un segreto per ogni Marketplace AWS registro che memorizza le immagini Docker a cui si fa riferimento nel file Compose.
-
- Per creare segreti (console)
-
Nella console AWS Secrets Manager, scegli Other type of secrets (Altro tipo di segreti). In Specify the key-value pairs to be stored for this secret (Specifica le coppie chiave-valore da archiviare per questo segreto), aggiungi righe per
username
,password
eregistryUrl
. Per ulteriori informazioni, consulta Creazione di un segreto di base nella Guida per l'utente. AWS Secrets Manager - Per creare segreti (CLI)
-
InAWS CLI, utilizzare il
create-secret
comando Secrets Manager, come illustrato nell'esempio seguente. Per ulteriori informazioni, vedere create-secret nel AWS CLICommand Reference.aws secretsmanager create-secret --name greengrass-MySecret --secret-string [{"username":"Mary_Major"},{"password":"abc123xyz456"},{"registryUrl":"https://docker.io"}]
Importante
È responsabilità dell'utente proteggere la directory DockerComposeFileDestinationPath
che archivia il file di Docker Compose e le credenziali per le immagini Docker di repository privati. Per ulteriori informazioni, consulta Note sulla sicurezza.
Parametri
Questo connettore fornisce i seguenti parametri:
Esempio di creazione di un connettore (AWS CLI)
Il seguente comando CLI crea una ConnectorDefinition
versione iniziale che contiene il connettore di distribuzione dell'applicazione Greengrass Docker.
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyDockerAppplicationDeploymentConnector", "ConnectorArn": "arn:aws:greengrass:
region
::/connectors/DockerApplicationDeployment/versions/5", "Parameters": { "DockerComposeFileS3Bucket": "myS3Bucket", "DockerComposeFileS3Key": "production-docker-compose.yml", "DockerComposeFileS3Version": "123", "DockerComposeFileDestinationPath": "/home/username/myCompose", "DockerUserId": "1000", "AWSSecretsArnList": "[\"arn:aws:secretsmanager:region
:account-id
:secret:greengrass-secret1-hash
\",\"arn:aws:secretsmanager:region
:account-id
:secret:greengrass-secret2-hash
\"]", "DockerContainerStatusLogFrequency": "30", "ForceDeploy": "True", "DockerPullBeforeUp": "True" } } ] }'
Nota
La funzione Lambda in questo connettore ha un ciclo di vita di lunga durata.
Dati di input
Questo connettore non richiede né accetta dati di input.
Dati di output
Questo connettore pubblica lo stato del comando docker-compose up
come dati di output.
- Filtro argomento in sottoscrizione
-
dockerapplicationdeploymentconnector/message/status
- Output di esempio: Operazione riuscita
-
{ "status":"success", "GreengrassDockerApplicationDeploymentStatus":"Successfully triggered docker-compose up", "S3Bucket":"myS3Bucket", "ComposeFileName":"production-docker-compose.yml", "ComposeFileVersion":"123" }
- Esempio di output: Errore
-
{ "status":"fail", "error_message":"
description of error
", "error":"InvalidParameter" }Il tipo di errore può essere
InvalidParameter
oInternalError
.
Configurazione dell'utente Docker sul core AWS IoT Greengrass
Il connettore di distribuzione dell'applicazione Greengrass Docker viene eseguito come utente specificato per il parametro. DockerUserId
Se non specifichi un valore, il connettore viene eseguito come ggc_user
, che è l'identità di accesso Greengrass predefinita.
Per consentire al connettore di interagire con il daemon Docker, l'utente Docker deve appartenere al gruppo Linux docker
sul core. L'utente Docker deve inoltre disporre delle autorizzazioni in scrittura per la directory DockerComposeFileDestinationPath
. Questa è la posizione in cui il connettore archivia il file docker-compose.yml
locale e le credenziali Docker.
Nota
-
Ti consigliamo di creare un utente Linux anziché utilizzare l'impostazione predefinita
ggc_user
. Altrimenti, qualsiasi funzione Lambda nel gruppo Greengrass può accedere al file Compose e alle credenziali Docker. -
L'esecuzione come root deve essere utilizzata solo quando strettamente necessario. Se specifichi l'utente root, devi consentire alle funzioni Lambda di essere eseguite come root sul AWS IoT Greengrass core. Per ulteriori informazioni, consulta Esecuzione di una funzione Lambda come utente root.
-
Creare l'utente. È possibile eseguire il comando
useradd
e includere l'opzione-u
facoltativa per assegnare un UID. Per esempio:sudo useradd -u
1234
user-name
-
Aggiungere l'utente al gruppo
docker
sul core. Per esempio:sudo usermod -aG docker
user-name
Per ulteriori informazioni, inclusa la modalità di creazione del gruppo
docker
, consulta Manage Docker as a non-root usernella documentazione di Docker. -
Concedere le autorizzazioni utente per scrivere nella directory specificata per il parametro
DockerComposeFileDestinationPath
. Per esempio:-
Per impostare l'utente come il proprietario della directory. Questo esempio utilizza l'UID della fase 1.
chown
1234
docker-compose-file-destination-path
-
Per fornire le autorizzazioni in lettura e scrittura al proprietario.
chmod 700
docker-compose-file-destination-path
Per ulteriori informazioni, consulta How To Manage File And Folder Permissions In Linux
nella documentazione di Linux Foundation. -
Se non è stato assegnato un UID al momento della creazione dell'utente o se è stato utilizzato un utente esistente, eseguire il comando
id
per cercare l'UID.id -u
user-name
Utilizzare l'UID per configurare il parametro
DockerUserId
per il connettore.
-
Informazioni di utilizzo
Quando si utilizza il connettore di distribuzione delle applicazioni Greengrass Docker, è necessario conoscere le seguenti informazioni sull'utilizzo specifiche dell'implementazione.
-
Prefisso per i nomi dei progetti. Il connettore antepone il prefisso
greengrassdockerapplicationdeployment
ai nomi dei container Docker che avvia. Il connettore utilizza questo prefisso come il nome del progetto nei comandidocker-compose
che esegue. -
Comportamento di registrazione. Il connettore scrive informazioni sullo stato e informazioni sulla risoluzione dei problemi in un file di log. È possibile configurare AWS IoT Greengrass l'invio dei log a CloudWatch Logs e la scrittura dei log localmente. Per ulteriori informazioni, consulta Registrazione per connettori. Questo è il percorso al log locale per il connettore:
/
greengrass-root
/ggc/var/log/user/region
/aws/DockerApplicationDeployment.logDevi disporre delle autorizzazioni root per accedere ai log locali.
-
Aggiornamento delle immagini Docker. Docker memorizza le immagini nella cache sul dispositivo core. Se aggiorni un'immagine Docker e desideri propagare la modifica al dispositivo core, assicurati di modificare il tag per l'immagine nel file Compose. Le modifiche diventano effettive dopo la distribuzione del gruppo Greengrass.
-
Timeout di 10 minuti per le operazioni di pulizia. Quando il demone Greengrass si ferma durante un riavvio, il
docker-compose down
comando viene avviato. Tutti i contenitori Docker dispongono di un massimo di 10 minuti dopo l'avvio per eseguire qualsiasidocker-compose down
operazione di pulizia. Se la pulizia non viene completata entro 10 minuti, devi pulire manualmente i contenitori rimanenti. Per ulteriori informazioni, consulta docker rmnella documentazione dell'interfaccia a riga di comandi di Docker. -
Esecuzione di comandi Docker. Per risolvere i problemi, puoi eseguire i comandi Docker in una finestra del terminale sul dispositivo core. Ad esempio, esegui il comando seguente per visualizzare i container Docker avviati dal connettore:
docker ps --filter name="greengrassdockerapplicationdeployment"
-
ID di risorsa riservato. Il connettore utilizza l'ID
DOCKER_DEPLOYER_SECRET_RESOURCE_RESERVED_ID_
per le risorse Greengrass create nel gruppo Greengrass. Gli ID risorsa devono essere univoci nel gruppo, pertanto non assegnare un ID risorsa che potrebbe essere in conflitto con questo ID risorsa riservata.index
-
Modalità offline. Quando si imposta il parametro di
DockerOfflineMode
configurazione suTrue
, il connettore Docker è in grado di funzionare in modalità offline. Ciò può accadere quando una distribuzione di gruppo Greengrass si riavvia mentre il dispositivo principale è offline e il connettore non riesce a stabilire una connessione ad Amazon S3 o Amazon ECR per recuperare il file Docker Compose.Con la modalità offline abilitata, il connettore tenta di scaricare il file Compose ed eseguire i
docker login
comandi come farebbe per un normale riavvio. Se questi tentativi falliscono, il connettore cerca un file Compose archiviato localmente nella cartella specificata utilizzando ilDockerComposeFileDestinationPath
parametro. Se esiste un file Compose locale, il connettore segue la normale sequenza didocker-compose
comandi ed estrae immagini locali. Se il file Compose o le immagini locali non sono presenti, il connettore si guasta. Il comportamento deiStopContainersOnNewDeployment
parametriForceDeploy
and rimane lo stesso in modalità offline.
Comunicazione con i container Docker
AWS IoT Greengrass supporta i seguenti canali di comunicazione tra i componenti Greengrass e i container Docker:
-
Le funzioni Greengrass Lambda possono utilizzare le API REST per comunicare con i processi nei contenitori Docker. È possibile configurare un server in un contenitore Docker che apre una porta. Le funzioni Lambda possono comunicare con il contenitore su questa porta.
-
I processi nei container Docker possono scambiare messaggi MQTT tramite il broker messaggi Greengrass locale. È possibile configurare il contenitore Docker come dispositivo client nel gruppo Greengrass e quindi creare abbonamenti per consentire al contenitore di comunicare con le funzioni Greengrass Lambda, i dispositivi client e altri connettori del gruppo o con e il servizio shadow locale. AWS IoT Per ulteriori informazioni, consulta Configurazione della comunicazione MQTT con i container Docker.
-
Le funzioni Greengrass Lambda possono aggiornare un file condiviso per passare informazioni ai contenitori Docker. Puoi utilizzare il file Compose per eseguire il montaggio vincolato del percorso file condiviso per un container Docker.
Configurazione della comunicazione MQTT con i container Docker
Puoi configurare un contenitore Docker come dispositivo client e aggiungerlo a un gruppo Greengrass. Quindi, puoi creare sottoscrizioni che consentono la comunicazione MQTT tra il container Docker e i componenti Greengrass o AWS IoT. Nella procedura seguente, viene creata una sottoscrizione che consente al dispositivo del container Docker di ricevere messaggi di aggiornamento shadow dal servizio shadow locale. Puoi seguire questo modello per creare altre sottoscrizioni.
Nota
Questa procedura presuppone che abbiate già creato un gruppo Greengrass e un core Greengrass (v1.10 o successivo). Per informazioni sulla creazione di un gruppo e di un core Greengrass, vedere. Guida introduttiva con AWS IoT Greengrass
Per configurare un contenitore Docker come dispositivo client e aggiungerlo a un gruppo Greengrass
-
Crea una cartella sul dispositivo principale per archiviare i certificati e le chiavi utilizzati per autenticare il dispositivo Greengrass.
Il percorso del file deve essere montato sul container Docker che si desidera avviare. Il frammento di codice seguente mostra come montare un percorso del file nel file Compose. In questo esempio,
path-to-device-certs
rappresenta la cartella creata in questo passaggio.version: '3.3' services: myService: image:
user-name
/repo
:image-tag
volumes: - /path-to-device-certs
/:/path-accessible-in-container
Nel riquadro di navigazione della AWS IoT console, in Gestione, espandi i dispositivi Greengrass, quindi scegli Gruppi (V1).
Scegliere il gruppo target.
-
Nella pagina di configurazione del gruppo, scegli Dispositivi client, quindi scegli Associa.
-
Nella finestra Modale Associa un dispositivo client a questo gruppo, scegli Crea nuovo AWS IoT elemento.
La pagina Crea oggetti si apre in una nuova scheda.
-
Nella pagina Crea elementi, scegli Crea elemento singolo, quindi scegli Avanti.
-
Nella pagina Specificare le proprietà dell'oggetto, inserisci un nome per il dispositivo, quindi scegli Avanti.
-
Nella pagina Configura il certificato del dispositivo, scegli Avanti.
-
Nella pagina Allega le politiche al certificato, esegui una delle seguenti operazioni:
-
Seleziona una politica esistente che conceda le autorizzazioni richieste dai dispositivi client, quindi scegli Crea oggetto.
Si apre una finestra modale in cui è possibile scaricare i certificati e le chiavi utilizzati dal dispositivo per connettersi al coreCloud AWS.
-
Crea e allega una nuova policy che conceda le autorizzazioni per i dispositivi client. Esegui questa operazione:
-
Scegli Crea policy.
La pagina Create policy (Crea policy) viene aperta in una nuova scheda.
-
Nella pagina Create policy (Crea policy), eseguire le operazioni seguenti:
-
Per Nome della politica, inserisci un nome che descriva la politica, ad esempio.
GreengrassV1ClientDevicePolicy
-
Nella scheda Dichiarazioni politiche, in Documento di politica, scegli JSON.
-
Inserisci il seguente documento di policy. Questa politica consente al dispositivo client di scoprire i core Greengrass e comunicare su tutti gli argomenti MQTT. Per informazioni su come limitare l'accesso a questa politica, vedere. Autenticazione e autorizzazione del dispositivo per AWS IoT Greengrass
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Connect", "iot:Receive" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:*" ], "Resource": [ "*" ] } ] }
-
Scegliere Crea per creare la policy.
-
-
Torna alla scheda del browser con la pagina Allega politiche al certificato aperta. Esegui questa operazione:
-
Nell'elenco Politiche, seleziona la politica che hai creato, ad esempio GreengrassV1ClientDevicePolicy.
Se non vedi la politica, scegli il pulsante di aggiornamento.
-
Scegli Create thing (Crea oggetto).
Si apre una finestra modale in cui puoi scaricare i certificati e le chiavi che il dispositivo utilizza per connettersi al Cloud AWS core.
-
-
-
-
Nella modalità Scarica certificati e chiavi, scarica i certificati del dispositivo.
Importante
Prima di scegliere Fine, scarica le risorse di sicurezza.
Esegui questa operazione:
-
Per Certificato del dispositivo, scegli Scarica per scaricare il certificato del dispositivo.
-
Per il file della chiave pubblica, scegli Scarica per scaricare la chiave pubblica per il certificato.
-
Per File di chiave privata, scegli Scarica per scaricare il file di chiave privata per il certificato.
-
Consulta l'autenticazione del server nella Guida per gli AWS IoT sviluppatori e scegli il certificato CA principale appropriato. Ti consigliamo di utilizzare gli endpoint Amazon Trust Services (ATS) e i certificati CA root ATS. In Certificati CA root, scegli Scarica per un certificato CA root.
-
Seleziona Fatto.
Prendi nota dell'ID del certificato che è comune nei nomi dei file per il certificato e le chiavi del dispositivo. perché sarà necessaria in seguito.
-
-
Copia i certificati e le chiavi nella cartella creata nel passaggio 1.
Quindi, creare una sottoscrizione nel gruppo. Per questo esempio, creare una sottoscrizione che consente al dispositivo container Docker di ricevere messaggi MQTT dal servizio shadow locale.
Nota
La dimensione massima di un documento shadow è di 8 KB. Per ulteriori informazioni, consulta Quote di AWS IoT nella Guida per gli sviluppatori di AWS IoT.
Per creare una sottoscrizione che consente al dispositivo container Docker di ricevere messaggi MQTT dal servizio shadow locale
-
Nella pagina Select your source and target (Seleziona origine e destinazione), configura l'origine e la destinazione come indicato di seguito:
-
Per Select a source (Seleziona un'origine), scegli Services (Servizi), quindi scegli Local Shadow Service (Servizio shadow locale).
-
In Select a target (Seleziona una destinazione), scegliere Devices (Dispositivi), quindi selezionare il dispositivo.
-
Seleziona Avanti.
-
Nella pagina Filtra i dati con un argomento, per Filtro argomento scegli
$aws/things/
, quindi scegli Avanti. SostituisciloMyDockerDevice
/shadow/update/acceptedMyDockerDevice
con il nome del dispositivo che hai creato in precedenza. -
Scegli Fine.
-
Includi il frammento di codice seguente nell'immagine Docker cui fai riferimento nel file Compose. Questo è il codice del dispositivo Greengrass. Inoltre, aggiungi il codice nel container Docker che avvia il dispositivo Greengrass all'interno del container. Può essere eseguito come un processo separato nell'immagine o in un thread separato.
import os import sys import time import uuid from AWSIoTPythonSDK.core.greengrass.discovery.providers import DiscoveryInfoProvider from AWSIoTPythonSDK.exception.AWSIoTExceptions import DiscoveryInvalidRequestException from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient # Replace thingName with the name you registered for the Docker device. thingName = "MyDockerDevice" clientId = thingName # Replace host with the IoT endpoint for your &AWS-account;. host = "myPrefix.iot.region.amazonaws.com" # Replace topic with the topic where the Docker container subscribes. topic = "$aws/things/MyDockerDevice/shadow/update/accepted" # Replace these paths based on the download location of the certificates for the Docker container. rootCAPath = "/path-accessible-in-container/AmazonRootCA1.pem" certificatePath = "/path-accessible-in-container/certId-certificate.pem.crt" privateKeyPath = "/path-accessible-in-container/certId-private.pem.key" # Discover Greengrass cores. discoveryInfoProvider = DiscoveryInfoProvider() discoveryInfoProvider.configureEndpoint(host) discoveryInfoProvider.configureCredentials(rootCAPath, certificatePath, privateKeyPath) discoveryInfoProvider.configureTimeout(10) # 10 seconds. GROUP_CA_PATH = "./groupCA/" MQTT_QOS = 1 discovered = False groupCA = None coreInfo = None try: # Get discovery info from AWS IoT. discoveryInfo = discoveryInfoProvider.discover(thingName) caList = discoveryInfo.getAllCas() coreList = discoveryInfo.getAllCores() # Use first discovery result. groupId, ca = caList[0] coreInfo = coreList[0] # Save the group CA to a local file. groupCA = GROUP_CA_PATH + groupId + "_CA_" + str(uuid.uuid4()) + ".crt" if not os.path.exists(GROUP_CA_PATH): os.makedirs(GROUP_CA_PATH) groupCAFile = open(groupCA, "w") groupCAFile.write(ca) groupCAFile.close() discovered = True except DiscoveryInvalidRequestException as e: print("Invalid discovery request detected!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") except BaseException as e: print("Error in discovery!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId) myAWSIoTMQTTClient.configureCredentials(groupCA, privateKeyPath, certificatePath) # Try to connect to the Greengrass core. connected = False for connectivityInfo in coreInfo.connectivityInfoList: currentHost = connectivityInfo.host currentPort = connectivityInfo.port myAWSIoTMQTTClient.configureEndpoint(currentHost, currentPort) try: myAWSIoTMQTTClient.connect() connected = True except BaseException as e: print("Error in connect!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) if connected: break if not connected: print("Cannot connect to core %s. Exiting..." % coreInfo.coreThingArn) sys.exit(-2) # Handle the MQTT message received from GGShadowService. def customCallback(client, userdata, message): print("Received an MQTT message") print(message) # Subscribe to the MQTT topic. myAWSIoTMQTTClient.subscribe(topic, MQTT_QOS, customCallback) # Keep the process alive to listen for messages. while True: time.sleep(1)
Note sulla sicurezza
Quando utilizzi il connettore di distribuzione delle applicazioni Greengrass Docker, tieni presente le seguenti considerazioni sulla sicurezza.
-
Storage locale del file di Docker Compose
Il connettore archivia una copia del file Compose nella directory specificata per il parametro
DockerComposeFileDestinationPath
.È responsabilità dell'utente proteggere questa directory. Utilizzare le autorizzazioni del file system per limitare l'accesso alla directory.
-
Storage locale delle credenziali Docker
Se le immagini Docker vengono archiviate in repository privati, il connettore archivia le credenziali Docker nella directory specificata per il parametro
DockerComposeFileDestinationPath
.È responsabilità dell'utente proteggere queste credenziali. Ad esempio, utilizzare credential-helper
sul dispositivo core quando si installa Docker Engine. -
Istallazione di Docker Engine da un'origine attendibile
È responsabilità dell'utente installare Docker Engine da un'origine attendibile. Questo connettore utilizza il daemon Docker sul dispositivo core per accedere agli asset Docker e gestire i container Docker.
-
Ambito delle autorizzazioni del ruolo del gruppo Greengrass
Le autorizzazioni aggiunte al ruolo di gruppo Greengrass possono essere assunte da tutte le funzioni e i connettori Lambda del gruppo Greengrass. Questo connettore richiede l'accesso al file di Docker Compose archiviato in un bucket S3. Richiede inoltre l'accesso al token di autorizzazione Amazon ECR se le immagini Docker sono archiviate in un repository privato in Amazon ECR.
Licenze
Il connettore di distribuzione delle applicazioni Greengrass Docker include i seguenti software/licenze di terze parti:
-
AWS SDK for Python (Boto3)
/Apache License 2.0 -
botocore
/Apache License 2.0 -
dateutil
/PSF License -
docutils
/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain -
jmespath
/MIT License -
s3transfer
/Apache License 2.0 -
urllib3
/MIT License
Questo connettore è rilasciato ai sensi del contratto di licenza del software Greengrass Core
Changelog
La tabella seguente descrive le modifiche apportate a ciascuna versione del connettore.
Versione |
Modifiche |
---|---|
7 |
|
6 |
|
5 |
Le immagini vengono estratte prima dell'esecuzione. |
4 |
Aggiunto pull-before-up un comportamento per aggiornare le immagini Docker. |
3 |
Risolto un problema con la ricerca di variabili d'ambiente. |
2 |
Aggiunto il parametro |
1 |
Versione iniziale. |
Un gruppo Greengrass può contenere una sola versione del connettore alla volta. Per informazioni sull'aggiornamento di una versione del connettore, consulta Aggiornamento delle versioni dei connettori.