Anne  de Morel

Anne de Morel

1660050963

Passerelle d'API Amazon avec .NET

Dans cet article complet, nous allons apprendre Amazon API Gateway avec la pile .NET. Grâce à cela, nous pourrons exposer assez facilement AWS Lambdas au monde extérieur.

Dans un article précédent, nous avons appris à travailler avec AWS Lambda en utilisant .NET, qui est un point essentiel pour démarrer avec les applications sans serveur. Bien que nous ayons construit et déployé ces Lambda sur AWS, nous n'avons jamais vraiment discuté de la manière dont nous les exposerions à être invoquées par le monde extérieur.

Plus loin dans ce guide complet, nous allons créer une application sans serveur complète qui s'intègre de manière transparente entre Amazon API Gateway, Lambda, DynamoDb pour la persistance et Cloudwatch à des fins de journalisation.

Vous pouvez trouver le code source de l'implémentation ici .

Qu'est-ce qu'Amazon API Gateway ?

Amazon API Gateway est un service entièrement géré qui vous permet de créer des passerelles, qui servent essentiellement de porte dans votre monde de logique métier pour votre application. Avec ce service, vous exposez essentiellement les points de terminaison qui, lors de l'accès, se connectent à AWS Lambdas, aux points de terminaison publics et à divers autres services AWS en fonction de la manière dont vous créez Amazon API Gateway.

Supposons qu'une application exécutée sur Internet ait besoin d'accéder à la logique métier qui reste dans votre lambda. Ces applications clientes se connecteraient à Amazon API Gateway, qui redirigerait en interne la demande vers l'AWS Lambda associé ou d'autres services que vous auriez configurés.

Examinons une représentation schématique de ce à quoi ressemblerait un flux de requêtes commun via une passerelle API.

Passerelle d'API Amazon avec .NET

Comme vous pouvez le voir, les clients accèdent à la passerelle qui est connectée en interne à un service. Par exemple,

  • www.<url-of-aws-gateway>/test -> redirigerait vers un lambda nommé test-lambda
  • www.<url-of-aws-gateway>/get-students -> redirigerait vers un lambda qui renvoie la liste des étudiants
  • www.<url-of-aws-gateway>/weather?city=trivandrum -> redirigerait vers un point de terminaison d'API météo publique qui renverrait les données météorologiques de la ville de Trivandrum.

Aujourd'hui, les passerelles API sont souvent un élément essentiel de l'ensemble de l'écosystème AWS Serverless, car elles facilitent l'accès à nos services AWS à n'importe quelle échelle.

API REST AWS contre API HTTP

AWS prend en charge deux versions des services API Gateway. La version initiale était pour la variante API REST qui comprend des tonnes de fonctionnalités pour concevoir, développer et maintenir votre API Gateway. Plus tard, vers 2019, AWS introduit les API HTTP qui ont simplifié la création et le déploiement de la passerelle. Ne vous trompez pas avec le nommage, ces deux versions sont construites sur le protocole HTTP suivant les conventions REST. En interne, AWS les nomme v1 (API REST) ​​et v2 (API HTTP)

Il existe de nombreuses différences significatives entre ces versions, notamment les performances, les prix et l'expérience de développement. En bref, HTTP Apis gagne dans presque tous les départements et devrait être votre choix la plupart du temps.

  • Tout d'abord, les API HTTP sont censées être plus performantes et sont presque 10 à 15 % plus performantes que l'API REST.
  • En termes de tarification, pour les 300 premiers millions de requêtes par mois, les API HTTP ne vous coûteraient que 1 USD, alors que, pour le même volume, les API REST coûtent environ 3,5 USD. C'est une grande différence. Notez que l'offre gratuite d'AWS inclut 1 million d'API (REST et HTTP) par mois pendant les 12 premiers mois absolument gratuits. Assez de temps pour explorer ces deux technologies intéressantes, n'est-ce pas ?
  • L'expérience utilisateur offerte par la console AWS lors du développement de ces passerelles est complètement différente les unes des autres.
  • L'API REST prend en charge les points de terminaison optimisés pour la périphérie, ce qui garantit que vos points de terminaison sont largement répartis dans le monde, tandis que les points de terminaison HTTP ne prennent en charge que les déploiements régionaux, ce qui peut contribuer à un léger retard dans les réponses.
  • Ces deux éléments sont de nature hautement sécurisée.
  • Les déploiements Canary sont inclus avec l'API REST et non avec les API HTTP s'il s'agit d'un gros problème pour votre stratégie de déploiement.

Pour plus de comparaison, reportez-vous au guide du développeur d'AWS qui compare ces deux versions. Bien que les API HTTP soient moins chères que REST, il existe certainement de nombreuses fonctionnalités incluses dans l'API REST qui justifient la différence de prix.

