Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation de Lambda avec infrastructure en tant que code (IaC)
Les fonctions Lambda s’exécutent rarement de manière isolée. Elles font souvent partie d’une application sans serveur avec d’autres ressources telles que les bases de données, les files d’attente et le stockage. Grâce à l'infrastructure sous forme de code (IaC)
Outils de l’IaC pour Lambda
- AWS CloudFormation
-
CloudFormation est le service IaC de base de AWS. Vous pouvez utiliser des modèles YAML ou JSON pour modéliser et provisionner l'ensemble de votre AWS infrastructure, y compris les fonctions Lambda. CloudFormation gère les complexités liées à la création, à la mise à jour et à la suppression de vos AWS ressources.
- AWS Serverless Application Model (AWS SAM)
-
AWS SAM est un framework open source construit sur. CloudFormation Il fournit une syntaxe simplifiée pour définir les applications sans serveur. Utilisez AWS SAM des modèles pour configurer rapidement des fonctions Lambda APIs, des bases de données et des sources d'événements avec seulement quelques lignes de code YAML.
- AWS Cloud Development Kit (AWS CDK)
-
Le CDK est une approche d’IaC axée sur le code. Vous pouvez définir votre architecture basée sur Lambda à l'aide de JavaScript Python TypeScript, Java, C#/.NET ou Go. Choisissez votre langage préféré et utilisez des éléments de programmation tels que les paramètres, les conditions, les boucles, la composition et l’héritage pour définir le résultat souhaité pour votre infrastructure. Le CDK génère ensuite les CloudFormation modèles sous-jacents pour le déploiement. Pour obtenir un exemple d’utilisation de Lambda avec CDK, consultez Déploiement de fonctions Lambda à l'aide du AWS CDK.

