Bereitstellen einer Streamlit-Web-App auf AWS mit Authentifizierung mithilfe von AWS Cognito: Ein umfassender Leitfaden | von Ekohlmeyer | Juli 2023

0
25


Erfahren Sie, wie Sie eine Streamlit-Webanwendung auf AWS mit Authentifizierung mithilfe von AWS Cognito bereitstellen, und folgen Sie einem ausführbaren Beispiel auf GitHub!

Hallo an alle! Ich bin ein freiberuflicher Machine-Studying-Ingenieur und möchte Ihnen heute einen Leitfaden zur Bereitstellung einer Streamlit-Internet-App auf AWS, einschließlich der Authentifizierung mit AWS Cognito, vorstellen. Ich musste eine solche Lösung selbst implementieren und stellte fest, dass es on-line nicht genügend Dokumentation und Beispiele gab, die alle meine Fragen beantworteten und ausführbare Beispiele enthielten. Aus diesem Grund habe ich ein einziges GitHub-Repository erstellt, in dem Sie ein umfassendes Beispiel und die erforderliche Terraform Infrastructure as Code (IAC) für eine einfache Bereitstellung finden: https://github.com/EikeKohl/paperqa-web-app/

In diesem Blogbeitrag begleite ich Sie durch den Prozess der Bereitstellung einer Streamlit-Webanwendung auf AWS, einschließlich der Einrichtung der Authentifizierung mit AWS Cognito, und gebe Ihnen eine detaillierte Schritt-für-Schritt-Anleitung.

Das Beispielprojekt PaperQA demonstriert a Streamlit Internet-App, die a ausführt Haystack-Frage-Antwort-Pipeline für Arxiv-Artikel mit OpenAI. Der Zweck dieser App besteht darin, zu zeigen, wie der Informationsabruf auf der Grundlage einer definierten Dokumentendatenbank erfolgen kann.

Sie können Fragen stellen wie:

Was ist ein dynamisch gewichtetes bedingtes Zufallsfeld?

und basiert z. B. auf dem Inhalt der Arbeit https://arxiv.org/pdf/1603.03627.pdfwird Ihre Frage wie folgt beantwortet:

Ein dynamisch gewichtetes bedingtes Zufallsfeld (dWCRF) ist eine kostenempfindliche Lernmethode für die Klassifizierung unausgeglichener Mehrklassendaten in Echtzeit, basierend auf gewichteten bedingten Zufallsfeldern (WCRF), wobei der Optimierungsprozess auf der Maximierung des erwarteten Gesamt-F-Scores basiert. Bei dieser Methode werden die Kostenparameter während des Trainings dynamisch berechnet.

Sie können auch die Kontextabschnitte des Papiers sehen, auf die sich der Chatbot bezieht. So nutzen Sie die App:

  1. Dokumente zur Datenbank hinzufügen: Fügen Sie eine durch Kommas getrennte Zeichenfolge von PDF-URLs in den oberen Textbereich ein und klicken Sie auf „Artikel zur Datenbank hinzufügen“, um eine zu erstellen FAISS-Vektordatenbank unter Verwendung des angegebenen Einbettungsmodells.
  2. Datenbank zurücksetzen: Klicken Sie auf „Datenbank zurücksetzen“, um alle heruntergeladenen Dokumente und die FAISS-Datenbank zu entfernen.
  3. Anfragepapier: Geben Sie Ihre Frage in das Textfeld über der Schaltfläche „Abfragepapier“ ein. Klicken Sie auf die Schaltfläche, um passenden Kontext aus Ihrer Vektordatenbank abzurufen und Ihre Frage basierend auf dem abgerufenen Kontext zu beantworten.
  4. Passen Sie die Einstellungen an: In der linken Seitenleiste können Sie Einstellungen wie Temperatur, Max. Token-Antwort und Anzahl der Kontextübereinstimmungen anpassen. Sie können den Kontext auch überspringen, um zu sehen, worauf sich die Antwort des Modells bezieht.

Um die Anwendung zu testen, empfehle ich, sie zunächst lokal mit Docker auszuführen.

Lokal

Führen Sie den folgenden Befehl aus, um das Docker-Picture zu erstellen:

docker construct -t paperqa .