Quant à notre démonstration, nous utiliserons des API HTTP. Peut-être que dans un article ultérieur, nous explorerons les API REST. Concept-sage, les deux sont presque les mêmes. Nous utiliserons la communauté Visual Studio 2022 avec l'extension AWS SDK Kit comme nous l'avons fait dans l'article précédent sur Lambda pour développer, tester, simuler et publier nos Lambdas sur le cloud AWS.

Il est important que vous ayez déjà parcouru l'article précédent sur AWS Lambda sur .NET, où nous avons configuré les identifiants AWS via l'interface de ligne de commande, installé l'AWS Toolkit sur Visual Studio Code. Si ce n'est pas le cas, reportez-vous à cet article de blog.

Création et publication d'un AWS Lambda avec .NET

Tout d'abord, ouvrons Visual Studio 2022 et créons une solution vierge. J'ai nommé ma solution AWSServerless.Dotnet.Demo . Fondamentalement, nous aurons 2 projets Lambda dans ce domaine, que nous ajouterons progressivement.

  1. Un Lambda factice qui renvoie un message Hello. Ce lambda sera utilisé pour présenter les bases de l'intégration d'Amazon API Gateway et d'autres éléments.
  2. Un étudiant Lambda, auquel nous ajouterons plusieurs gestionnaires de fonctions qui peuvent éventuellement effectuer certaines opérations CRUD de base sur DynamoDB. (PS, j'ai écrit un article sur Premiers pas avec DynamoDB à l'aide de .NET. Consultez-le également.)

Avant de continuer, assurez-vous que les éléments suivants sont déjà en place.

  • Configuration des informations d'identification AWS via l'AWS CLI.
  • AWS Toolkit installé sur votre installation Visual Studio.
  • Avoir un compte AWS. Un niveau gratuit serait plus que suffisant.

Vous pouvez obtenir plus d'informations sur les étapes ci-dessus dans mes articles précédents sur les applications sans serveur AWS avec .NET.

créer un projet vide aws passerelle Amazon API sans serveur avec .NET - Intégrations AWS Lambda et DynamoDB

Ajoutons notre premier projet Lambda à notre solution vierge. Cliquez avec le bouton droit sur la solution dans Visual Studio et cliquez sur Ajouter un nouveau projet. En supposant que vous avez déjà installé AWS Toolkit sur votre instance Visual Studio, vous pouvez rechercher AWS Lambda dans la fenêtre contextuelle « Ajouter un nouveau projet » qui s'affiche.

devenv iArkd7DjVv Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Cliquez sur Suivant. Ici, nommons le lambda HelloLambda. Comme mentionné précédemment, il s'agira d'un simple lambda qui nous aiderait à comprendre à quoi ressemblerait l'intégration complète avec Amazon API Gateway avec .NET. Lorsque vous êtes invité à sélectionner un plan pour votre nouveau lambda, sélectionnez "Fonction vide". Cela nous donne une table rase pour commencer à construire notre Lambda simple.

Vous connaissez déjà la structure des dossiers du projet AWS Lambda. Sinon, parcourez cet article. Ouvrez le Function.cs / FunctionHandler. Maintenant que nous allons attacher ce gestionnaire avec notre API Gateway, nous devons apporter quelques petites modifications à la signature de cette méthode. Mais avant cela, installons un package sur ce projet Lambda qui contient les contrats. Vous pouvez ouvrir la console du gestionnaire de packages et exécuter ce qui suit pour installer le package.

Install-Package Amazon.Lambda.APIGatewayEvents

Allons changer notre FunctionHandler maintenant.

public APIGatewayHttpApiV2ProxyResponse FunctionHandler(APIGatewayHttpApiV2ProxyRequest request, ILambdaContext context)
{
request.QueryStringParameters.TryGetValue("name", out var name);
name = name ?? "John Doe";
var message = $"Hello {name}, from AWS Lambda";
return new APIGatewayHttpApiV2ProxyResponse
{
Body = message,
StatusCode = 200
};
}

APIGatewayHttpApiV2ProxyRequest représente la demande entrante d'une API HTTP. Si vous y réfléchissez, ou si vous regardez en arrière dans le premier diagramme de flux que nous avions, la demande que Lambda reçoit n'est pas directement du client, mais une demande d'Amazon API Gateway elle-même. Ainsi, dans ce cas, la passerelle API envoie une demande à Lambda avec le type APIGatewayHttpApiV2ProxyRequest . De même, APIGatewayHttpApiV2ProxyResponse est le type de réponse que Lambda renvoie à Amazon API Gateway. Vous pouvez également ignorer cette partie de réponse et renvoyer à la place des données cruciales comme exigence métier, comme une liste d'étudiants, ce que nous ferons pendant que nous construisons notre prochain Lambda plus loin dans ce guide.