AWS fournit également un service appelé AWS Infrastructure Composer à développer des modèles IaC à l'aide d'une interface graphique simple. Avec Infrastructure Composer, vous concevez une architecture d'application en faisant glisser, en regroupant et Services AWS en connectant dans un canevas visuel. Infrastructure Composer crée ensuite un AWS SAM modèle ou un AWS CloudFormation modèle à partir de votre conception que vous pouvez utiliser pour déployer votre application.
Dans la section Démarrage avec l’IaC pour Lambda ci-dessous, Infrastructure Composer vous permet de développer un modèle pour une application sans serveur basée sur une fonction Lambda existante.
Démarrage avec l’IaC pour Lambda
Dans ce didacticiel, vous pouvez commencer à utiliser IaC avec Lambda en créant un AWS SAM modèle à partir d'une fonction Lambda existante, puis en développant une application sans serveur dans Infrastructure Composer en ajoutant d'autres ressources. AWS
Au cours de ce didacticiel, vous apprendrez certains concepts fondamentaux, tels que la manière dont les AWS ressources sont spécifiées dans AWS SAM. Vous apprendrez également à utiliser Infrastructure Composer pour créer une application sans serveur que vous pouvez déployer à l'aide de AWS SAM ou AWS CloudFormation.
Pour compléter ce didacticiel, effectuez les tâches suivantes :
-
Créer un exemple de fonction Lambda
-
Utilisez la console Lambda pour afficher le AWS SAM modèle de la fonction
-
Exportez la configuration de votre fonction vers une application sans serveur simple AWS Infrastructure Composer et concevez une application sans serveur basée sur la configuration de votre fonction
-
Enregistrez un AWS SAM modèle mis à jour que vous pouvez utiliser comme base pour déployer votre application sans serveur
Prérequis
Dans ce tutoriel, vous allez utiliser la fonctionnalité de synchronisation locale d’Infrastructure Composer pour enregistrer votre modèle et vos fichiers de code sur votre machine de génération locale. Pour utiliser cette fonctionnalité, vous devez disposer d’un navigateur compatible avec l’API d’accès au système de fichiers, qui permet aux applications Web de lire, d’écrire et d’enregistrer des fichiers dans votre système de fichiers local. Nous vous recommandons d’utiliser Google Chrome ou Microsoft Edge. Pour plus d’informations sur l’API d’accès au système de fichiers, voir Qu’est-ce que l’API d’accès au système de fichiers ?
Création d’une fonction Lambda
Dans cette première étape, vous allez créer une fonction Lambda que vous pouvez utiliser pour terminer le reste du didacticiel. Pour simplifier les choses, vous utilisez la console Lambda pour créer une fonction de base « Hello world » à l’aide du moteur d’exécution Python 3.11.
Pour créer une fonction Lambda « Hello world » à l’aide de la console
-
Ouvrez la console Lambda
. -
Sélectionnez Créer une fonction.
-
Ne désélectionnez pas l’option Créer à partir de zéro puis, sous Informations de base, saisissez
LambdaIaCDemo
pour le nom de la fonction. -
Pour l’environnement d’exécution, sélectionnez Python 3.11.
-
Sélectionnez Create function (Créer une fonction).
Afficher le AWS SAM modèle correspondant à votre fonction
Avant d’exporter la configuration de votre fonction vers Infrastructure Composer, utilisez la console Lambda pour afficher la configuration actuelle de votre fonction sous forme de modèle AWS SAM . En suivant les étapes décrites dans cette section, vous découvrirez l'anatomie d'un AWS SAM modèle et comment définir des ressources telles que les fonctions Lambda pour commencer à spécifier une application sans serveur.
Pour afficher le AWS SAM modèle de votre fonction
-
Ouvrez la page Functions
(Fonctions) de la console Lambda. -
Choisissez la fonction que vous venez de créer (
LambdaIaCDemo
). -
Dans le volet de Présentation de la fonction, choisissez Modèle.
À la place du schéma représentant la configuration de votre fonction, vous verrez un AWS SAM modèle pour votre fonction. Le modèle doit ressembler à ce qui suit.
# This AWS SAM template has been generated from your function's # configuration. If your function has one or more triggers, note # that the AWS resources associated with these triggers aren't fully # specified in this template and include placeholder values.Open this template # in AWS Application Composer or your favorite IDE and modify # it to specify a serverless application with other AWS resources. AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Specification template describing your function. Resources: LambdaIaCDemo: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 3 Handler: lambda_function.lambda_handler Runtime: python3.11 Architectures: - x86_64 EventInvokeConfig: MaximumEventAgeInSeconds: 21600 MaximumRetryAttempts: 2 EphemeralStorage: Size: 512 RuntimeManagementConfig: UpdateRuntimeOn: Auto SnapStart: ApplyOn: None PackageType: Zip Policies: Statement: - Effect: Allow Action: - logs:CreateLogGroup Resource: arn:aws:logs:us-east-1:123456789012:* - Effect: Allow Action: - logs:CreateLogStream - logs:PutLogEvents Resource: - >- arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/LambdaIaCDemo:*
Examinons le modèle YAML pour votre fonction pour comprendre certains concepts clés.
Le modèle commence par la déclaration Transform: AWS::Serverless-2016-10-31
. Cette déclaration est obligatoire car, dans les coulisses, les AWS SAM modèles sont déployés via AWS CloudFormation. L’utilisation de l’instruction Transform
identifie le modèle en tant que fichier modèle AWS SAM .
Après la déclaration Transform
vient la section Resources
. C'est ici que sont définies les AWS ressources que vous souhaitez déployer avec votre AWS SAM modèle. AWS SAM les modèles peuvent contenir une combinaison de AWS SAM ressources et de AWS CloudFormation ressources. Cela est dû au fait que pendant le déploiement, les AWS SAM AWS CloudFormation modèles se transforment en modèles, de sorte que toute AWS CloudFormation syntaxe valide peut être ajoutée à un AWS SAM modèle.
Pour le moment, une seule ressource est définie dans la section Resources
du modèle, votre fonction Lambda LambdaIaCDemo
. Pour ajouter une fonction Lambda à un AWS SAM modèle, vous devez utiliser le type de AWS::Serverless::Function
ressource. La ressource Properties
d’une fonction Lambda définit l’exécution de la fonction, le gestionnaire de fonctions et les autres options de configuration. Le chemin d'accès au code source de votre fonction qui AWS SAM doit être utilisé pour déployer la fonction est également défini ici. Pour en savoir plus sur les ressources relatives aux fonctions Lambda dans AWS SAM, consultez le AWS::Serverless::Functionguide du AWS SAM développeur.
Outre les propriétés et les configurations des fonctions, le modèle spécifie également une politique AWS Identity and Access Management (IAM) pour votre fonction. Cette politique autorise votre fonction à écrire des journaux sur Amazon CloudWatch Logs. Lorsque vous créez une fonction dans la console Lambda, Lambda associe automatiquement cette politique à votre fonction. Pour en savoir plus sur la spécification d'une politique IAM pour une fonction dans un AWS SAM modèle, consultez la policies
propriété sur la AWS::Serverless::Functionpage du Guide du AWS SAM développeur.
Pour en savoir plus sur la structure des AWS SAM modèles, consultez la section Anatomie des AWS SAM modèles.
AWS Infrastructure Composer À utiliser pour concevoir une application sans serveur
Pour commencer à créer une application sans serveur simple en utilisant le AWS SAM modèle de votre fonction comme point de départ, vous exportez la configuration de votre fonction vers Infrastructure Composer et activez le mode de synchronisation local d'Infrastructure Composer. La synchronisation locale enregistre automatiquement le code de votre fonction et votre AWS SAM modèle sur votre machine de génération locale et synchronise votre modèle enregistré lorsque vous ajoutez d'autres AWS ressources dans Infrastructure Composer.
Pour exporter votre fonction vers Infrastructure Composer
-
Dans le volet Vue d’ensemble des fonctions, choisissez Exporter vers Application Composer.
Pour exporter la configuration et le code de votre fonction vers Infrastructure Composer, Lambda crée un compartiment Amazon S3 dans votre compte pour stocker temporairement ces données.
-
Dans la boîte de dialogue, choisissez Confirmer et créer un projet pour accepter le nom par défaut de ce compartiment et exporter la configuration et le code de votre fonction vers Infrastructure Composer.
-
(Facultatif) Pour choisir un autre nom pour le compartiment Amazon S3 créé par Lambda, entrez un nouveau nom et choisissez Confirmer et créer un projet. Les noms de compartiment Amazon S3 doivent être uniques et respecter les règles de dénomination de compartiment.
Sélectionnez Confirmer et créer un projet pour ouvrir la console Infrastructure Composer. Sur le canevas, votre fonction Lambda apparaît.
-
Dans le menu déroulant, choisissez Activer la synchronisation locale.
-
Dans la boîte de dialogue qui apparaît, choisissez Sélectionner un dossier et un dossier sur votre machine de construction locale.
-
Choisissez Activer pour activer la synchronisation locale.
Pour exporter votre fonction vers Infrastructure Composer, vous avez besoin d’une autorisation pour utiliser certaines actions d’API. Si vous ne parvenez pas à exporter votre fonction, vérifiez Autorisations requises et assurez-vous que vous disposez des autorisations nécessaires.
Note
La tarification standard d’Amazon S3
Pour éviter que des frais supplémentaires ne soient ajoutés à votre Compte AWS compte, suivez les instructions de la section Supprimer un bucket après avoir exporté votre fonction vers Infrastructure Composer. Pour en savoir plus sur le compartiment Amazon S3 créé par Lambda, consultez Utilisation AWS Lambda avec AWS Infrastructure Composer.
Pour concevoir votre application sans serveur dans Infrastructure Composer
Après avoir activé la synchronisation locale, les modifications que vous apportez dans Infrastructure Composer seront reflétées dans le AWS SAM modèle enregistré sur votre machine de génération locale. Vous pouvez désormais glisser-déposer des AWS ressources supplémentaires sur le canevas Infrastructure Composer pour créer votre application. Dans cet exemple, vous ajoutez une file d’attente simple Amazon SQS comme déclencheur pour votre fonction Lambda et une table DynamoDB pour la fonction dans laquelle écrire des données.
-
Ajoutez un déclencheur Amazon SQS à votre fonction Lambda en procédant comme suit :
-
Dans le champ de recherche de la palette Ressources, entrez
SQS
. -
Faites glisser la ressource SQS Queue sur votre canevas et positionnez-la à gauche de votre fonction Lambda.
-
Choisissez Détails, puis, pour Logical ID, entrez
LambdaIaCQueue
. -
Choisissez Save (Enregistrer).
-
Connectez vos ressources Amazon SQS et Lambda en cliquant sur le port Abonnement sur la carte de file d’attente SQS et en le faisant glisser vers le port gauche de la carte de fonction Lambda. L’apparition d’une ligne entre les deux ressources indique que la connexion a abouti. Infrastructure Composer affiche également un message au bas du canevas indiquant que les deux ressources sont correctement connectées.
-
-
Ajoutez une table Amazon DynamoDB dans laquelle votre fonction Lambda pourra y écrire des données en procédant comme suit :
-
Dans le champ de recherche de la palette Ressources, entrez
DynamoDB
. -
Faites glisser la ressource Table DynamoDB sur votre canevas et positionnez-la à droite de votre fonction Lambda.
-
Choisissez Détails, puis, pour Logical ID, entrez
LambdaIaCTable
. -
Choisissez Save (Enregistrer).
-
Connectez la table DynamoDB à votre fonction Lambda en cliquant sur le port droit de la carte de fonction Lambda et en la faisant glisser vers le port gauche de la carte DynamoDB.
-
Maintenant que vous avez ajouté ces ressources supplémentaires, examinons le AWS SAM modèle mis à jour créé par Infrastructure Composer.
Pour afficher votre AWS SAM modèle mis à jour
-
Sur le canevas Infrastructure Composer, choisissez Modèle pour passer de la vue canevas à la vue modèle.
Votre AWS SAM modèle doit désormais contenir les ressources et propriétés supplémentaires suivantes :
-
File d’attente Amazon SQS avec l’identifiant
LambdaIaCQueue
LambdaIaCQueue: Type: AWS::SQS::Queue Properties: MessageRetentionPeriod: 345600
Lorsque vous ajoutez une file d’attente Amazon SQS à l’aide d’Infrastructure Composer, Infrastructure Composer définit la propriété
MessageRetentionPeriod
. Vous pouvez également définir la propriétéFifoQueue
en sélectionnant Détails sur la carte SQS Queue et en cochant ou décochant la file d’attente Fifo.Pour définir d’autres propriétés pour votre file d’attente, vous pouvez modifier manuellement le modèle et les y ajouter. Pour en savoir plus sur la ressource
AWS::SQS::Queue
et ses propriétés disponibles, consultez AWS::SQS::Queue dans le Guide de l’utilisateur AWS CloudFormation . -
Propriété
Events
de votre définition de fonction Lambda qui spécifie la file d’attente Amazon SQS comme déclencheur de la fonctionEvents: LambdaIaCQueue: Type: SQS Properties: Queue: !GetAtt LambdaIaCQueue.Arn BatchSize: 1
La propriété
Events
est constituée d’un type d’événement et d’un ensemble de propriétés qui dépendent du type. Pour en savoir plus sur les différentes options Services AWS que vous pouvez configurer pour déclencher une fonction Lambda et sur les propriétés que vous pouvez définir, consultez le EventSourceguide du AWS SAM développeur. -
Table DynamoDB avec l’identifiant
LambdaIaCTable
LambdaIaCTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: id KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES
Lorsque vous ajoutez une table DynamoDB à l’aide d’Infrastructure Composer, vous pouvez définir les clés de votre table en choisissant Détails sur la fiche de table DynamoDB et en modifiant les valeurs clés. Infrastructure Composer définit également des valeurs par défaut pour un certain nombre d’autres propriétés, notamment
BillingMode
etStreamViewType
.Pour en savoir plus sur ces propriétés et les autres propriétés que vous pouvez ajouter à votre AWS SAM modèle, consultez AWS: :DynamoDB : :Table dans le guide de l'utilisateur.AWS CloudFormation
-
Une nouvelle politique IAM qui autorise votre fonction à effectuer des opérations CRUD sur la table DynamoDB que vous avez ajoutée.
Policies: ... - DynamoDBCrudPolicy: TableName: !Ref LambdaIaCTable
Le AWS SAM modèle final complet doit ressembler à ce qui suit.
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Specification template describing your function. Resources: LambdaIaCDemo: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 3 Handler: lambda_function.lambda_handler Runtime: python3.11 Architectures: - x86_64 EventInvokeConfig: MaximumEventAgeInSeconds: 21600 MaximumRetryAttempts: 2 EphemeralStorage: Size: 512 RuntimeManagementConfig: UpdateRuntimeOn: Auto SnapStart: ApplyOn: None PackageType: Zip Policies: - Statement: - Effect: Allow Action: - logs:CreateLogGroup Resource: arn:aws:logs:us-east-1:594035263019:* - Effect: Allow Action: - logs:CreateLogStream - logs:PutLogEvents Resource: - arn:aws:logs:us-east-1:594035263019:log-group:/aws/lambda/LambdaIaCDemo:* - DynamoDBCrudPolicy: TableName: !Ref LambdaIaCTable Events: LambdaIaCQueue: Type: SQS Properties: Queue: !GetAtt LambdaIaCQueue.Arn BatchSize: 1 Environment: Variables: LAMBDAIACTABLE_TABLE_NAME: !Ref LambdaIaCTable LAMBDAIACTABLE_TABLE_ARN: !GetAtt LambdaIaCTable.Arn LambdaIaCQueue: Type: AWS::SQS::Queue Properties: MessageRetentionPeriod: 345600 LambdaIaCTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: id KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES
Déployez votre application sans serveur à l'aide de AWS SAM (facultatif)
Si vous souhaitez déployer une application sans serveur AWS SAM à l'aide du modèle que vous venez de créer dans Infrastructure Composer, vous devez d'abord installer AWS SAM CLI. Pour ce faire, suivez les instructions de la section Installation de la AWS SAM CLI.
Avant de déployer votre application, vous devez également mettre à jour le code de fonction enregistré par Infrastructure Composer avec votre modèle. Pour le moment, le fichier lambda_function.py
enregistré par Infrastructure Composer ne contient que le code de base « Hello world » fourni par Lambda lors de la création de la fonction.
Pour mettre à jour votre code de fonction, copiez le code suivant et collez-le dans le fichier lambda_function.py
qu’Infrastructure Composer a enregistré sur votre machine de compilation locale. Vous avez spécifié le répertoire dans lequel Infrastructure Composer doit enregistrer ce fichier lorsque vous avez activé le mode de synchronisation locale.
Ce code accepte une paire clé-valeur dans un message provenant de la file d’attente Amazon SQS que vous avez créée dans Infrastructure Composer. Si la clé et la valeur sont des chaînes, le code les utilise ensuite pour écrire un élément dans la table DynamoDB définie dans votre modèle.
import boto3 import os import json # define the DynamoDB table that Lambda will connect to tablename = os.environ['LAMBDAIACTABLE_TABLE_NAME'] # create the DynamoDB resource dynamo = boto3.client('dynamodb') def lambda_handler(event, context): # get the message out of the SQS event message = event['Records'][0]['body'] data = json.loads(message) # write event data to DDB table if check_message_format(data): key = next(iter(data)) value = data[key] dynamo.put_item( TableName=tablename, Item={ 'id': {'S': key}, 'Value': {'S': value} } ) else: raise ValueError("Input data not in the correct format") # check that the event object contains a single key value # pair that can be written to the database def check_message_format(message): if len(message) != 1: return False key, value = next(iter(message.items())) if not (isinstance(key, str) and isinstance(value, str)): return False else: return True
Pour déployer votre application sans serveur
Pour déployer votre application à l'aide du AWS SAM CLI, effectuez les étapes suivantes. Pour que votre fonction soit correctement construite et déployée, la version 3.11 de Python doit être installée sur votre machine de compilation et sur votre PATH
.
-
Exécutez la commande suivante depuis le répertoire dans lequel Infrastructure Composer a enregistré vos fichiers
template.yaml
etlambda_function.py
.sam build
Cette commande rassemble les artefacts de compilation pour votre application et les place dans le format et l’emplacement appropriés pour les déployer.
-
Pour déployer votre application et créer les ressources Lambda, Amazon SQS et DynamoDB spécifiées dans AWS SAM votre modèle, exécutez la commande suivante.
sam deploy --guided
L'utilisation du
--guided
drapeau signifie que des instructions vous AWS SAM seront affichées pour vous guider tout au long du processus de déploiement. Pour ce déploiement, acceptez les options par défaut en appuyant sur Entrée.
Au cours du processus de déploiement, AWS SAM crée les ressources suivantes dans votre Compte AWS :
-
Une AWS CloudFormation pile nommée
sam-app
-
Une fonction Lambda avec le format de nom
sam-app-LambdaIaCDemo-
99VXPpYQVv1M
-
Une file d’attente Amazon SQS au format de nom
sam-app-LambdaIaCQueue-
xL87VeKsGiIo
-
Une table DynamoDB au format de nom
sam-app-LambdaIaCTable-
CN0S66C0VLNV
AWS SAM crée également les rôles et politiques IAM nécessaires pour que votre fonction Lambda puisse lire les messages de la file d'attente Amazon SQS et effectuer des opérations CRUD sur la table DynamoDB.
Testing de votre application déployée (facultatif)
Pour vérifier que votre application sans serveur s’est déployée correctement, envoyez un message à votre file d’attente Amazon SQS contenant une paire clé-valeur et vérifiez que Lambda écrit un élément dans votre table DynamoDB en utilisant ces valeurs.
Tester votre application sans serveur
-
Ouvrez la page Files d’attente
de la console Amazon SQS et sélectionnez la file d’attente créée par AWS SAM depuis votre modèle. Le nom est au format sam-app-LambdaIaCQueue-
.xL87VeKsGiIo
-
Choisissez Envoyer et recevoir des messages, puis collez le code JSON suivant dans le champ Corps du message, dans la section Envoyer un message.
{ "myKey": "myValue" }
-
Choisissez Send Message (Envoyer un message).
L’envoi de votre message à la file d’attente amène Lambda à invoquer votre fonction par le biais du mappage de la source d’événement défini dans votre modèle AWS SAM . Pour confirmer que Lambda a invoqué votre fonction comme prévu, indiquez qu’un élément a été ajouté à votre table DynamoDB.
-
Ouvrez la page Tables
de la console DynamoDB et choisissez votre table. Le nom est au format sam-app-LambdaIaCTable-
.CN0S66C0VLNV
-
Sélectionnez Explore table items (Explorer les éléments de la table). Dans le volet Items returned (Éléments retournés), vous devriez voir un élément avec l’id
myKey
et la ValeurmyValue
.