L'agente di avvio del container in Compute Engine è deprecato. Questo agente ti consente di eseguire il deployment di container sulle istanze Compute Engine quando crei VM.
Questo documento descrive come eseguire la migrazione dei container esistenti creati dall'agente di avvio sulle VM o sui gruppi di istanze gestite (MIG) ad altri serviziTrusted Cloud .
In base ai tuoi requisiti, scegli una delle seguenti opzioni per migrare i container di cui è stato eseguito il deployment sulle VM utilizzando il metodo ritirato:
- Se vuoi continuare a eseguire container su singole VM e MIG, utilizza gli script di avvio o cloud-init.
- Se hai applicazioni container stateless e job di dimensioni piccole o medie, utilizza Cloud Run.
- Se il tuo container è un job batch con uno stato finale definito e richiede risorse di calcolo aggiuntive, utilizza Batch.
- Se hai bisogno di controllo e scalabilità avanzati o se non riesci a soddisfare i tuoi requisiti con le altre opzioni, utilizza GKE su Google Cloud.
Per altri casi d'uso e soluzioni alternative, consulta Confrontare le opzioni di deployment dei container.
Opzioni ritirate per la configurazione dei container sulle VM
Quando configuri un container durante la creazione della VM,
Compute Engine utilizza l'agente di avvio del container per leggere i
metadati gce-container-declaration
che memorizzano le
informazioni sul container e per eseguire il deployment del container sulla VM.
Le seguenti opzioni per il deployment dei container direttamente su una VM o un MIG
che utilizzano l'agente di avvio del container e gce-container-metadata
sono deprecate.
Console
L'opzione Esegui il deployment del container nella pagina Crea un'istanza è ritirata:
gcloud
I seguenti comandi gcloud
che configurano un container su una VM o un template di istanza sono ritirati:
- gcloud compute instances create-with-container
- gcloud compute instances update-container
- gcloud compute instance-templates create-with-container
- comando gcloud compute instances create che utilizza il flag
--metadata
per impostare la chiave di metadatigce-container-declaration
- comando gcloud compute instance-templates create che utilizza il flag
--metadata
per impostare la chiave di metadatigce-container-declaration
Terraform
Il modulo Terraform gce-container
e la chiave di metadati gce-container-declaration
per configurare i container sono ritirati.
Identificare le istanze che utilizzano i metadati del container deprecati
Per determinare se alcune istanze del tuo progetto utilizzano i metadati del container ritirati, esegui il seguente comando Google Cloud CLI che elenca le istanze
con la chiave e il valore dei metadati gce-container-declaration
:
gcloud compute instances list --filter="metadata.items.key:gce-container-declaration"
Questo comando fornisce un elenco di tutte le istanze VM nel progetto configurato che
contengono la chiave di metadati gce-container-declaration
. La chiave di metadati identifica in modo univoco
le VM che rientrano nell'ambito del ritiro. Se utilizzi più progetti, esegui questo comando in tutti i progetti attivi.
Se hai un'istanza specifica che vuoi convalidare, esegui questo comando Google Cloud CLI:
gcloud compute instances describe VM_NAME --format="(metadata.items)"
Sostituisci VM_NAME con il nome dell'istanza VM che vuoi convalidare.
Per ulteriori informazioni sulla visualizzazione dei metadati, vedi Visualizzare ed eseguire query sui metadati.
Confronta le opzioni di deployment dei container
La tabella seguente riassume i casi d'uso per l'esecuzione di container sulle VM e consiglia soluzioni alternative per i container per la migrazione dei tuoi workload:
Casi d'uso | Tipo di sostituzione | Costo | Soluzione consigliata |
---|---|---|---|
|
Sostituzione diretta | Nessun costo aggiuntivo | Utilizza gli script di avvio per creare le VM. |
Ad esempio, crea utenti, importa file, monta dischi o utilizza la modalità con privilegi. |
Sostituzione diretta | Nessun costo aggiuntivo | Utilizza cloud-init per eseguire attività durante il ciclo di vita della VM. |
Esegui un job batch con uno stato finale definito e che richiede risorse di computing aggiuntive. | Servizio gestito | Dipende dalle caratteristiche del carico di lavoro e dalla complessità della configurazione del container. | Batch |
|
Servizio gestito | Soluzione a costo zero o ridotto per carichi di lavoro più piccoli. | Cloud Run |
|
Servizio gestito | Dipende dalle caratteristiche del workload e dalla complessità della configurazione del container. | Google Kubernetes Engine |
Quando esegui la transizione dall'agente di avvio dei container di Compute Engine a una soluzione alternativa, considera le seguenti modifiche richieste e il potenziale impegno per implementarle:
- VM che eseguono Container-Optimized OS: assumi la piena proprietà della VM e della configurazione, della sicurezza e della manutenzione del runtime del container, che spesso comporta la creazione di script con script di avvio o
cloud-init
. - Cloud Run o Batch: assicurati che le tue applicazioni siano senza stato e si adattino al modello di esecuzione basato su richieste o su job. Questo approccio potrebbe comportare l'adattamento delle applicazioni per funzionare con servizi di gestione dello stato esterni.
- GKE: adotta i principi di Kubernetes, definisci i carichi di lavoro utilizzando i file manifest Kubernetes e gestisci le risorse del cluster.
Utilizza gli script di avvio per eseguire il deployment dei container sulle VM
Puoi eseguire un container di base su una VM utilizzando uno script di avvio.
Tieni presente i seguenti punti quando utilizzi uno script di avvio per configurare i container:
- Puoi utilizzare uno script di avvio per gli scenari di base. Per la configurazione avanzata,
valuta la possibilità di utilizzare
cloud-init
. - Poiché stai creando una nuova VM con un container configurato utilizzando lo script di avvio, devi pianificare la transizione di tutti i workload di cui è stato eseguito il deployment sulle VM esistenti.
- Testa e assicurati che tutto funzioni come previsto prima di indirizzare il traffico alla VM appena creata con un container.
Per creare una VM e per eseguire il deployment di un container su una VM o un MIG, segui questi passaggi:
- Mappa il container corrente nei metadati della VM al comando dello script di avvio
- Crea uno script di avvio basato sulla configurazione dei metadati esistente
- Crea una VM utilizzando lo script di avvio o Crea un MIG utilizzando lo script di avvio.
Mappare i metadati del container al comando docker run
Puoi mappare i metadati della VM o i flag gcloud
agli argomenti docker run
e includerli nello script di avvio per la creazione di VM.
Alcuni flag gcloud
vengono convertiti direttamente nei metadati della VM. Queste bandiere corrispondono
direttamente alle bandiere docker run
.
Se hai un container esistente su una VM, puoi leggere la configurazione dei metadati della VM e creare uno script di avvio utilizzando i comandi docker run
equivalenti.
# Get your existing VM instance configuration in yaml format
gcloud compute instances describe VM_NAME --format="(metadata.items)"
L'output è simile al seguente:
metadata:
items:
- key: gce-container-declaration
value: |
spec:
containers:
- args:
- '"hello world!"'
command:
- echo
env:
- name: ONE
value: '1'
image: docker.io/library/busybox
name: my-instance
securityContext:
privileged: true
stdin: true
tty: true
restartPolicy: Always
- key: google-logging-enabled
value: 'true'
Utilizza la seguente tabella per mappare la specifica esistente ai comandi docker run
:
Flag Google Cloud CLI | Chiave dei metadati della VM | Comando Docker run |
---|---|---|
--container-image |
containers.image |
Specifica come argomento senza alcun flag. Ad esempio: docker run gcr.io/google-containers/busybox |
--container-command |
command |
Specifica come argomento senza alcun flag, dopo il nome dell'immagine container. Ad esempio: docker run gcr.io/google-containers/busybox echo "hello world" |
--container-arg |
args |
Specifica come argomento senza alcun flag, dopo il comando. Ad esempio: docker run gcr.io/google-containers/busybox echo "hello world" |
--container-env |
containers.env array |
--env KEY=VALUE [--env KEY=VALUE ...] |
--container-restart-policy |
restartPolicy |
--restart I valori possibili sono no , on-failure e always . Il valore predefinito è no . |
--container-stdin |
containers.stdin |
-i Flag booleano, true se presente, false per impostazione predefinita. |
--container-tty |
containers.tty |
-t Flag booleano, true se presente, false per impostazione predefinita. |
--container-privileged |
containers.securityContext.privileged |
--privileged Flag booleano, true se presente, false per impostazione predefinita. |
--container-mount-disk |
- | Nessun comando docker run equivalente.Puoi montare il disco separatamente. |
Script di avvio di esempio
Gli esempi seguenti mostrano come includere i comandi docker
nello script di avvio:
- Esempio 1: esegue un container autonomo in una VM basata su Container-Optimized OS.
Esempio 2: esegue un container del server web in una VM basata su Container-Optimized OS.
Esempio 1
Esegui un container autonomo in una VM basata su Container-Optimized OS:
#!/bin/bash
# A name for the container
CONTAINER_NAME="my-app-container"
# Stop and remove the container if it exists
docker stop $CONTAINER_NAME || true
docker rm $CONTAINER_NAME || true
# Pull the latest version of the container image from Docker Hub
docker pull busybox:latest
# Run docker container from image in docker hub
docker run busybox:latest \
echo "hello world!"
Esempio 2
Esegui un container del server web in una VM basata su Container-Optimized OS:
#!/bin/bash
# Enable incoming traffic
iptables -A INPUT -j ACCEPT
# A name for the container
CONTAINER_NAME="my-app-container"
# Stop and remove the container if it exists
docker stop $CONTAINER_NAME || true
docker rm $CONTAINER_NAME || true
# Pull the latest version of the container image from Docker Hub
docker pull nginx:latest
# Run docker container from image in docker hub
docker run \
--name=$CONTAINER_NAME \
--privileged \
--restart=always \
--tty \
--detach \
--network="host" \
nginx:latest
Opzioni di configurazione aggiuntive per il deployment dei container
Questa sezione descrive i parametri di configurazione aggiuntivi per il deployment dei container sulle VM.
Per saperne di più su queste opzioni, vedi Configurare le opzioni per l'esecuzione di un container.
Accesso alle immagini di Artifact Registry
Se hai bisogno di accedere alle immagini container da gcr.io o pkg.dev,
utilizza lo strumento docker-credential-gcr
, preinstallato in Container-Optimized OS,
e configura l'autenticazione ad Artifact Registry per Docker.
Esegui questo comando prima di eseguire il container:
# Set home directory to save docker credentials
HOME=/home/appuser
# Configure docker with credentials for gcr.io and pkg.dev
docker-credential-gcr configure-docker
Per saperne di più, consulta Configurare l'autenticazione in Artifact Registry per Docker.
Configurazione logging
Ti consigliamo di utilizzare Cloud Logging attivando un agente di logging su una VM.
In alternativa, se vuoi modificare il driver di logging, puoi includere
il parametro --log-driver
con il comando docker run
:
# Use Cloud Logging logging driver
docker run --log-driver=gcplogs nginx:latest
Per saperne di più, consulta Utilizzo di Cloud Logging con Container-Optimized OS.
Configura il firewall interno
Container-Optimized OS nega il traffico in entrata per impostazione predefinita, quindi devi aggiungere
regole iptables
per consentire questo traffico. Tieni presente che questi comandi configurano il firewall interno del sistema operativo host. Inoltre, devi configurare il firewall
virtual private cloud per consentire il traffico alla nuova VM.
Per saperne di più, consulta Utilizzo delle regole firewall VPC.
# Enable all incoming and routed traffic
iptables -A INPUT -p -j ACCEPT
iptables -A FORWARD -p -j ACCEPT
Per maggiori informazioni, consulta la sezione Configurazione del firewall host.
Collega i volumi al contenitore
Se i volumi sono collegati al container, i metadati del container includono la voce
volumes
e un array volumeMounts
. Il name
di una voce in volumes
corrisponde al nome di una voce in volumeMounts
e viceversa.
Per ogni volume che raccogli, recupera le informazioni richieste da
volumes
o dalla voce volumeMounts
.
Se non sono collegati volumi al container, puoi saltare questa sezione e creare direttamente una VM utilizzando lo script di avvio.
Per saperne di più su dischi e file system su Container-Optimized OS, consulta la panoramica su dischi e file system.
Monta il file system tmpfs
Per montare un file system tmpfs vuoto in un container, specifica l'argomento --tmpfs
con il comando docker run
. Ad esempio, per montare un file system della cache
nel container nginx, esegui questo comando:
# mount a cache file system to the nginx container
docker run -d --name=$CONTAINER_NAME --tmpfs /var/cache/nginx:rw,size=512m,noexec,nosuid,nodev --network="host" nginx:latest
Per ulteriori informazioni sul montaggio dei file system tmpfs
, consulta la sezione Montaggi tmpfs.
Montare una directory host
Per montare una directory da una VM host a un container, specifica l'argomento --mount
con il comando docker run
:
# mount a read-only directory to the nginx container
docker run -d --name=$CONTAINER_NAME --mount type=bind,source=/var/www/html,target=/usr/share/nginx/html,ro nginx:latest
Per saperne di più, vedi Montaggi bind.
Monta un disco permanente sul container
Il montaggio di un disco nel container richiede passaggi aggiuntivi. Per montare un disco, montalo prima sulla VM, quindi montalo sul container:
Per montare il disco sulla VM, esegui questo comando:
#!/bin/bash DISK_DEVICE_NAME="my-persistent-disk" # This name MUST match the 'device-name' in the gcloud --disk flag DISK_BY_ID_PATH="/dev/disk/by-id/google-${DISK_DEVICE_NAME}" HOST_MOUNT_POINT="/mnt/disks/my-persistent-disk" # This is the path where the disk will be mounted on the VM CONTAINER_MOUNT_PATH="/usr/share/my-persistent-disk" # This is the path where the disk will be mounted in the container # format a disk as an ext4 filesystem, if it doesn't already contain one file -sL $DISK_BY_ID_PATH | grep -q filesystem || \ mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard $DISK_BY_ID_PATH # create a directory for mounting point sudo mkdir -p "${HOST_MOUNT_POINT}" # mount a disk to the VM sudo mount -o defaults,discard "${DISK_BY_ID_PATH}" "${HOST_MOUNT_POINT}"
Dopo aver montato il disco sulla VM, aggiungi il flag
--mount
con il comandodocker run
per montare il disco sul container:docker run -d --name=$CONTAINER_NAME --mount type=bind,source="${HOST_MOUNT_POINT}",target="${CONTAINER_MOUNT_PATH}",readonly nginx:latest
Crea una VM utilizzando lo script di avvio
Dopo aver creato uno script di avvio con la configurazione del container, utilizzalo per creare una VM basata su Container-Optimized OS. Per saperne di più sulla creazione di una VM basata su Container-Optimized OS, vedi Crea un'istanza da un'immagine pubblica.
Per ulteriori informazioni sull'utilizzo degli script di avvio, consulta Utilizzare gli script di avvio nelle VM Linux.
Console
Nella console Trusted Cloud , vai alla pagina Crea un'istanza.
Se richiesto, seleziona il progetto e fai clic su Continua. Viene visualizzata la pagina Crea un'istanza, che mostra il riquadro Configurazione macchina.
Nel riquadro Configurazione macchina, seleziona la famiglia di macchine e il tipo di macchina per la tua VM.
Nel menu di navigazione, fai clic su Sistema operativo e spazio di archiviazione. Nel riquadro Sistema operativo e spazio di archiviazione visualizzato, configura il disco di avvio seguendo questi passaggi:
- Fai clic su Cambia. Viene visualizzato il riquadro Disco di avvio con la scheda Immagini pubbliche.
- Nell'elenco Sistema operativo, seleziona Container Optimized OS.
- Nell'elenco Versione, seleziona la versione del sistema operativo.
- Nell'elenco Tipo di disco di avvio, seleziona il tipo di disco di avvio.
- (Facoltativo) Se hai bisogno di dischi aggiuntivi, aggiungili nella sezione Dischi aggiuntivi.
- Fai clic su Seleziona.
Nel menu di navigazione, fai clic su Avanzate.
- Nella sezione Automazione, incolla lo script di avvio che hai creato per il deployment del container.
Per creare e avviare la VM, fai clic su Crea.
gcloud
Quando utilizzi gcloud CLI, memorizza uno script di avvio in un file separato.
Per creare una VM utilizzando uno script di avvio, esegui il seguente comando:
gcloud compute instances create VM_NAME \ --zone=ZONE \ --image-family=IMAGE_FAMILY \ --image-project=IMAGE_PROJECT \ --machine-type=MACHINE_TYPE \ --metadata-from-file=startup-script=STARTUP_SCRIPT_FILE
Sostituisci quanto segue:
VM_NAME
: il nome della nuova VM.ZONE
: la zona in cui creare l'istanza.IMAGE_PROJECT
: il progetto immagine di Container-Optimized OS che contiene l'immagine, ad esempiocos-cloud
.IMAGE_FAMILY
: la famiglia di immagini Container-Optimized OS, ad esempiocos-stable
.MACHINE_TYPE
: il tipo di macchina per la nuova VM, che può essere un tipo di macchina predefinito o personalizzato.STARTUP_SCRIPT_FILE
: il percorso relativo sul computer al file dello script di avvio, ad esempio./startup_script.sh
.
Esempio:
# Create COS-based VM by using a startup script gcloud compute instances create "cos-instance-with-startup-script" \ --zone="us-central1-c" \ --machine-type="e2-medium" \ --image-family="cos-stable" \ --image-project="cos-cloud" \ --metadata-from-file=startup-script="./startup_script.sh"
Verifica che Compute Engine abbia creato la VM eseguendo questo comando:
gcloud compute instances describe VM_NAME
Sostituisci
VM_NAME
con il nome della VM che hai creato.
Terraform
Per creare una VM, puoi utilizzare la risorsa google_compute_instance
.
provider "google" { project = "PROJECT_ID" } resource "google_compute_instance" "cos_vm_instance" { name = "VM_NAME" machine_type = "MACHINE_TYPE" zone = "ZONE" # Use a Container-Optimized OS image for the boot disk boot_disk { initialize_params { image = "IMAGE_PROJECT/IMAGE_FAMILY" } } # Attaches the instance to the default network network_interface { network = "default" } # Specify the relative path to the startup script on your local machine metadata = { startup-script = file("STARTUP_SCRIPT_FILE") } }
Sostituisci quanto segue:
VM_NAME
: il nome della nuova VMZONE
: la zona in cui creare l'istanza.IMAGE_PROJECT
: il progetto immagine di Container-Optimized OS che contiene l'immagine, ad esempiocos-cloud
.IMAGE_FAMILY
: la famiglia di immagini Container-Optimized OS, ad esempiocos-stable
.MACHINE_TYPE
: il tipo di macchina per la nuova VM, che può essere un tipo di macchina predefinito o personalizzato.STARTUP_SCRIPT_FILE
: il percorso relativo sul computer al file dello script di avvio, ad esempio./startup_script.sh
.
Esempio:
provider "google" { project = "my-project" } resource "google_compute_instance" "my_container_vm" { name = "my-container-vm-startup" machine_type = "e2-medium" zone = "us-central1-a" boot_disk { initialize_params { image = "cos-cloud/cos-stable" } } network_interface { network = "default" } metadata = { startup-script = file("./startup_script.sh") } }
Crea un gruppo di istanze gestite utilizzando lo script di avvio
Dopo aver creato un modello di istanza utilizzando lo script di avvio, utilizza uno dei seguenti metodi per creare un MIG.
Per saperne di più sulla creazione di MIG, vedi Creare un gruppo di istanze gestite.
Console
Crea un modello di istanza basato sullo script di avvio creato nella sezione precedente.
- Nella sezione Sistema operativo, seleziona un Container-Optimized OS e una versione.
- Nella sezione Automazione, incolla lo script di avvio che hai creato per il deployment del container.
Crea un gruppo di istanze gestite utilizzando il modello di istanza creato nel passaggio precedente.
gcloud
Crea un modello di istanza utilizzando il comando
instance-templates create
.Devi utilizzare un'immagine Container-Optimized OS per la VM. Puoi specificare il percorso relativo al file dello script di avvio nel flag
--metadata-from-file
.Crea un gruppo di istanze gestite utilizzando il modello di istanza creato nel passaggio precedente.
Esempio:
# Create the instance template that uses a startup script gcloud compute instance-templates create startup-template \ --machine-type=e2-medium \ --image-family=cos-stable \ --image-project=cos-cloud \ --metadata-from-file=startup-script=./startup_script.sh # Create the managed instance group gcloud compute instance-groups managed create startup-mig \ --template=startup-template \ --size=2 \ --zone=us-central1-a
Terraform
Utilizza le risorse google_compute_instance_template
e google_compute_instance_group_manager
per
creare un modello di istanza e un gruppo di istanze gestite, come mostrato nell'esempio seguente:
Esempio:
resource "google_compute_instance_template" "startup_template" { name_prefix = "startup-template-" machine_type = "e2-medium" disk { source_image = "cos-cloud/cos-stable" auto_delete = true boot = true } network_interface { network = "default" } metadata = { startup-script = file("./startup_script.sh") } } resource "google_compute_instance_group_manager" "startup_mig" { name = "startup-mig" base_instance_name = "startup-vm" zone = "us-central1-a" version { instance_template = google_compute_instance_template.startup_template.id } target_size = 2 }
Testare e pulire
Dopo aver creato correttamente una VM o un MIG, verifica che l'applicazione sia in esecuzione sul container e funzioni come previsto. Per risolvere eventuali problemi, consulta la sezione Risoluzione dei problemi.
Se l'applicazione viene eseguita correttamente sulle nuove VM create utilizzando lo script di avvio, puoi eliminare le VM e i MIG che utilizzano il metodo di deployment dei container ritirato.
Risoluzione dei problemi
Per risolvere i problemi che potrebbero verificarsi durante la configurazione dei container sulle VM utilizzando uno script di avvio, visualizza i log dello script di avvio e i log dei container.
Per visualizzare i log dello script di avvio nell'istanza VM, esegui questo comando:
sudo journalctl | grep "startup script"
Per visualizzare i log dal container Docker, esegui il comando
docker logs
:docker logs CONTAINER_NAME
Sostituisci
CONTAINER_NAME
con il nome del tuo contenitore.
Per risolvere altri problemi, consulta i seguenti documenti:
- Panoramica di Cloud Logging
- Utilizzo di Cloud Logging con Container-Optimized OS
- Risoluzione dei problemi relativi al daemon Docker
- Risolvere i problemi e diagnosticare
- Risolvere i problemi di Terraform
- Risoluzione dei problemi durante l'esecuzione di un server web di base
- Creazione della connettività a internet per le VM private
Utilizzare cloud-init
con Container-Optimized OS
Puoi utilizzare cloud-init
,
una soluzione multipiattaforma standard del settore, per eseguire il deployment di container sulle VM
che eseguono Container-Optimized OS.
Questo strumento ti consente di eseguire la configurazione personalizzata durante la creazione o l'avvio della VM.
Per ulteriori informazioni, consulta
Utilizzare cloud-init
con il formato di configurazione cloud.
Utilizzare servizi gestiti per il deployment dei container
Questa sezione descrive i servizi gestiti forniti da Trusted Cloud by S3NS che puoi utilizzare per eseguire il deployment dei container.
Cloud Run
Cloud Run è una buona opzione per applicazioni container stateless e job di piccole e medie dimensioni.
Le funzionalità principali di Cloud Run includono:
- Puoi scegliere di allocare le CPU solo durante l'elaborazione delle richieste o di allocarle sempre.
- Puoi eseguire un'applicazione container stateless o un job una sola volta, in base a una pianificazione o nell'ambito di un flusso di lavoro.
- Puoi configurare i timeout per ogni richiesta o attività.
- È altamente scalabile e sicuro.
- Dispone di bilanciamento del carico e scalabilità automatica integrati.
Per ulteriori informazioni sul deployment di container su Cloud Run, consulta Deployment di immagini container su Cloud Run
Batch
Batch è un servizio completamente gestito che consente di pianificare, inserire in coda ed eseguire carichi di lavoro di elaborazione batch sulle risorse Trusted Cloud by S3NS . È progettato per l'esecuzione di carichi di lavoro parallelizzabili in stile batch, inclusi quelli inclusi nei container.
Per saperne di più sul deployment dei container su Batch, consulta i seguenti documenti:
Google Kubernetes Engine
Se esegui applicazioni complesse, microservizi, operazioni continue e hai bisogno di controllo e scalabilità granulari, Google Kubernetes Engine (GKE) è l'offerta più adatta. Per saperne di più sul deployment dei container su GKE, consulta i seguenti documenti:
- Panoramica di GKE
- Guida rapida: esegui il deployment di un'app in un cluster GKE
- Deployment di un'applicazione web containerizzata
Assistenza
Se hai domande sulla procedura di migrazione o se hai bisogno di assistenza, consulta le domande frequenti o contatta l'assistenzaTrusted Cloud .