Ce sont donc les principaux changements apportés à Lambda pour prendre en charge l'ensemble de l'intégration de la passerelle API. En dehors de cela, le gestionnaire de fonctions renvoie désormais un message indiquant « Bonjour {nom}, d'AWS Lambda ». Une autre chose ici est que, depuis Lambda, vous pouvez accéder au contexte entrant, qui comprend les chaînes de requête, les paramètres de chemin, les routes, etc. Pour ce Lambda, je m'attends à ce que la requête entrante ait un paramètre de requête de nom (…/hello?name=Mukesh), qui sera ensuite ajouté au message qu'il renvoie finalement.

Si le paramètre de requête n'existe pas, il continue avec le nom par défaut, qui est John Doe. Notez que nous renvoyons la réponse en tant que type APIGatewayHttpApiV2ProxyResponse, où Body est le message réel, et nous fournissons un code d'état de 200 SUCCESS.

C'est tout pour notre First Lambda. Publions-le sur AWS et testons-le localement dans Visual Studio. Faites un clic droit sur le projet HelloLambda et cliquez sur Publier sur AWS Lambda. Vous verrez la fenêtre contextuelle suivante.

image Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Les premiers détails sont remplis automatiquement par l'outil, étant donné que vous avez configuré vos informations d'identification AWS locales, votre région et votre profil.

  • Le nom de la fonction est le nom avec lequel Lambda sera identifié sur votre compte AWS.
  • Description - comme son nom l'indique.
  • Le gestionnaire est un peu important ici. Disons que votre Function.cs peut potentiellement avoir plusieurs méthodes Handler. Cette méthode Handler correspond à la fonction exacte vers laquelle votre Lambda doit pointer. Dans notre cas, il s'agit de HelloLambda::HelloLambda.Function::FunctionHandler. Gardez cela à l'esprit, car nous utiliserons ce champ plus tard dans notre article.

Cliquez sur Suivant.

devenv oEzQI2HY6h Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Dans l'écran suivant, le seul changement que vous aurez à faire est de sélectionner le bon rôle nécessaire. Dans notre cas, il s'agit du AWSLambdaBasicExecutionRole. Cela vient avec des autorisations pour écrire des journaux dans AWS Cloudwatch. C'est ça. Cliquez sur Télécharger. AWS commence à créer les rôles requis, exécute certaines commandes pour créer et publier votre Lambda localement, comprime les bibliothèques publiées et les télécharge sur AWS, ce qui crée finalement votre nouveau Lambda brillant.

Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Une fois cela fait, vous pouvez ouvrir AWS Management Console, accéder à Lambdas et vérifier que notre nouveau Lambda est créé.

image 2 Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

De retour à Visual Studio, vous pouvez voir que l'assistant de publication aurait ouvert un petit outil qui permet de tester notre Lambda directement depuis Visual Studio. Oh, et si vous ne le savez pas déjà, vous pouvez également exécuter simplement l'application Lambda en mode débogage, et Visual Studio lancera un outil Mock qui aide essentiellement à tester et déboguer votre code Lambda.

Pour l'instant, explorons l'outil intégré à l'interface de Visual Studio. Voici une capture d'écran ci-dessous.

image 1 Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Tout d'abord, cette interface vous permet d'envoyer des demandes fictives directement à votre Lambda qui a été déployé sur AWS. Cliquez sur le menu déroulant Example Request et sélectionnez API Gateway AWS Proxy. L'outil remplirait une demande d'échantillon. Ici, comme je l'ai fait, vous pouvez ajouter une clé/valeur de nom aux paramètres de chaîne de requête. Il y a pas mal de propriétés à tripoter ici. Une fois que vous avez cliqué sur Appeler, la réponse contiendrait notre message avec un code d'état de 200.

Maintenant, bien que Lambda soit prêt, nous n'avons vraiment aucun moyen d'accéder à cette fonction autrement qu'à partir des outils de débogage VS. Nous avons donc besoin d'un lien/point de terminaison auquel nous envoyons une demande, et nous attendons une demande similaire de Lambda. C'est là qu'Amazon API Gateway entre en scène.

Création d'Amazon API Gateway avec .NET

Commençons à concevoir notre première Amazon API Gateway. Recherchez API Gateway dans la barre de recherche que vous voyez dans AWS Management Console. Vous verrez la page d'accueil par défaut pour Amazon API Gateway. Ici, vous serez présenté avec des choix pour sélectionner un type d'API. Puisque nous allons utiliser l'API HTTP, cliquons sur le bouton Build qui lui est associé.

chrome HZudzLTStT Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Étant donné que notre Lambda est créée avec succès, vous pouvez sélectionner le type d'intégration comme Lambda et choisir notre fonction hello Lambda. Assurez-vous que nous nous en tenons à la version 2.0 de la charge utile car c'est la dernière. Assurez-vous également de sélectionner la bonne région AWS. Dans mon cas, c'est ap-sud-1. Cela fait, cliquez sur suivant.

