Potato auf AWS Lightsail bereitstellen
Eine Potato-Annotationsstudie für $12 im Monat mit potato deploy auf AWS Lightsail bringen, von den Zugangsdaten bis zum Abholen der Annotationen am Ende.
potato deploy up --provider aws bringt eine Annotationsstudie auf eine einzelne virtuelle Maschine bei AWS Lightsail, zum Pauschalpreis von $12 im Monat und mit einer HTTPS-Adresse, die Sie Ihren Annotatoren schicken können. Lightsail ist das AWS-Ziel, das Sie verwenden sollten, sofern es in Ihrem Konto nicht deaktiviert ist. Der Preis enthält die IPv4-Adresse und einen 60-GB-Datenträger, der Neustarts übersteht, und Potato braucht nur die Berechtigungen lightsail:* und sts:GetCallerIdentity, funktioniert also auch unter einer eingeschränkten IAM-Rolle. Diese Seite setzt Potato 2.10 oder neuer voraus und eine Konfiguration, die Sie bereits mit potato start ausgeführt haben.
AWS-Zugangsdaten einrichten
Potato liest AWS-Zugangsdaten auf dieselbe Weise wie das Kommandozeilenwerkzeug aws: aus AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY, dann aus AWS_PROFILE, dann aus ~/.aws/credentials und ~/.aws/config. Installieren Sie das AWS-Extra, melden Sie sich mit der AWS CLI an und prüfen Sie, ob Potato das erwartete Konto sieht:
pip install 'potato-annotation[deploy-aws]'
aws configure # or: aws sso login --profile lab
potato deploy providers --verifyproviders --verify fragt jeden Anbieter, wem Ihre Zugangsdaten gehören, und gibt die Antwort aus. Wenn Ihre Einrichtung Single Sign-on verwendet, übergeben Sie den Profilnamen bei jedem Deployment mit --aws-profile lab. Potato merkt sich ihn, damit spätere Befehle dasselbe Konto verwenden. Potato schreibt AWS-Zugangsdaten nie auf den Datenträger.
Wenn Ihr IAM-Benutzer oder Ihre IAM-Rolle eingeschränkt ist, bitten Sie Ihre Administration um lightsail:* und sts:GetCallerIdentity. Die beiden anderen AWS-Ziele brauchen mehr Berechtigungen als diese. Das EC2-Ziel (--provider aws-ec2, etwa $18 im Monat) ist für Konten gedacht, in denen Lightsail deaktiviert ist, und das ECS-Express-Ziel (--provider aws-ecs) führt einen Container aus, dessen Datenträger einen Neustart nicht übersteht.
Festlegen, wer sich anmelden kann
potato deploy ändert Ihre Anmeldeeinstellungen nicht, und eine Lightsail-Adresse ist öffentlich. Wenn sich laut Konfiguration jeder registrieren kann, meldet der Probelauf unten die Warnung D003, „Anyone who finds the URL can register and annotate.“ (Jeder, der die URL findet, kann sich registrieren und annotieren.) Bei einer Crowdsourcing-Studie ist offene Registrierung meist gewollt, weil die Plattform die Worker zum Link schickt. Für benannte Annotatoren tragen Sie diese vor dem Deployment unter user_config.users mit allow_all_users: false ein (Passwortverwaltung) oder lassen sie sich über Google, GitHub oder Ihre Einrichtung anmelden (SSO und OAuth).
Den Plan prüfen
Ein Probelauf braucht kein AWS-Konto und legt nichts an. Er gibt den Preflight-Bericht aus, jeden Schritt, den das Deployment ausführen würde, und die geschätzten Kosten:
potato deploy up myproject/config.yaml --provider aws --dry-runBei einem Standard-Deployment legt der Plan in us-east-1 eine Instanz an, die nach der Aufgabe benannt ist, mit dem 2-GB-Bundle small_3_0 und Ubuntu 24.04. Er hängt eine statische IP an, damit die Adresse und ihr Zertifikat ein Stoppen und Starten überstehen, und öffnet nur die Ports 22, 80 und 443. Potato lauscht auf Port 8000 hinter dem Webserver Caddy, und das Deployment öffnet Port 8000 nie. Potato erzeugt für dieses Deployment einen eigenen SSH-Deploy-Schlüssel und verwendet Ihre eigenen SSH-Schlüssel nicht.
Drei Flags ändern die Standardwerte. --region akzeptiert jede Lightsail-Region. Weil Potato den Item-Bestand im Speicher hält, braucht ein Korpus, der für 2 GB zu groß ist, --size medium_3_0 mit 4 GB für $24 im Monat. --volume-gb fügt einen separaten Lightsail-Datenträger für $0.10 pro GB und Monat hinzu und legt die Daten der Aufgabe darauf ab.
Bereitstellen
Führen Sie denselben Befehl ohne --dry-run aus. Potato zeigt den Plan noch einmal und wartet auf Ihre Bestätigung:
potato deploy up myproject/config.yaml --provider awsDas Deployment dauert einige Minuten, während die Instanz bootet und Docker installiert. Am Ende gibt es die URL aus, eine https://-Adresse auf der statischen IP, und den Pfad der Datei mit dem Admin-Schlüssel, .potato/secrets.json neben Ihrer Konfiguration. Der Admin-Schlüssel öffnet das Admin-Dashboard unter /admin. Wenn Sie up nach einer Änderung der Konfiguration erneut ausführen, lädt es die neue Version hoch und startet die Aufgabe auf derselben Instanz neu.
Ohne Domainnamen stellt Let's Encrypt das Zertifikat für die IP-Adresse aus. Es gilt etwa sechs Tage und erneuert sich automatisch. potato deploy status myproject/config.yaml meldet eine fehlgeschlagene Erneuerung, prüfen Sie es also alle paar Tage, wenn die Studie unbeaufsichtigt läuft. Für eine eigene Domain richten Sie einen DNS-A-Eintrag auf die statische IP und stellen mit --domain annotate.example.edu erneut bereit.
Die Studie beenden
Die Annotationen liegen auf dem Datenträger der Instanz, der Neustarts und Reboots übersteht, aber kein destroy. Holen Sie sie zuerst auf Ihren Rechner, prüfen Sie sie und entfernen Sie dann die Instanz:
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yamlpull schreibt alles, was das Deployment gesammelt hat, in ein neues Verzeichnis potato-pull-<name>-<timestamp> und kopiert die Datenbanken mit dem Backup-Befehl von SQLite. destroy läuft nicht bei einem Deployment, von dem nie ein Pull gemacht wurde. Es gibt die statische IP frei, weil Lightsail eine IP in Rechnung stellt, die an keine Instanz angehängt ist. Mit --volume-gb behält destroy --keep-data den separaten Datenträger.
Fehlerbehebung
„AWS rejected the credentials“ bedeutet, dass die SSO-Sitzung abgelaufen ist oder AWS_PROFILE ein Profil nennt, das es nicht gibt. Führen Sie aws sso login aus und stellen Sie erneut bereit.
„Lightsail does not sell bundle …“ erscheint, wenn AWS Bundles nach einer Preisänderung umbenennt. Die Fehlermeldung listet die aktuell angebotenen Bundles auf, und --size akzeptiert eines davon.
HTTPS schlägt in den ersten Minuten fehl, weil das Zertifikat erst angefordert wird, wenn die Instanz erreichbar ist. potato deploy status meldet einen Zertifikatsfehler getrennt von einem Server, der nicht läuft.
Weiterführende Informationen
- Potato lokal oder in der Cloud ausführen, für die anderen Cloud-Ziele und die Backup-Flags
- Einen Annotationsserver bereitstellen, für die Wahl eines Hosts
- AWS-Deployment-Referenz, mit den genauen IAM-Aktionen für jedes AWS-Ziel