[PYTHON] Ich habe versucht, einen URL-Verkürzungsdienst mit AWS CDK serverlos zu machen

Wenn ich einen langen, langen Link geteilt habe, wollte ich ihn kürzen. Nach vielen Recherchen habe ich einige Tutorials gefunden. Ich habe mit dem AWS Cloud Development Kit (CDK) einen URL-Verkürzungsdienst erstellt Eine Geschichte über den Aufbau eines URL-Verkürzungsdienstes, der intern ohne Server kostengünstig verwendet werden kann Ich habe es im letzten Tutorial einmal erstellt, war aber angewidert, dass die benutzerdefinierte Domäneneinstellung von CloudFront nicht funktioniert hat, und ich war angewidert, die Konsole zu öffnen, sodass ich sie schließlich basierend auf dem vorherigen Tutorial angepasst habe.

Schöpfungsfluss

CDK-Setup und Tutorial

Was ist AWS CDK Kurz gesagt, es ist ein Tool, mit dem Sie die Ressourcen, die Sie in AWS benötigen, basierend auf Dateien erstellen können, die in einer Sprache geschrieben sind, mit der Sie vertraut sind. Wenn Sie CloudFormation direkt schreiben, erstellen Sie eine Einstellungsdatei mit Json oder Yaml. Sie können sie jedoch durch Python oder Typescript ersetzen. Es ist notwendig, einige IAMs entsprechend einzustellen, aber ich persönlich mag es, weil ich es schreiben kann, als ob ich es sagen würde. Der Engpass besteht jedoch darin, dass es nicht viele Beispiele gibt. Wenn Sie mit AWS-Begriffen und ressourcenbezogenen Mechanismen nicht vertraut sind, werden Sie nicht träge sein. (Ich persönlich hatte es schwer, weil ich es nicht gewohnt war, Lambda oder Api Gateway zu berühren.) CDK-API-Liste

Die Einführung von cdk und die Erstellung des Basisstapels sind die gleichen wie im Manma-Tutorial, daher werde ich sie weglassen. Bitte beachten Sie Folgendes. Ich habe mit dem AWS Cloud Development Kit (CDK) einen URL-Verkürzungsdienst erstellt

Sperren Sie das API-Gateway

url_shortener_stack.py


api = aws_apigateway.LambdaRestApi(self, "UrlShortenerApi", handler=handler)

Ich konnte nicht feststellen, wie das API-Gateway bei Verwendung von "LambdaRestApi" gesperrt werden kann, daher habe ich es stattdessen mit "RestApi" implementiert.

url_shortener_stack.py


api = aws_apigateway.RestApi(self, "UrlShortenerApi")
shorten_integration = aws_apigateway.LambdaIntegration(shorten_handler)
redirect_integration = aws_apigateway.LambdaIntegration(redirect_handler)

redirect = api.root.add_resource('{proxy}')
redirect_method = redirect.add_method("GET", redirect_integration)#Kein Schlüssel

shorten = api.root.add_resource("shorten")
shorten_method = shorten.add_method("GET", shorten_integration, api_key_required=True)#Mit Schlüssel

api_key = api.add_api_key('APIKey',api_key_name='BuildAPIKey')#Schlüsselerstellung
plan = api.add_usage_plan('ForAPIKey', api_key=api_key, throttle={
            "rate_limit": 100,
            "burst_limit": 1000
        })#Erstellung eines Nutzungsplans, Schlüsselspezifikation
plan.add_api_stage(stage=api.deployment_stage,
                           throttle=[
                               {
                                   "method": shorten_method,
                                   "throttle": {
                                       "rate_limit": 100,
                                       "burst_limit": 1000
                                   }
                               },
                               {
                                   "method": redirect_method,
                                   "throttle": {
                                       "rate_limit": 100,
                                       "burst_limit": 1000
                                   }
                               },
                           ]
                           )#Bühne und Plan verbinden
self.map_company_subdomain('go', api)