chrome ZaswQgDPsT Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Vient ensuite une partie intéressante, où nous configurons les routes réelles qui peuvent invoquer notre hello Lambda. Vous pouvez voir que j'en ai fait une méthode GET qui aura un point de terminaison /hello et ciblera le Hello Lambda. Donc, fondamentalement, une fois que nous créons la passerelle API, AWS nous fournirait une URL de point de terminaison, à laquelle si nous ajoutons un /hello et envoyons une méthode GET avec les paramètres de requête appropriés, cela déclenchera Lambda et renverra la réponse prévue.

Notez que vous pouvez plusieurs routes et intégrations ici. Nous explorerons cela lorsque nous créerons notre passerelle API complète plus loin dans cet article.

chrome 1j5EYx3xWe Passerelle d'API Amazon avec .NET - Intégrations AWS Lambda et DynamoDB

Ensuite, l'assistant nous demandera de créer des étapes. Ce sera pratique si nous voulons déployer notre Amazon API Gateway à différentes étapes comme le développement, la production et la mise en scène. Mais pour l'instant, gardons-le comme valeur par défaut qui est `$default`, et cliquez sur Suivant.

Ici, vous pouvez revoir vos modifications et déployer votre passerelle. C'est tout, aussi simple que cela.

Dans l'écran ci-dessous, vous pouvez voir l'URL de l'Amazon API Gateway que nous venons de créer. Copiez ceci et ouvrez Postman ou tout autre outil de test d'API que vous utilisez. De plus, comme il ne s'agit que d'une méthode GET, vous êtes même libre d'utiliser le navigateur pour tester notre passerelle.

chrome kmkvkIZHmM Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Testons la réponse de notre passerelle API. Je vais utiliser Postman pour les tests. Assurez-vous qu'il s'agit d'une méthode GET, sinon la passerelle criera qu'un tel point de terminaison n'est pas trouvé.

Dans la capture d'écran ci-dessous, vous pouvez voir que j'ai envoyé une demande au point de terminaison /hello et que j'ai passé le nom du paramètre de requête en tant que mon nom, et vous pouvez également voir la réponse attendue de Lambda. Tout simple, non ? N'hésitez pas à jouer avec le Hello Lambda pour en savoir plus.

Postman 09XFb6JnKd Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Exploration de l'interface de la console Amazon API Gateway

Maintenant que nous avons créé notre première Amazon API Gateway avec AWS Lambdas alimenté par .NET, explorons l'interface et les fonctionnalités fournies sur Amazon API Gateway.

Sur la page d'accueil, vous pouvez voir une liste des passerelles que vous avez créées dans une région AWS spécifique.

chrome RYg52eeVpW Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Une fois que vous entrez dans une passerelle API spécifique, vous avez accès à un tas de fonctionnalités intéressantes pour peaufiner votre passerelle.

chrome C3lh3VJBk3 Passerelle d'API Amazon avec .NET - Intégrations AWS Lambda et DynamoDB

De là, vous arrivez à :

  • Ajoutez d'autres routes à une passerelle d'API Amazon existante.
  • Sécurisation d'Amazon API Gateway à l'aide de Lambdas et de JWT. Nous approfondirons cela dans le prochain article !
  • Gérer les intégrations et Lambdas.
  • Configurez les stratégies CORS.
  • Exporter/Importer les définitions OpenAPI.
  • Écrivez les journaux d'accès si nécessaire. Ainsi, chaque fois qu'une demande est envoyée via la passerelle API, la demande est enregistrée dans Cloudwatch. Vous devrez spécifier une destination de groupe de journaux pour cela. Nous verrons cela plus loin dans l'article.
  • Gérer / créer des étapes et ainsi de suite.

Maintenant que nous avons une compréhension de base du fonctionnement d'Amazon API Gateway avec .NET, construisons maintenant une application sans serveur plus avancée qui utilise AWS Lambda, plusieurs gestionnaires de fonctions, Cloudwatch, DynamoDB pour stocker des données, et enfin intégrons tous ces Lambda à l'aide d'une Amazon API Gateway.

Création de la gestion des étudiants AWS Lambda avec .NET

Nous allons créer une API simple qui peut obtenir tous les détails de l'étudiant, obtenir l'étudiant par ID et créer un nouveau dossier étudiant. Ajoutez un nouveau projet Lambda à notre solution et nommez-le StudentLambda. Et oui, nous allons créer plusieurs Lambda à partir d'un seul projet Lambda. Vous êtes libre de créer des projets distincts pour chacune des fonctions. Mais pour la portée actuelle de l'application et des exigences, ce n'est pas vraiment nécessaire. Nous allons regrouper toutes les 3 fonctions Lambda dans un seul projet .NET Lambda et utiliser des FunctionHandlers pour déployer séparément tous les Lambda sur AWS.

Avant de commencer, assurez-vous d'installer les packages Nuget suivants sur votre projet StudentLambda via la console du gestionnaire de packages.

Install-Package Amazon.Lambda.APIGatewayEvents
Install-Package AWSSDK.DynamoDBv2
Install-Package Newtonsoft.Json

Comme vous le savez, le premier package est spécifiquement destiné à l'utilisation des contrats Amazon API Gateway dans notre .NET Lambda.

