Skip to content

Déployer Potato sur AWS Lightsail

Mettez une étude d'annotation Potato sur AWS Lightsail pour $12 par mois avec potato deploy, des identifiants à la récupération finale des annotations.

potato deploy up --provider aws place une étude d'annotation sur une seule machine virtuelle AWS Lightsail pour un forfait de $12 par mois, avec une adresse HTTPS à envoyer à vos annotateurs. Lightsail est la cible AWS à utiliser, sauf s'il est désactivé dans votre compte. Le prix inclut l'adresse IPv4 et un disque de 60 Go qui survit aux redémarrages, et Potato n'a besoin que des permissions lightsail:* et sts:GetCallerIdentity, si bien qu'il fonctionne sous un rôle IAM restreint. Cette page exige Potato 2.10 ou une version ultérieure et une configuration que vous avez déjà exécutée avec potato start.

Configurer les identifiants AWS

Potato lit les identifiants AWS de la même façon que l'outil en ligne de commande aws : depuis AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY, puis AWS_PROFILE, puis ~/.aws/credentials et ~/.aws/config. Installez l'extra AWS, connectez-vous avec l'AWS CLI et vérifiez que Potato voit le compte attendu :

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

providers --verify demande à chaque fournisseur à qui appartiennent vos identifiants et affiche la réponse. Si votre établissement utilise l'authentification unique, passez le nom du profil à chaque déploiement avec --aws-profile lab, et Potato l'enregistre pour que les commandes suivantes utilisent le même compte. Potato n'écrit jamais d'identifiants AWS sur le disque.

Si votre utilisateur ou rôle IAM est restreint, demandez à votre administrateur lightsail:* et sts:GetCallerIdentity. Les deux autres cibles AWS nécessitent davantage de permissions. La cible EC2 (--provider aws-ec2, environ $18 par mois) est destinée aux comptes où Lightsail est désactivé, et la cible ECS Express (--provider aws-ecs) exécute un conteneur dont le disque ne survit pas à un redémarrage.

Décider qui peut se connecter

potato deploy ne modifie pas vos réglages de connexion, et une adresse Lightsail est publique. Si la configuration permet à n'importe qui de s'inscrire, l'exécution à blanc ci-dessous signale l'avertissement D003, « Anyone who finds the URL can register and annotate. » (Quiconque trouve l'URL peut s'inscrire et annoter.) Pour une étude en crowdsourcing, l'inscription libre est généralement voulue, puisque la plateforme envoie les travailleurs vers le lien. Pour des annotateurs nommément désignés, listez-les sous user_config.users avec allow_all_users: false (Gestion des mots de passe) ou faites-les se connecter avec Google, GitHub ou votre établissement (Authentification SSO et OAuth) avant de déployer.

Vérifier le plan

Une exécution à blanc ne nécessite aucun compte AWS et ne crée rien. Elle affiche le rapport de vérification préalable, chaque étape que le déploiement suivrait et le coût estimé :

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

Pour un déploiement par défaut, le plan crée une instance portant le nom de la tâche dans us-east-1, avec le bundle small_3_0 de 2 Go et Ubuntu 24.04. Il y attache une IP statique, si bien que l'adresse et son certificat survivent à un arrêt suivi d'un redémarrage, et n'ouvre que les ports 22, 80 et 443. Potato écoute sur le port 8000 derrière le serveur web Caddy, et le déploiement n'ouvre jamais le port 8000. Potato génère une clé SSH de déploiement pour ce déploiement et n'utilise pas vos propres clés SSH.

Trois options modifient les valeurs par défaut. --region accepte n'importe quelle région Lightsail. Comme Potato garde l'ensemble d'items en mémoire, un corpus trop volumineux pour 2 Go nécessite --size medium_3_0, qui donne 4 Go pour $24 par mois. --volume-gb ajoute un disque Lightsail séparé à $0.10 par Go et par mois et y conserve les données de la tâche.

Déployer

Lancez la même commande sans --dry-run. Potato affiche de nouveau le plan et attend votre confirmation :

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

Le déploiement prend plusieurs minutes, le temps que l'instance démarre et installe Docker. Il se termine en affichant l'URL, une adresse https:// sur l'IP statique, et le chemin du fichier de la clé d'administration, .potato/secrets.json à côté de votre configuration. La clé d'administration ouvre le tableau de bord d'administration à /admin. Relancer up après avoir modifié la configuration téléverse la nouvelle version et redémarre la tâche sur la même instance.

Sans nom de domaine, Let's Encrypt émet le certificat pour l'adresse IP. Il dure environ six jours et se renouvelle automatiquement. potato deploy status myproject/config.yaml signale un renouvellement qui échoue, donc vérifiez-le tous les quelques jours si l'étude tourne sans surveillance. Pour utiliser votre propre domaine, faites pointer un enregistrement DNS A vers l'IP statique et redéployez avec --domain annotate.example.edu.

Terminer l'étude

Les annotations se trouvent sur le disque de l'instance, qui survit aux redémarrages mais pas à destroy. Récupérez-les d'abord sur votre machine, vérifiez-les, puis supprimez l'instance :

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

pull écrit tout ce que le déploiement a collecté dans un nouveau répertoire potato-pull-<name>-<timestamp> et copie les bases de données au moyen de la commande de sauvegarde de SQLite. destroy refuse de s'exécuter sur un déploiement qui n'a jamais fait l'objet d'un pull. Il libère l'IP statique, car Lightsail facture une IP qui n'est attachée à aucune instance. Avec --volume-gb, destroy --keep-data conserve le disque séparé.

Dépannage

« AWS rejected the credentials » signifie que la session SSO a expiré ou que AWS_PROFILE désigne un profil qui n'existe pas. Lancez aws sso login et déployez de nouveau.

« Lightsail does not sell bundle … » apparaît quand AWS renomme ses bundles après un changement de prix. L'erreur liste les bundles actuellement en vente, et --size accepte l'un d'eux.

HTTPS échoue pendant les premières minutes, car le certificat est demandé dès que l'instance est joignable. potato deploy status distingue une erreur de certificat d'un serveur hors ligne.

Pour aller plus loin