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.
Déployez TypeScript du code transpilé dans Lambda avec des archives de fichiers .zip
Avant de pouvoir déployer TypeScript du code sur AWS Lambda, vous devez le transpiler dans JavaScript. Cette page explique trois méthodes pour créer et déployer TypeScript du code sur Lambda à l'aide d'archives de fichiers .zip :
AWS SAM et AWS CDK simplifiez la création et le déploiement de TypeScript fonctions. 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. Avec le AWS CDK, vous pouvez créer des applications fiables, évolutives et rentables dans le cloud avec la puissance expressive considérable d'un langage de programmation. AWS CDK Il est destiné aux AWS utilisateurs modérément à très expérimentés. Le AWS CDK et l' AWS SAM utilisation de esbuild pour transpiler le TypeScript code dans. JavaScript
Utilisation AWS SAM pour déployer TypeScript du code sur Lambda
Suivez les étapes ci-dessous pour télécharger, créer et déployer un exemple d' TypeScript application Hello World à 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 Node.js Lambda à partir du TypeScript code. Le support d'esbuild est actuellement en version préliminaire publique. Lors de la préversion publique, la prise en charge d'esbuild peut être soumise à des modifications incompatibles avec les versions précédentes.
Conditions préalables
Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :
Déployer un échantillon AWS SAM vigie
-
Initialisez l'application à l'aide du TypeScript modèle Hello World.
sam init --app-template hello-world-typescript --name sam-app --package-type Zip --runtime nodejs24.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
Enterpour accepter les options par défaut fournies dans l’expérience interactive. -
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 de AWS CDK pour déployer TypeScript du code sur Lambda
Suivez les étapes ci-dessous pour créer et déployer un exemple d' TypeScript application à 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.
Conditions préalables
Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :
-
Node.js
Déployer un échantillon AWS CDK vigie
-
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 package
@ 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'
importinstruction importe 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, consultez aws-lambdadans le référentiel. DefinitelyTyped GitHub 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 la NodejsFunction construction qui crée la fonction Lambda et la LambdaRestApi construction 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 plus d'informations, consultez la section Configuration d'esbuild dans la référence de l' AWS CDK API.
-
-
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 -
Il AWS CDK construit et empaquette la fonction Lambda à l'aide de esbuild, puis déploie la fonction 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 AWS CLI et esbuild pour déployer du TypeScript code sur Lambda
L'exemple suivant montre comment transpiler et déployer TypeScript du code sur Lambda à l'aide de esbuild AWS CLI. esbuild produit un JavaScript fichier avec toutes les dépendances. Il s’agit du seul fichier que vous devez ajouter à l’archive .zip.
Conditions préalables
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 Node.js projet avec npm ou un gestionnaire de packages de votre choix.
npm init -
Ajoutez les packages @ 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'
importinstruction importe 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, consultez aws-lambdadans le référentiel. DefinitelyTyped GitHub 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 "nodejs24.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\"}" }