Déployez le code TypeScript transpilé dans Lambda à l’aide d’archives de fichiers .zip
Avant de pouvoir déployer le code TypeScript sur AWS Lambda, vous devez le transpiler en JavaScript. Cette page explique trois façons de créer et de déployer du code TypeScript vers Lambda avec des archives de fichiers .zip :
AWS SAM et AWS CDK simplifient la création et le déploiement des fonctions TypeScript. La spécification du modèle AWS SAM fournit une syntaxe simple et propre pour décrire les fonctions Lambda, les API, les autorisations, les configurations et les événements qui composent votre application sans serveur. Le AWS CDK vous permet de créer des applications fiables, évolutives et rentables dans le cloud, avec la puissance expressive considérable d’un langage de programmation. Le AWS CDK est destiné aux utilisateurs AWS modérément à très expérimentés. Les AWS CDK et AWS SAM utilisent esbuild pour transpiler le code TypeScript en JavaScript.
Utilisation d'AWS SAM pour déployer le code TypeScript sur Lambda
Suivez les étapes ci-dessous pour télécharger, créer et déployer un exemple d’application Hello World TypeScript à l’aide du AWS SAM. Cette application implémente un backend API de base. Elle se compose d’un point de terminaison Amazon API Gateway et d’une fonction Lambda. Lorsque vous envoyez une demande GET au point de terminaison API Gateway, la fonction Lambda est invoquée. La fonction renvoie un message hello world.
Note
AWS SAM utilise esbuild pour créer des fonctions Lambda Node.js à partir du code TypeScript. La prise en charge d'esbuild est actuellement en version préliminaire publique. Au cours de la version préliminaire publique, la prise en charge d’esbuild peut faire l’objet de modifications incompatibles.
Prérequis
Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :
Déployer un exemple d’application AWS SAM
-
Initialisez l’application à l’aide du modèle Hello World TypeScript.
sam init --app-template hello-world-typescript --name sam-app --package-type Zip --runtime nodejs22.x -
(Facultatif) L’exemple d’application inclut des configurations pour les outils couramment utilisés, tels que ESLlint
pour la validation de code et de Jest pour les tests unitaires. Pour exécuter des commandes de test et de validation : cd sam-app/hello-world npm install npm run lint npm run test -
Créez l’application.
cd sam-app sam build -
Déployez l’application.
sam deploy --guided -
Suivez les invites à l’écran. Répondez avec pour accepter les options par défaut fournies dans l’expérience interactive
Enter. -
La sortie affiche le point de terminaison de l’API REST. Ouvrez le point de terminaison dans un navigateur pour tester la fonction. Vous devriez voir la réponse suivante :
{"message":"hello world"} -
Il s’agit d’un point de terminaison d’API public accessible par Internet. Nous vous recommandons de supprimer le point de terminaison après un test.
sam delete
Utilisation du AWS CDK pour déployer le code TypeScript sur Lambda
Suivez les étapes ci-dessous pour créer et déployer un exemple d’application TypeScript à l’aide du AWS CDK. Cette application implémente un backend API de base. Elle se compose d’un point de terminaison API Gateway et d’une fonction Lambda. Lorsque vous envoyez une demande GET au point de terminaison API Gateway, la fonction Lambda est invoquée. La fonction renvoie un message hello world.
Prérequis
Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :
-
Node.js
Déployer un exemple d'application AWS CDK
-
Créez un répertoire de projets pour votre nouvelle application.
mkdir hello-world cd hello-world -
Initialisez l’application.
cdk init app --language typescript -
Ajoutez le pack @types/aws-lambda
en tant que dépendance de développement. Ce package contient les définitions de type pour Lambda. npm install -D @types/aws-lambda -
Ouvrez le répertoire lib. Vous devriez voir un fichier nommé hello-world-stack.ts. Créez deux nouveaux fichiers dans ce répertoire : hello-world.function.ts et hello-world.ts.
-
Ouvrez hello-world.function.ts et ajoutez le code suivant au fichier. Il s’agit du code de la fonction Lambda.
Note
L'instruction
importimporte les définitions de type depuis @types /aws-lambda. Elle n’importe pas le package NPM aws-lambda, qui est un outil tiers indépendant. Pour plus d'informations, voir aws-lambdadans le référentiel GitHub DefinitelyTyped. import { Context, APIGatewayProxyResult, APIGatewayEvent } from 'aws-lambda'; export const handler = async (event: APIGatewayEvent, context: Context): Promise<APIGatewayProxyResult> => { console.log(`Event: ${JSON.stringify(event, null, 2)}`); console.log(`Context: ${JSON.stringify(context, null, 2)}`); return { statusCode: 200, body: JSON.stringify({ message: 'hello world', }), }; }; -
Ouvrez hello-world.ts et ajoutez le code suivant au fichier. Il contient le composant NodeJsFunction, qui crée la fonction Lambda, et le composant LambdaRestApi, qui crée l’API REST.
import { Construct } from 'constructs'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { LambdaRestApi } from 'aws-cdk-lib/aws-apigateway'; export class HelloWorld extends Construct { constructor(scope: Construct, id: string) { super(scope, id); const helloFunction = new NodejsFunction(this, 'function'); new LambdaRestApi(this, 'apigw', { handler: helloFunction, }); } }Le composant
NodejsFunctionsuppose les éléments suivants par défaut :-
Votre gestionnaire de fonctions se nomme
handler. -
Le fichier .ts qui contient le code de fonction (hello-world.function.ts) se trouve dans le même répertoire que le fichier .ts qui contient le composant (hello-world.ts). Le composant utilise l’ID du composant (« hello-world ») et le nom du fichier du gestionnaire Lambda (« fonction ») pour trouver le code de la fonction. Par exemple, si le code de votre fonction se trouve dans un fichier nommé hello-world.my-fonction.ts, le fichier hello-world.ts doit référencer le code de la fonction comme suit :
const helloFunction = new NodejsFunction(this,'my-function');
Vous pouvez modifier ce comportement et configurer d’autres paramètres esbuild. Pour de plus amples informations, veuillez consulter Configuration d’esbuild dans les références de l’API du AWS CDK.
-
-
Ouvrez hello-world stack.ts. C’est le code qui définit votre pile de AWS CDK. Remplacez le code par ce qui suit :
import { Stack, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { HelloWorld } from './hello-world'; export class HelloWorldStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); new HelloWorld(this, 'hello-world'); } } -
à partir du répertoire
hello-worldcontenant votre fichiercdk.json, déployez votre application.cdk deploy -
Le AWS CDK crée et conditionne la fonction Lambda à l’aide d’esbuild, puis la déploie dans l’environnement d’exécution Lambda. La sortie affiche le point de terminaison de l’API REST. Ouvrez le point de terminaison dans un navigateur pour tester la fonction. Vous devriez voir la réponse suivante :
{"message":"hello world"}Il s’agit d’un point de terminaison d’API public accessible par Internet. Nous vous recommandons de supprimer le point de terminaison après un test.
Utilisation de la AWS CLI et d’esbuild pour déployer le code TypeScript sur Lambda
L’exemple suivant montre comment transpiler et déployer le code TypeScript dans Lambda à l’aide d’esbuild et de la AWS CLI. esbuild produit un fichier JavaScript avec toutes les dépendances. Il s’agit du seul fichier que vous devez ajouter à l’archive .zip.
Prérequis
Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :
-
Node.js
-
Un rôle d’exécution pour votre fonction Lambda
-
Pour les utilisateurs de Windows, un utilitaire de fichier zip tel que 7zip
.
Déployez un exemple de fonction
-
Sur votre machine locale, créez un répertoire de projets pour votre nouvelle fonction.
-
Créez un nouveau projet Node.js avec npm ou un gestionnaire de packs de votre choix.
npm init -
Ajoutez les packs @types/aws-lambda
et esbuild en tant que dépendances de développement. Le package @types/aws-lambdacontient les définitions de type pour Lambda.npm install -D @types/aws-lambda esbuild -
Créez un nouveau fichier nommé index.ts. Ajoutez le code suivant au nouveau fichier. Il s’agit du code de la fonction Lambda. La fonction renvoie un message
hello world. La fonction ne crée aucune ressource API Gateway.Note
L'instruction
importimporte les définitions de type depuis @types /aws-lambda. Elle n’importe pas le package NPM aws-lambda, qui est un outil tiers indépendant. Pour plus d'informations, voir aws-lambdadans le référentiel GitHub DefinitelyTyped. import { Context, APIGatewayProxyResult, APIGatewayEvent } from 'aws-lambda'; export const handler = async (event: APIGatewayEvent, context: Context): Promise<APIGatewayProxyResult> => { console.log(`Event: ${JSON.stringify(event, null, 2)}`); console.log(`Context: ${JSON.stringify(context, null, 2)}`); return { statusCode: 200, body: JSON.stringify({ message: 'hello world', }), }; }; -
Ajoutez un script de génération au fichier package.json. Ceci permet de configurer esbuild pour créer automatiquement le pack de déploiement .zip. Pour plus d’informations, consultez Scripts de génération
dans la documentation d’esbuild. -
Créez le pack.
npm run build -
Créez une fonction Lambda à l’aide du pack de déploiement .zip. Remplacez le texte surligné par l’Amazon Resource Name (ARN) de votre rôle d’exécution.
aws lambda create-function --function-name hello-world --runtime "nodejs22.x" --rolearn:aws:iam::123456789012:role/lambda-ex--zip-file "fileb://dist/index.zip" --handler index.handler -
Exécutez un événement de test pour confirmer que la fonction renvoie la réponse suivante. Si vous souhaitez invoquez cette fonction à l’aide d’API Gateway, créez et configurez l’API REST.
{ "statusCode": 200, "body": "{\"message\":\"hello world\"}" }