Le package DynamoDB permet à notre Lambda de communiquer avec notre DynamoDB. Si vous ne savez pas comment fonctionne DynamoDB, j'ai écrit un guide complet à ce sujet ici . J'ai construit une simple API Web CRUD ASP.NET Core qui stocke les données dans une table AWS DynamoDB.

Ensuite, définissons le modèle étudiant. Avec la racine du projet StudentLambda, ajoutez une nouvelle classe et nommez-la Student.cs

namespace StudentLambda
{
[DynamoDBTable("students")]
public class Student
{
[DynamoDBHashKey("id")]
public int? Id { get; set; }
[DynamoDBProperty("first_name")]
public string? FirstName { get; set; }
[DynamoDBProperty("last_name")]
public string? LastName { get; set; }
[DynamoDBProperty("class")]
public int Class { get; set; }
}
}

Accédez maintenant à AWS DynamoDB et créez-y une nouvelle table comme suit.

chrome FCz71W3ljT Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Une fois que vous avez créé la table, AWS prendra quelques secondes pour provisionner la table dans le cloud. Ajoutons un exemple d'enregistrement à cette table. Ouvrez le tableau, appuyez sur Explorer les éléments du tableau -> Créer un élément.

Basculez vers la vue JSON et ajoutez un exemple d'enregistrement comme suit. Notez que les propriétés que j'ai utilisées sont exactement les mêmes que celles que nous avons définies dans notre classe Student.cs. Cliquez sur Créer.

{
"id": 1,
"first_name" : "Mukesh",
"last_name" : "Murugan",
"class" : 10
}

chrome MotUEEQAR1 Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Obtenir tous les étudiants

Écrivons du code pour renvoyer une liste de tous les étudiants de la table DynamoDB. Ouvrez la classe Function.cs de StudentLambda. Supprimez la méthode FunctionHandler par défaut. et ajoutez la fonction suivante.

public async Task<List<Student>> GetAllStudentsAsync(APIGatewayHttpApiV2ProxyRequest request, ILambdaContext context)
{
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
DynamoDBContext dbContext = new DynamoDBContext(client);
var data = await dbContext.ScanAsync<Student>(default).GetRemainingAsync();
return data;
}

Ainsi, cette fonction analyse essentiellement l'intégralité de la table DynamoDB nomme les étudiants et renvoie une liste d'étudiants. Aussi simple que cela. Notez que nous allons créer deux DynamoDB Client et Context pour accéder à nos données depuis AWS Lambda.

Nous déploierons ces Lambda une fois que les 3 seront terminés. Idéalement, le point de terminaison de ce Lambda sera la méthode <amazon-url>/students [GET].

Créer un étudiant

Ensuite, au Same Function.cs de Student Lambda, ajoutons une autre méthode qui sera responsable de la création de nouveaux enregistrements d'étudiants. Ci-dessous la fonction.

public async Task<APIGatewayHttpApiV2ProxyResponse> CreateStudentAsync(APIGatewayHttpApiV2ProxyRequest request, ILambdaContext context)
{
var studentRequest = JsonConvert.DeserializeObject<Student>(request.Body);
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
DynamoDBContext dbContext = new DynamoDBContext(client);
await dbContext.SaveAsync(studentRequest);
var message = $"Student with Id {studentRequest?.Id} Created";
LambdaLogger.Log(message);
return new APIGatewayHttpApiV2ProxyResponse
{
Body = message,
StatusCode = 200
};
}

Donc, ici, nous nous attendons à ce que le client envoie un corps JSON avec les détails de l'étudiant.

Ligne #3, nous désérialisons le corps de la requête entrante dans un objet Student. Ensuite, nous créons un contexte de base de données pour accéder à la table dynamoDb et enregistrer le dossier de l'étudiant dans notre base de données. Une fois cela fait, nous renverrons un message de réussite au client en réponse avec un code d'état de 200.

À la ligne 8, vous pouvez remarquer que nous utilisons une instance LambdaLogger pour consigner le message dans Cloudwatch LogGroup de Lambda. Ce point de terminaison sera idéalement la méthode <amazon-url>/students [POST].

Obtenir l'étudiant par ID

Passons à notre dernière fonction lambda, ajoutons une fonction qui peut renvoyer les étudiants en fonction de l'ID envoyé dans la demande. Ce sera une fonction quelque peu différente, car nous devrons récupérer l'ID à partir du paramètre Path de la requête. Par exemple, ce point de terminaison de déploiement ressemblerait à <amazon-url>/students/{id}.

Copiez et collez la méthode suivante dans Function.cs du projet Student Lambda.

public async Task<Student> GetStudentByIdAsync(APIGatewayHttpApiV2ProxyRequest request, ILambdaContext context)
{
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
DynamoDBContext dbContext = new DynamoDBContext(client);
string idFromPath = request.PathParameters["id"];
int id = Int32.Parse(idFromPath);
var student = await dbContext.LoadAsync<Student>(id);
if (student == null) throw new Exception("Not Found!");
return student;
}

