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.
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
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.
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})
}
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.