Um den Container lokal auszuführen, müssen Sie „OPENAI_API_KEY“ als Umgebungsvariable festlegen.

Linux / MacOS

docker run -p 8501:8501 -it 
-e OPENAI_API_KEY=$OPENAI_API_KEY
paperqa

Home windows

docker run -p 8501:8501 -it `
-e OPENAI_API_KEY=$env:OPENAI_API_KEY `
paperqa

Die App wird unter verfügbar sein http://localhost:8501/.

Bereitstellung auf AWS

Um Ihnen den Bereitstellungsprozess zu erleichtern, habe ich Terraform Infrastructure as Code (IAC) in das GitHub-Repository aufgenommen. Diese IAC deckt alle Aspekte der Bereitstellung der App auf AWS ab, wie z Vernetzung, Anwendungslastausgleich, AWS Cognito-Authentifizierung, Route53-Domänenverwaltung, Cloudwatch-ProtokollierungUnd Containerisierte ECS-Bereitstellung. Hier ein kurzer Überblick über die Architektur:

https://aws.amazon.com/de/blogs/containers/securing-amazon-elastic-container-service-applications-using-application-load-balancer-and-amazon-cognito/

Schritt für Schritt Anleitung

  1. Registrieren Sie Ihre Area: Registrieren Sie Ihre Area in Route53 offizielle Dokumentation.
  2. Fordern Sie ein SSL-Zertifikat an und validieren Sie es: Fordern Sie im AWS Certificates Supervisor ein SSL-Zertifikat für die Domäne Ihrer Anwendung an offizielle Dokumentation. Validieren Sie Ihre SSL-Zertifikatsanforderung.
  3. Erstellen Sie ein Geheimnis für den OpenAI-API-Schlüssel: Erstellen Sie ein Geheimnis namens paperqa_openai_api_key mit dem OpenAI-API-Schlüssel zur Verwendung in der Anwendung im AWS Secret Supervisor im Anschluss an offizielle Dokumentation.
  4. Konfigurieren Sie Terraform: Im terraform/vars.tf Legen Sie in der Datei alle Variablen fest, z. B. AWS-Area, Domänenname und SSL-Zertifikat-ARN.
  5. Terraform initialisieren und anwenden: Laufen terraform init Und terraform apply im terraform Verzeichnis. Bestätigen Sie mit „Ja“, um die erforderlichen AWS-Ressourcen zu erstellen.
  6. Erstellen und pushen Sie das Docker-Picture: Führen Sie die aus push_to_ecr.sh Skript, um Ihren Container zu erstellen und ihn an Amazon Elastic Container Registry (ECR) zu übertragen. Vergessen Sie nicht, die anzupassen DOCKER_REGISTRY Und IMAGE_VERSION Variablen im Skript.
  7. Aktualisieren Sie den ECS-Dienst: Führen Sie die aus update_ecs.sh Skript zum Aktualisieren Ihres Amazon Elastic Container Service (ECS) mit der neuen Picture-Model.
  8. Fügen Sie einen Benutzer zu Ihrem Cognito-Benutzerpool hinzu: Folge dem offizielle Dokumentation um einen Benutzer zu Ihrem Cognito-Benutzerpool hinzuzufügen. Denken Sie daran, das Kontrollkästchen „E-Mail-Einladung senden“ zu aktivieren.
  9. Greifen Sie auf die bereitgestellte Anwendung zu: Sobald alle Schritte abgeschlossen sind, sollten Sie über die benutzerdefinierte Domäne, die Sie in Route53 eingerichtet haben, auf Ihre Streamlit-Internet-App zugreifen können.

Ich hoffe, Sie finden diesen Blogbeitrag und das GitHub-Repository hilfreich bei der Bereitstellung Ihrer Streamlit-Webanwendung auf AWS mit Authentifizierung mithilfe von AWS Cognito. Erkunden Sie gerne das Beispielprojekt und nutzen Sie das bereitgestellte Terraform IAC, um Ihre App reibungslos bereitzustellen. Wenn Sie Fragen, Anregungen oder geschäftliche Anfragen haben, zögern Sie bitte nicht, mich unter zu kontaktieren ekohlmeyer21@gmail.com.

Viel Spaß beim Codieren!



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here