En ligne #5, nous extrayons l'identifiant de l'étudiant de la propriété path parameters de la requête. Une fois que nous l'avons récupéré, nous le convertissons en entier et le transmettons à la méthode dynamoDb pour obtenir l'étudiant par Id. Ce dossier d'étudiant est retourné au client en guise de réponse.

Maintenant, toutes les fonctions Lamda sont créées. Déployons-les sur AWS.

Sur Visual Studio, cliquez avec le bouton droit sur le projet StudentLambda et cliquez sur Publier sur AWS Lambda. Nous allons déployer chacune des 3 fonctions, l'une après l'autre.

Il y a 2 points à noter sur l'écran ci-dessous. Le nom de la fonction est 'get-all-students' et le gestionnaire pointe vers la méthode GetAllStudentsAsync. C'est ainsi que nous publions séparément l'ensemble des 3 Lambda. Vous devez avoir compris l'idée maintenant. Une fois ces champs modifiés, cliquez sur Suivant.

devenv lP4870ufPw Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Dans l'écran suivant, vous devrez sélectionner le rôle associé à ce Lambda. Pour commencer, il peut s'agir du rôle AWSLambdaBasicExecution. Cependant, il y a un problème avec cela. Ce rôle particulier fournit un accès uniquement pour exécuter Lambda et écrire les journaux dans Cloudwatch. Mais il n'y a pas d'autorisation d'accéder à notre table DynamoDB, n'est-ce pas ? Nous corrigerons cela après avoir déployé tous les Lambda.

devenv k3q9el3o6D Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

C'est tout, téléchargez le Lambda get-all-students.

Répétez des étapes similaires pour déployer les Lambda restants. Assurez-vous de choisir le rôle déjà créé pour chacun de ces 2 AWS Lambda.

devenv 12JZFkHk21 Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

devenv fycfsY0BNP Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

devenv jD6jBn30hv Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

C'est ça! Voici les Lambda que nous avons créés jusqu'à présent.

chrome yqXn6ON0rX Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Ajout d'autorisations DynamoDB.

Comme mentionné, ajoutons les autorisations DynamoDB requises au rôle que nous avons créé. Accédez à AWS IAM. Accédez à Stratégies et créez-en une avec la spécification suivante. Comme vous le voyez ici, nous avons sélectionné DynamoDB comme service AWS et autorisé toutes les actions DynamoDB ainsi que toutes les ressources.

chrome Ql3GcGoy6E Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Notez que ce n'est pas toujours une bonne idée d'accorder des autorisations complètes à un rôle particulier. Mais pour garder les choses simples, nous le faisons. Vous ne devriez pas faire cela pour les applications de production. N'accordez que les autorisations réellement nécessaires.

Sur la page suivante, donnez un nom à la stratégie et créez-la.

chrome ycODtFF4xn Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Maintenant que nous avons créé la stratégie, attachons-la à nos rôles. Sélectionnez la politique nouvellement créée dans la liste et cliquez sur Attacher. Sur la page suivante, vous devrez sélectionner le rôle/utilisateur/groupe auquel vous souhaitez attacher cette politique.

chrome BXL706oAoM Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Dans notre cas, c'est lambda_exec_get-all-students

chrome mAu7ftXH2A Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Voilà. Nous avons réussi à associer la stratégie au rôle utilisé par notre AWS Lambda. Désormais, Lambda doit disposer de suffisamment d'autorisations pour fonctionner avec DynamoDb.

Câblage d'Amazon API Gateway avec .NET AWS Lambda

Vient ensuite la partie cruciale du guide, pour créer une passerelle API qui déclenche chacun de ces lambdas. Ouvrez Amazon API Gateway depuis AWS Management Console.

Jusqu'à présent, nous n'avons créé qu'une seule API Gateway qui est hello . Créez une nouvelle passerelle API. Comme d'habitude, sélectionnez le type d'API HTTP et appuyez sur Build.

Nous avons nommé notre passerelle en tant qu'étudiants et ajouté les 3 Lambda en tant qu'intégrations. Simple, non ?

chrome j6Rwc9eHTU Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Dans la page suivante, nous allons configurer nos itinéraires. Nous allons modifier les valeurs par défaut et ajouter la configuration ci-dessous.

chrome HTdaHTJd1a Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

  • GET /students invoquerait le get-all-students
  • GET /students/{id} appellerait get-student-by-id où id est le paramètre de chemin de la requête. Par exemple, /étudiants/1
  • Enfin, le POST /students créerait un nouvel étudiant, étant donné que nous avons transmis les détails du nouvel étudiant en tant que charge utile JSON de la requête.
     

Laissez l'étape par défaut et continuez à créer la passerelle.

chrome b5Pqmem97h Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Voilà, c'est ça. Testons ce point de terminaison avec Postman.

