Skip to content

Distribuire Potato su AWS Lightsail

Porta uno studio Potato su AWS Lightsail per $12 al mese con potato deploy, dalla configurazione delle credenziali al recupero finale delle annotazioni.

potato deploy up --provider aws porta uno studio di annotazione su una singola macchina virtuale AWS Lightsail a un prezzo fisso di $12 al mese, con un indirizzo HTTPS da inviare ai tuoi annotatori. Lightsail è la destinazione AWS da usare, a meno che non sia disattivato nel tuo account. Il prezzo include l'indirizzo IPv4 e un disco da 60 GB che sopravvive ai riavvii, e Potato ha bisogno solo dei permessi lightsail:* e sts:GetCallerIdentity, quindi funziona anche con un ruolo IAM limitato. Questa pagina richiede Potato 2.10 o successivo e una configurazione che hai già eseguito con potato start.

Configurare le credenziali AWS

Potato legge le credenziali AWS nello stesso modo dello strumento a riga di comando aws: da AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY, poi da AWS_PROFILE, poi da ~/.aws/credentials e ~/.aws/config. Installa l'extra AWS, accedi con l'AWS CLI e verifica che Potato veda l'account che ti aspetti:

bash
pip install 'potato-annotation[deploy-aws]'
aws configure                     # or: aws sso login --profile lab
potato deploy providers --verify

providers --verify chiede a ciascun provider a chi appartengono le tue credenziali e stampa la risposta. Se la tua istituzione usa il single sign-on, passa il nome del profilo a ogni deploy con --aws-profile lab, e Potato lo registra così che i comandi successivi usino lo stesso account. Potato non scrive mai le credenziali AWS su disco.

Se il tuo utente o ruolo IAM è limitato, chiedi al tuo amministratore lightsail:* e sts:GetCallerIdentity. Le altre due destinazioni AWS richiedono più permessi di questi. La destinazione EC2 (--provider aws-ec2, circa $18 al mese) serve per gli account in cui Lightsail è disattivato, e la destinazione ECS Express (--provider aws-ecs) esegue un container il cui disco non sopravvive a un riavvio.

Decidere chi può accedere

potato deploy non modifica le tue impostazioni di accesso, e un indirizzo Lightsail è pubblico. Se la configurazione permette a chiunque di registrarsi, l'esecuzione di prova qui sotto segnala l'avviso D003, "Anyone who finds the URL can register and annotate." (Chiunque trovi l'URL può registrarsi e annotare.) Per uno studio in crowdsourcing la registrazione aperta di solito è voluta, dato che la piattaforma manda i lavoratori al link. Per annotatori nominativi, elencali sotto user_config.users con allow_all_users: false (Gestione delle password) oppure falli accedere con Google, GitHub o la tua istituzione (Autenticazione SSO e OAuth) prima del deploy.

Controllare il piano

Un'esecuzione di prova non richiede alcun account AWS e non crea nulla. Stampa il rapporto dei controlli preliminari, ogni passaggio che il deploy eseguirebbe e il costo stimato:

bash
potato deploy up myproject/config.yaml --provider aws --dry-run

Per un deploy predefinito, il piano crea un'istanza con il nome del task in us-east-1, usando il bundle small_3_0 da 2 GB e Ubuntu 24.04. Collega un IP statico, così l'indirizzo e il suo certificato sopravvivono a un arresto e a un nuovo avvio, e apre solo le porte 22, 80 e 443. Potato ascolta sulla porta 8000 dietro il server web Caddy, e il deploy non apre mai la porta 8000. Potato genera una chiave SSH di deploy per questo deployment e non usa le tue chiavi SSH.

Tre opzioni cambiano i valori predefiniti. --region accetta qualsiasi regione Lightsail. Poiché Potato tiene in memoria l'insieme degli item, un corpus troppo grande per 2 GB richiede --size medium_3_0, che offre 4 GB per $24 al mese. --volume-gb aggiunge un disco Lightsail separato a $0.10 per GB al mese e vi conserva i dati del task.

Distribuire

Esegui lo stesso comando senza --dry-run. Potato mostra di nuovo il piano e attende la tua conferma:

bash
potato deploy up myproject/config.yaml --provider aws

Il deploy richiede alcuni minuti, mentre l'istanza si avvia e installa Docker. Termina stampando l'URL, un indirizzo https:// sull'IP statico, e il percorso del file della chiave di amministrazione, .potato/secrets.json accanto alla tua configurazione. La chiave di amministrazione apre la dashboard di amministrazione su /admin. Eseguire di nuovo up dopo aver modificato la configurazione carica la nuova versione e riavvia il task sulla stessa istanza.

Senza un nome di dominio, Let's Encrypt emette il certificato per l'indirizzo IP. Dura circa sei giorni e si rinnova automaticamente. potato deploy status myproject/config.yaml segnala un rinnovo non riuscito, quindi controllalo ogni pochi giorni se lo studio gira senza supervisione. Per usare un tuo dominio, punta un record DNS A all'IP statico ed esegui di nuovo il deploy con --domain annotate.example.edu.

Chiudere lo studio

Le annotazioni si trovano sul disco dell'istanza, che sopravvive a riavvii e reboot ma non a destroy. Recuperale prima sulla tua macchina, controllale e poi rimuovi l'istanza:

bash
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yaml

pull scrive tutto ciò che il deployment ha raccolto in una nuova directory potato-pull-<name>-<timestamp> e copia i database con il comando di backup di SQLite. destroy non si esegue su un deployment su cui non è mai stato eseguito un pull. Rilascia l'IP statico, perché Lightsail fattura un IP non collegato a un'istanza. Con --volume-gb, destroy --keep-data conserva il disco separato.

Risoluzione dei problemi

"AWS rejected the credentials" significa che la sessione SSO è scaduta o che AWS_PROFILE indica un profilo che non esiste. Esegui aws sso login e ripeti il deploy.

"Lightsail does not sell bundle …" compare quando AWS rinomina i bundle dopo una variazione di prezzo. L'errore elenca i bundle attualmente in vendita, e --size ne accetta uno.

HTTPS non funziona per i primi minuti perché il certificato viene richiesto quando l'istanza diventa raggiungibile. potato deploy status distingue un errore di certificato da un server non attivo.

Approfondimenti