Quand j'ai partagé un long lien long, je voulais le raccourcir, donc après de nombreuses recherches, j'ai trouvé des tutoriels. J'ai créé un service de raccourcissement d'URL avec AWS Cloud Development Kit (CDK) Une histoire sur la création d'un service de raccourcissement d'URL qui peut être utilisé en interne à faible coût sans serveur Je l'ai créé une fois dans le dernier tutoriel, mais j'étais dégoûté que le paramètre de domaine personnalisé de CloudFront ne fonctionne pas et j'étais dégoûté de faire apparaître la console, alors j'ai fini par le personnaliser en fonction de l'ancien tutoriel.
Qu'est-ce qu'AWS CDK En termes simples, il s'agit d'un outil qui vous permet de créer les ressources dont vous avez besoin sur AWS à partir de fichiers écrits dans une langue que vous connaissez. Lors de l'écriture directe de CloudFormation, un fichier de paramètres est créé avec Json ou Yaml, mais il peut être remplacé par Python ou Typescript. Il est nécessaire de définir correctement certains IAM, mais personnellement, je l'aime parce que je peux l'écrire comme si je le disais. Cependant, le goulot d'étranglement est qu'il n'y a pas beaucoup d'échantillons, et si vous n'êtes pas familiarisé avec les termes AWS et les mécanismes liés aux ressources, vous ne serez pas lent. (Personnellement, j'ai eu du mal car je n'avais pas l'habitude de toucher Lambda ou Api Gateway.) Liste des API CDK
L'introduction de cdk et la création de la pile de base sont les mêmes que dans le didacticiel Manma, donc je les omettrai. Veuillez vous référer à ce qui suit. J'ai créé un service de raccourcissement d'URL avec AWS Cloud Development Kit (CDK)
url_shortener_stack.py
api = aws_apigateway.LambdaRestApi(self, "UrlShortenerApi", handler=handler)
Je n'ai pas trouvé de moyen de verrouiller la passerelle API lors de l'utilisation de LambdaRestApi
, alors je l'ai implémenté en utilisantRestApi
à la place.
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)#Pas de clé
shorten = api.root.add_resource("shorten")
shorten_method = shorten.add_method("GET", shorten_integration, api_key_required=True)#Avec clé
api_key = api.add_api_key('APIKey',api_key_name='BuildAPIKey')#Création de clé
plan = api.add_usage_plan('ForAPIKey', api_key=api_key, throttle={
"rate_limit": 100,
"burst_limit": 1000
})#Création du plan d'utilisation, spécification des clés
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
}
},
]
)#Lier la scène et le plan
self.map_company_subdomain('go', api)
Dans l'exemple d'origine, il était contrôlé par la fonction principale de Lambda, mais il ne pouvait pas être contrôlé correctement en raison d'un manque de puissance (car lambda main se déclenche lorsque le proxy a un jeton arbitraire, approprié / jeton? Si vous y accédez sous la forme targetUrl =, vous pouvez déclencher la fonction de raccourcissement à partir de la racine {proxy} déverrouillée), rendre la fonction de raccourcissement et la fonction de redirection différentes fonctions Lambda, puis définir chacune , Lié à la méthode API Gateway et verrouillé la fonction abrégée.
Si vous conservez le tutoriel, il sera retourné sous forme de texte / plain, alors changez en json
lambda/shorten.py
return {
'statusCode': 200,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'shrink_url': url})
}
Vous n'êtes pas obligé d'accéder à la console à chaque fois, et cdk diff est pratique pour la différence, donc je veux l'utiliser de manière positive, mais je ne peux pas écrire de code approprié à moins d'avoir suffisamment de connaissances sur les ressources AWS sous-jacentes. Ce code fonctionne pour le moment, mais je pense qu'il y a de nombreux points qui ne peuvent pas être atteints tels que l'étape API Gateway, la limitation, les clés, l'intégration et le contrôle des fonctions Lamda, j'ai donc pensé que je devrais l'améliorer progressivement.