Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Distribuisci TypeScript codice transpilato in Lambda con archivi di file .zip
Prima di poter distribuire il TypeScript codice in AWS Lambda, devi traspilarlo in. JavaScript Questa pagina spiega tre modi per creare e distribuire TypeScript codice in Lambda con archivi di file .zip:
AWS SAM e AWS CDK semplifica la creazione e l'implementazione delle funzioni. TypeScript La specifica del modello AWS SAM fornisce una sintassi semplice e chiara per descrivere le funzioni, le API, le autorizzazioni, le configurazioni e gli eventi Lambda che compongono l'applicazione serverless. Con AWS CDK, puoi creare applicazioni affidabili, scalabili ed economiche nel cloud con la notevole potenza espressiva di un linguaggio di programmazione. AWS CDK È destinato a utenti con esperienza da moderata a elevata. AWS AWS CDK Sia il che AWS SAM usano esbuild per TypeScript trasporre il codice in. JavaScript
Utilizzo AWS SAM per distribuire TypeScript codice su Lambda
Segui i passaggi seguenti per scaricare, creare e distribuire un' TypeScript applicazione Hello World di esempio utilizzando. AWS SAM Questa applicazione implementa un backend API di base. Consiste in un endpoint Gateway Amazon API e in una funzione Lambda. Quando si invia una richiesta GET all'endpoint API Gateway, viene richiamata la funzione Lambda. La funzione restituisce un messaggio hello world.
Nota
AWS SAM utilizza esbuild per creare funzioni Node.js Lambda a partire dal TypeScript codice. Il supporto per esbuild è attualmente disponibile in anteprima pubblica. Durante l'anteprima pubblica, il supporto per esbuild potrebbe essere soggetto a modifiche incompatibili con le versioni precedenti.
Prerequisiti
Per completare le fasi riportate in questa sezione, è necessario:
Distribuisci un campione AWS SAM applicazione
-
Inizializza l'applicazione utilizzando il modello Hello World. TypeScript
sam init --app-template hello-world-typescript --name sam-app --package-type Zip --runtime nodejs24.x -
(Facoltativo) L'applicazione di esempio include configurazioni per strumenti di uso comune, ad esempio ESLIint
per analisi del codice e Jest per test unitario. Per eseguire i comandi lint e test: cd sam-app/hello-world npm install npm run lint npm run test -
Costruisci l'app.
cd sam-app sam build -
Distribuire l'app.
sam deploy --guided -
Seguire le istruzioni visualizzate sullo schermo. Per accettare le opzioni predefinite fornite nell'esperienza interattiva, rispondi con
Enter. -
L'output mostra l'endpoint per la REST API. Apri l'endpoint in un browser per testare la funzione. Dovresti vedere questa risposta:
{"message":"hello world"} -
Questo è un endpoint API pubblico accessibile su Internet. È consigliabile eliminare l'endpoint dopo il test.
sam delete
Utilizzo di AWS CDK per distribuire TypeScript codice su Lambda
Segui i passaggi seguenti per creare e distribuire un' TypeScript applicazione di esempio utilizzando. AWS CDK Questa applicazione implementa un backend API di base. È costituito da un endpoint API Gateway e da una funzione Lambda. Quando si invia una richiesta GET all'endpoint API Gateway, viene richiamata la funzione Lambda. La funzione restituisce un messaggio hello world.
Prerequisiti
Per completare le fasi riportate in questa sezione, è necessario:
-
Node.js
Distribuisci un campione AWS CDK applicazione
-
Crea una directory di progetto per la nuova applicazione.
mkdir hello-world cd hello-world -
Inizializza l'app.
cdk init app --language typescript -
Aggiungi il pacchetto
@ types/aws -lambda come dipendenza di sviluppo. Questo pacchetto contiene le definizioni dei tipi per Lambda. npm install -D @types/aws-lambda -
Apri la directory lib. Dovrebbe essere visualizzato un file chiamato hello-world-stack.ts. Crea due nuovi file in questa directory: hello-world.function.ts e hello-world.ts.
-
Apri hello-world.function.ts e aggiungi il seguente codice al file. Questo è il codice per la funzione Lambda.
Nota
L'
importistruzione importa le definizioni dei tipi da @ -lambda. types/awsNon importa il pacchetto NPM aws-lambda, che è uno strumento di terzi non correlato. Per ulteriori informazioni, vedi https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/aws-lambdaaws-lambda nel repository. 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', }), }; }; -
Apri hello-world.ts e aggiungi il seguente codice al file. Contiene il NodejsFunction costrutto, che crea la funzione Lambda, e il LambdaRestApi costrutto, che crea 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, }); } }Il costrutto
NodejsFunctionpresuppone quanto segue per impostazione predefinita:-
Viene richiamato il gestore di funzioni
handler. -
Il file .ts che contiene il codice funzione (hello-world.function.ts) si trova nella stessa directory del file .ts che contiene il costrutto (hello-world.ts). Il costrutto utilizza l'ID del costrutto ("hello-world") e il nome del file del gestore Lambda ("funzione") per trovare il codice funzione. Ad esempio, se il codice funzione si trova in un file chiamato hello-world.my-function.ts, il file hello-world.ts deve fare riferimento al codice funzione in questo modo:
const helloFunction = new NodejsFunction(this,'my-function');
È possibile modificare questo comportamento e configurare altri parametri esbuild. Per ulteriori informazioni, consulta Configurazione di esbuild nel riferimento API. AWS CDK
-
-
Apri hello-world-stack.ts. Questo è il codice che definisce lo stack AWS CDK. Sostituisci il codice con il seguente:
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'); } } -
dalla directory
hello-worldcontenente il filecdk.json, implementa l'applicazione.cdk deploy -
Compila e AWS CDK impacchetta la funzione Lambda utilizzando esbuild, quindi distribuisce la funzione nel runtime Lambda. L'output mostra l'endpoint per la REST API. Apri l'endpoint in un browser per testare la funzione. Dovresti vedere questa risposta:
{"message":"hello world"}Questo è un endpoint API pubblico accessibile su Internet. È consigliabile eliminare l'endpoint dopo il test.
Utilizzo di AWS CLI ed esbuild per distribuire il codice su Lambda TypeScript
L'esempio seguente dimostra come transpilare e distribuire TypeScript codice in Lambda utilizzando esbuild e. esbuild produce un file con tutte le AWS CLI dipendenze. JavaScript Questo è l'unico file che devi aggiungere all'archivio .zip.
Prerequisiti
Per completare le fasi riportate in questa sezione, è necessario:
-
Node.js
-
Un ruolo di esecuzione per la funzione Lambda
-
Per gli utenti Windows, un'utilità di file zip come 7zip
.
Implementare una funzione di esempio
-
Sul tuo computer locale, crea una directory di progetto per la nuova funzione.
-
Crea un nuovo Node.js progetto con npm o un gestore di pacchetti a tua scelta.
npm init -
Aggiungi i pacchetti @ types/aws -lambda
ed esbuild come dipendenze di sviluppo. Il pacchetto @types/aws-lambdacontiene le definizioni dei tipi per Lambda.npm install -D @types/aws-lambda esbuild -
Crea un nuovo file denominato index.ts. Aggiungi il seguente codice al nuovo file. Questo è il codice per la funzione Lambda. La funzione restituisce un messaggio
hello world. La funzione non crea alcuna risorsa API Gateway.Nota
L'
importistruzione importa le definizioni dei tipi da @ types/aws-lambda. Non importa il pacchetto NPM aws-lambda, che è uno strumento di terzi non correlato. Per ulteriori informazioni, vedi https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/aws-lambdaaws-lambda nel repository. 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', }), }; }; -
Aggiungi uno script di compilazione al file package.json. esbuild viene configurato per creare automaticamente il pacchetto di implementazione .zip. Per ulteriori informazioni, consulta la sezione relativa alla compilazione degli script
nella documentazione di esbuild. -
Creare il pacchetto.
npm run build -
Crea una funzione Lambda utilizzando il pacchetto di implementazione .zip. Sostituisci il testo evidenziato con l'Amazon Resource Name (ARN) del tuo ruolo di esecuzione.
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 -
Esegui un evento di test per confermare che la funzione restituisca la risposta seguente. Se desideri richiamare questa funzione utilizzando API Gateway, crea e configura una REST API.
{ "statusCode": 200, "body": "{\"message\":\"hello world\"}" }