Tout d'abord, je teste le get-al-students Lambda. J'ai envoyé une requête GET à <url>/students. Comme prévu, vous voyez une liste d'étudiants comme réponse. Pour l'instant, nous n'avons qu'un seul enregistrement dans notre base de données.

Postman IEQHc2RddV Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Ensuite, testons le Get-student-by-id Lambda. J'ai envoyé une requête GET à <url>/students/1. Et à juste titre, il renvoie les détails de l'étudiant avec Id 1.

Postman Z6R9hqnoka Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Enfin, créons un nouvel étudiant. Envoyé une requête POST au point de terminaison <url>/students avec les détails de l'étudiant. Et la réponse est que notre étudiant est créé avec ID 2 !

Postman 7lDzMoDjEr Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Aussi, rappelez-vous que nous avons écrit un petit Logger dans notre Lambda Create-Student? Naviguons vers Cloudwatch / Log Groups / create-student et vérifions les journaux.

chrome kBWX1ReSVr Amazon API Gateway avec .NET - Intégrations AWS Lambda et DynamoDB

Vous pouvez voir que notre message de journal est également imprimé ici.

C'est un enveloppement pour cet article complet. Dans le prochain article, nous apprendrons comment sécuriser la passerelle API avec Lambda Authorizer ! Pour l'instant, la passerelle API que nous avons créée est un point de terminaison public.

CONSEIL important : assurez-vous de toujours supprimer les ressources AWS que vous avez créées une fois que vous avez fini de les explorer. Cela aide à réduire les coûts encourus, bien que le niveau GRATUIT vous fournisse une quantité assez décente de demandes GRATUITES avec lesquelles travailler.

Sommaire

Dans cet article, nous avons appris comment démarrer avec Amazon API Gateway avec .NET. Ici, nous avons appris à créer des Lambdas de base compatibles avec Amazon API Gateway, à les intégrer à DynamoDB, à ajouter plusieurs Lambdas à une passerelle particulière, à la journalisation et bien plus encore. Cela vous donnera une idée solide pour travailler avec l'application AWS Serverless. Dans la prochaine partie de cette application AWS Serverless avec .NET, nous explorerons comment sécuriser les passerelles API, travailler avec SAM et bien plus encore. Restez à l'écoute. Vous pouvez suivre cette newsletter pour recevoir des notifications lorsque je publie de nouveaux articles – https://www.getrevue.co/profile/iammukeshm

Partagez cet article avec vos collègues et cercles de développement si vous avez trouvé cela intéressant. Vous pouvez trouver le  code source du projet  ici. Merci!  

 Source : https://codewithmukesh.com/blog/amazon-api-gateway-with-dotnet/

#dotnet #amazon #api 

What is GEEK

Buddha Community

Passerelle d'API Amazon avec .NET
Einar  Hintz

Einar Hintz

1602560783

jQuery Ajax CRUD in ASP.NET Core MVC with Modal Popup

In this article, we’ll discuss how to use jQuery Ajax for ASP.NET Core MVC CRUD Operations using Bootstrap Modal. With jQuery Ajax, we can make HTTP request to controller action methods without reloading the entire page, like a single page application.

To demonstrate CRUD operations – insert, update, delete and retrieve, the project will be dealing with details of a normal bank transaction. GitHub repository for this demo project : https://bit.ly/33KTJAu.

Sub-topics discussed :

  • Form design for insert and update operation.
  • Display forms in modal popup dialog.
  • Form post using jQuery Ajax.
  • Implement MVC CRUD operations with jQuery Ajax.
  • Loading spinner in .NET Core MVC.
  • Prevent direct access to MVC action method.

Create ASP.NET Core MVC Project

In Visual Studio 2019, Go to File > New > Project (Ctrl + Shift + N).

From new project window, Select Asp.Net Core Web Application_._

Image showing how to create ASP.NET Core Web API project in Visual Studio.

Once you provide the project name and location. Select Web Application(Model-View-Controller) and uncheck HTTPS Configuration. Above steps will create a brand new ASP.NET Core MVC project.

Showing project template selection for .NET Core MVC.

Setup a Database

Let’s create a database for this application using Entity Framework Core. For that we’ve to install corresponding NuGet Packages. Right click on project from solution explorer, select Manage NuGet Packages_,_ From browse tab, install following 3 packages.

Showing list of NuGet Packages for Entity Framework Core

Now let’s define DB model class file – /Models/TransactionModel.cs.

public class TransactionModel
{
    [Key]
    public int TransactionId { get; set; }

    [Column(TypeName ="nvarchar(12)")]
    [DisplayName("Account Number")]
    [Required(ErrorMessage ="This Field is required.")]
    [MaxLength(12,ErrorMessage ="Maximum 12 characters only")]
    public string AccountNumber { get; set; }

    [Column(TypeName ="nvarchar(100)")]
    [DisplayName("Beneficiary Name")]
    [Required(ErrorMessage = "This Field is required.")]
    public string BeneficiaryName { get; set; }