In der ursprünglichen Stichprobe wurde es von Lambdas Hauptfunktion gesteuert, konnte jedoch aufgrund mangelnder Leistung nicht gut gesteuert werden (weil Lambda-Hauptfunktionen ausgelöst werden, wenn der Proxy ein beliebiges Token hat, angemessen / Token? Wenn Sie in Form von targetUrl = darauf zugreifen, können Sie die Verkürzungsfunktion von der entsperrten {Proxy} -Wurzel aus auslösen, die Verkürzungsfunktion und die Umleitungsfunktion zu unterschiedlichen Lambda-Funktionen machen und dann jeweils festlegen , Mit der API-Gateway-Methode verknüpft und die abgekürzte Funktion gesperrt.

Erhalten Sie das verkürzte Ergebnis in Json

Wenn Sie das Tutorial beibehalten, wird es als Text / Plain zurückgegeben. Wechseln Sie daher zu json

lambda/shorten.py


return {
            'statusCode': 200,
            'headers': {'Content-Type': 'application/json'},
            'body': json.dumps({'shrink_url': url})
        }

Zusammenfassung

Sie müssen nicht jedes Mal zur Konsole gehen, und cdk diff ist für den Unterschied praktisch, daher möchte ich es positiv verwenden, aber ich kann keinen geeigneten Code schreiben, wenn ich nicht über ausreichende Kenntnisse der zugrunde liegenden AWS-Ressourcen verfüge. Dieser Code funktioniert vorerst, aber ich denke, es gibt viele Punkte, die nicht erreicht werden können, wie z. B. API-Gateway-Phase, Drosselung, Schlüssel, Integration und Steuerung von Lamda-Funktionen. Daher dachte ich, ich sollte ihn schrittweise verbessern.

Recommended Posts

Ich habe versucht, einen URL-Verkürzungsdienst mit AWS CDK serverlos zu machen
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
Ich möchte ein Spiel mit Python machen
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
[AWS] [GCP] Ich habe versucht, die Verwendung von Cloud-Diensten mit Python zu vereinfachen
Ich habe AWS CDK ausprobiert!
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Ich habe eine Burgsuch-API mit Elasticsearch + Sudachi + Go + Echo erstellt
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
Ich habe versucht, einen "verdammt großen Literaturkonverter" zu machen.
[Einführung in AWS] Ich habe versucht, mit der Sprach-Text-Konvertierung zu spielen ♪
Ich habe versucht, mit dem Seq2Seq-Modell von TensorFlow so etwas wie einen Chatbot zu erstellen
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
Ich habe versucht, mit Quantx eine Linie mit gleitendem Durchschnitt des Volumens zu implementieren
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
Ich möchte ein Klickmakro mit pyautogui (Wunsch) erstellen.
Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Ich möchte ein Klickmakro mit pyautogui (Outlook) erstellen.
Ich habe versucht, mit Hy ・ Define a class zu beginnen
Ich habe versucht, eine zufällige FizzBuzz-Spalte mit Blasensortierung zu sortieren.
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Ich habe mit PyQt einen einfachen Texteditor erstellt
[1 Stunde Herausforderung] Ich habe versucht, eine Wahrsagerseite zu erstellen, die für Python zu geeignet ist
Ich habe versucht, Dateien mit Python in AWS S3 / Azure BlobStorage / GCP CloudStorage hochzuladen / herunterzuladen
Ich habe versucht, einen Generator zu erstellen, der mit Python eine C # -Containerklasse aus CSV generiert
Ich habe versucht, mit OpenCV eine Bewegungserkennungsüberwachungskamera mit einer WEB-Kamera mit Raspberry Pi herzustellen
Ich habe versucht, mit Docker einen Dienst aufzubauen, der maschinell erlernte Daten mit explosiver Geschwindigkeit verkauft
[AWS Hands-on] Erstellen wir einen Promi-Identifikationsdienst mit einer serverlosen Architektur!
Ich habe versucht, ein System zu erstellen, das nur gelöschte Tweets abruft
Rubyist hat versucht, eine einfache API mit Python + Flasche + MySQL zu erstellen
Ich habe versucht, Deep Learning mit Spark × Keras × Docker skalierbar zu machen
Ein Memorandum beim automatischen Erwerb mit Selen
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Lassen Sie uns einen Web-Chat mit WebSocket mit AWS serverless (Python) durchführen!