Partie 1 : explore la création d'une fonction Lambda pour gérer les requêtes de la passerelle API et conserver les données dans DynamoDB à l'aide du modèle d'application sans serveur.
Partie 2 : détaille les étapes nécessaires pour configurer un référentiel CodeCommit dans AWS et configurer un pipeline CICD qui lance automatiquement un processus de génération lors de la soumission de nouvelles modifications au référentiel.
Installer AWS CLI : suivez le guide pour installer l'AWS Command Line Interface.
Installez AWS SAM (Serverless Application Model) : installez SAM CLI en suivant les instructions .
Choisissez un IDE : utilisez IntelliJ ou un IDE similaire pour le développement. Je préfère IntelliJ
Maven pour l'empaquetage : assurez-vous que Maven est installé pour empaqueter votre application.
Facultatif : Docker (si vous devez tester les fonctions Lambda localement) : installez Docker si vous prévoyez de tester les fonctions Lambda localement.
Configuration de l'environnement
Configuration AWS :
Accédez à la console AWS à l' , connectez-vous à l'aide de vos informations d'identification d'utilisateur administrateur.Configurez l'AWS CLI sur la machine locale :
$ aws configure
Initialisez un projet à l'aide d'AWS Serverless Application Model (SAM) :
$ sam init
Renommer le projet : renommez le projet selon votre nom préféré.
Ouvrez le projet dans IntelliJ : Lancez IntelliJ et ouvrez le projet.
Ajouter des dépendances à pom.xml :
Ajoutez les dépendances nécessaires au fichier pom.xml
. Il vous suffit d'ajouter DynamoDB, car les autres dépendances seront automatiquement incluses par SAM.
<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-events</artifactId> <version>3.11.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-dynamodb</artifactId> <version>1.12.573</version> </dependency> </dependencies>
Écrire la classe du gestionnaire
Pour la fonction lambda, modifiez la classe de gestionnaire générée automatiquement par sam et ajoutez le code suivant : c'est un code simple, et pour de vrais projets, vous souhaiterez peut-être utiliser un code plus modulaire. public class UserRequestHandler implements RequestHandler<Map<String,String>, Map<String,String>> { private AmazonDynamoDB amazonDynamoDB; private String DYNAMODB_TABLE_NAME = "users"; private Regions REGION = Regions.US_EAST_1; @Override public Map<String,String> handleRequest(Map<String,String> input, Context context) { this.initDynamoDbClient(); LambdaLogger logger = context.getLogger(); logger.log("Input payload:" + input.toString()); String userId = UUID.randomUUID().toString(); String firstName= input.get("firstName"); String lastName= input.get("lastName"); Map<String, AttributeValue> attributesMap = new HashMap<>(); attributesMap.put("id", new AttributeValue(userId)); attributesMap.put("firstName", new AttributeValue(firstName)); attributesMap.put("lastName", new AttributeValue(lastName)); logger.log(attributesMap.toString()); amazonDynamoDB.putItem(DYNAMODB_TABLE_NAME, attributesMap); Map<String, String> response = new HashMap<>(); response.put("id", userId); response.put("firstName", firstName); response.put("lastName", lastName); return response; } private void initDynamoDbClient() { this.amazonDynamoDB = AmazonDynamoDBClientBuilder.standard() .withRegion(REGION) .build(); } }
Mettre à jour le fichier de modèle SAM
Le fichier modèle SAM joue un rôle central dans la création et le déploiement des modifications sur AWS. Mettez à jour le fichier du projet. Les éléments clés sur lesquels se concentrer dans ce fichier sont les noms des fonctions Lambda et les points de terminaison API Gateway. Ils sont au cœur des fonctionnalités de votre application sans serveur.
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > pc-aws-user-api Sample SAM Template for pc-aws-user-api # More info about Globals: //github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 20 MemorySize: 128 Tracing: Active Api: TracingEnabled: true Resources: UserRequestHandlerLambdaFunction: Type: AWS::Serverless::Function # More info about Function Resource: //github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: PcAwsUsersApi Handler: com.pc.aws.users.UserRequestHandler::handleRequest Runtime: java11 Architectures: - x86_64 MemorySize: 512 Environment: # More info about Env Vars: //github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object Variables: PARAM1: VALUE JAVA_TOOL_OPTIONS: -XX:+TieredCompilation -XX:TieredStopAtLevel=1 # More info about tiered compilation //aws.amazon.com/blogs/compute/optimizing-aws-lambda-function-performance-for-java/ Events: PcUsers: Type: Api # More info about API Event Source: //github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /users Method: post ApplicationResourceGroup: Type: AWS::ResourceGroups::Group Properties: Name: Fn::Sub: ApplicationInsights-SAM-${AWS::StackName} ResourceQuery: Type: CLOUDFORMATION_STACK_1_0 ApplicationInsightsMonitoring: Type: AWS::ApplicationInsights::Application Properties: ResourceGroupName: Ref: ApplicationResourceGroup AutoConfigurationEnabled: 'true' Outputs: # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function # Find out more about other implicit resources you can reference within SAM # //github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api PcAwsUsersApi: Description: API Gateway endpoint URL for Prod stage Value: !Sub "//${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/users/" UserRequestHandlerLambdaFunction: Description: Lambda Function ARN Value: !GetAtt UserRequestHandlerLambdaFunction.Arn UserRequestHandlerLambdaFunctionIamRole: Description: Implicit IAM Role created Value: !GetAtt UserRequestHandlerLambdaFunctionRole.Arn
Créer et déployer du code à l'aide de SAM
Dans IntelliJ, ouvrez le terminal et exécutez les commandes suivantes : $ sam build
$ sam deploy –guided
Testez l'API
Avant de tester l'API, accordez à DynamoDB l'accès au rôle Lambda créé par SAM.
Accédez à API Gateway, puis suivez ces étapes pour obtenir l'URL de votre service :
Content-Type: application/json
).
Créer un référentiel CodeCommit
Connectez-vous à AWS et recherchez le service CodeCommit.
Créez un nouveau référentiel dans AWS CodeCommit pour stocker le code source de votre projet.
Valider le code dans le référentiel
Dans IntelliJ, ouvrez le terminal et entrez les commandes suivantes pour valider le code créé à l'étape I $ git init → This initialize local git $ git add . → This will stage files $ git commit -m "commit to CodeCommit"
Transférer les modifications au dépôt distant
Copiez l'URL du dépôt CodeCommit à partir de la console AWS. $ git remote add origin <repo URL> $ git push --set-upstream origin master --> This will prompt for user/password
Créer un projet AWS CodeBuild
Configurez un projet CodeBuild qui spécifie comment générer votre application. Cela inclut la définition des environnements de construction, des commandes de construction et des dépendances.
Pour configurer CodeBuild, vous devrez créer un fichier de spécification de build nommé buildspec.yml
dans le répertoire de votre projet. Ce fichier contiendra les commandes de construction et les instructions pour CodeBuild.
Vous pouvez vous référer à la documentation officielle pour obtenir des instructions détaillées sur la création d'un fichier buildspec.yml
.
version: 0.2 phases: install: runtime-versions: java: corretto11 pre_build: commands: - echo Nothing to do in the pre_build phase... build: commands: - echo Build started on `date` - sam build - sam package --output-template-file pcoutputtemplate.yaml --s3-bucket com-appsdev-pc-001 post_build: commands: - echo Build completed on `date` artifacts: files: - pcoutputtemplate.yaml
Créer un CodePipeline
Testez le pipeline
$ git branch CR01 $ git checkout CR01 $ git add . $ git commit -m “CR01” $ git push --set-upstream origin CR01 You cand also create a pull request in aws code commit, just for simplicity I am merging from local $ git checkout master $ git merge --ff-only CR01 $ git push