    [Column(TypeName ="nvarchar(100)")]
    [DisplayName("Bank Name")]
    [Required(ErrorMessage = "This Field is required.")]
    public string BankName { get; set; }

    [Column(TypeName ="nvarchar(11)")]
    [DisplayName("SWIFT Code")]
    [Required(ErrorMessage = "This Field is required.")]
    [MaxLength(11)]
    public string SWIFTCode { get; set; }

    [DisplayName("Amount")]
    [Required(ErrorMessage = "This Field is required.")]
    public int Amount { get; set; }

    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
    public DateTime Date { get; set; }
}

C#Copy

Here we’ve defined model properties for the transaction with proper validation. Now let’s define  DbContextclass for EF Core.

#asp.net core article #asp.net core #add loading spinner in asp.net core #asp.net core crud without reloading #asp.net core jquery ajax form #asp.net core modal dialog #asp.net core mvc crud using jquery ajax #asp.net core mvc with jquery and ajax #asp.net core popup window #bootstrap modal popup in asp.net core mvc. bootstrap modal popup in asp.net core #delete and viewall in asp.net core #jquery ajax - insert #jquery ajax form post #modal popup dialog in asp.net core #no direct access action method #update #validation in modal popup

Eric  Bukenya

Eric Bukenya

1618666860

.NET Conf 2020 Demos & Sessions for .NET 5 + Virtual Events!

This year’s .NET Conf was the largest one yet, with over 80 live sessions across three days that were co-organized and presented by the .NET community and Microsoft. On top of all of that, it also marked the release of .NET 5.0  that brings a full set of new capabilities, performance gains, and new languages features for developers to create amazing apps. If you missed this year’s .NET Conf live stream, don’t worry because we have you covered!

#.net #.net core #asp.net #c# #.net conf #.net foundation #community #demos

Marcus Anthony

1612355729

Amazon Pay Clone, Amazon Pay Clone Script, Recharge & Wallet App Solution

Mobile wallet applications have become the new trend in today’s world. Apps like Amazon Pay, Paytm, PayPal are some of the leading apps that are owned and used by millions. Be it paying bills, recharging, or money transactions, everything has turned easier because of these apps. There were days when people used to travel for hours to do these tasks have been totally transformed. Moreover, consumers can use these e-wallet apps while paying in a store, either for shopping or while eating out. Thus, as far as mobile wallets are concerned, they are a convenient way for handling all the tasks involving finance.

As an aspiring entrepreneur, if you wish to succeed in your business, without second thoughts, go for Amazon Pay clone app development. Let’s narrow down your thinking processes for a quicker stride forward by analyzing the types of apps first.

Types of e-wallet apps you could develop:

Retail application: An app like Amazon is considered the retail app because it has a mobile wallet in it. It has all the basic functionalities, which helps users to redeem coupons and reward points. All the payment modes are accessible through the app, including net banking.

Dedicated app: The app allows P2P money transactions by storing a variety of cards. You could also make international money transfers using this app. Example: PayPal, Apple Pay, and Amazon Pay.

PoS payments: The PoS payment wallet apps are found at the stores. It is exclusively used by the users to make contactless payments without having to stand in a long queue.

Wrapping up,
Choose the best type of e-wallet app you want to develop and join forces with our Appdupe. Grab the cutting-edge Amazon Pay Clone script and launch an app in a week!

##amazon pay clone ##amazon pay clone script ##amazon pay clone app ##amazon pay clone app development ##amazon pay app clone ##amazon pay app clone development

Hire Dedicated ASP.NET Developers | ASP.NET Web Development Company

A universally accepted and the most popular framework that can be used for a small or big websites or Web application development projects is the ASP.NET. This framework is majorly used to produce an interactive and data driven web applications.

Are you looking to use an ASP.NET framework for your development needs?

WebClues Infotech offers a dedicated ASP.NET developers where a business can hire a dedicated ASP.NET developer that matches their project requirement. WebClues Infotech also has a flexible pricing structure that suits most project or business requirements.

Want to hire a dedicated ASP.NET developers?

Share your requirements here https://www.webcluesinfotech.com/contact-us/

Book Free Interview with ASP.NET developer: https://bit.ly/3dDShFg

#hire dedicated asp.net developers #hire asp.net developers #hire .net developers #full-stack .net developers india #dedicated .net programmers india #hire asp.net developers or programmers

Hire ASP.Net Developers

Looking to outsource your asp dot net development requirement?

ASP.Net is a special feature of the DOT Net framework created by Microsoft. At HourlyDeveloper.io, we have a team of experienced ASP.Net developers who are experts in delivering custom solutions based on your business requirements. Hire ASP.Net Developers who will provide tailored solutions to facilitate your business growth.

Consult with experts: https://bit.ly/3fNpVqr

#hire asp.net developers #asp.net development company #asp.net development services #asp.net development #asp.net developer #asp.net