Implementa codice trascritto TypeScript in Lambda con archivi di file.zip - AWS Lambda

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à.

Implementa codice trascritto TypeScript in Lambda con archivi di file.zip

Prima di poter distribuire il TypeScript codice inAWS Lambda, devi trasporlo in. JavaScript Questa pagina spiega tre modi per creare e distribuire TypeScript codice in Lambda con archivi di file.zip:

AWS SAMe AWS CDK semplifica la creazione e l'implementazione di 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. AWS CDK consente di creare applicazioni affidabili, scalabili e convenienti nel cloud con la notevole potenza espressiva di un linguaggio di programmazione. AWS CDK è destinato a utenti AWS da moderatamente a altamente esperti. Sia gli che AWS CDK i AWS SAM usano esbuild per trascrivere il codice TypeScript in. JavaScript

Utilizzo AWS SAM per distribuire TypeScript codice in 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 SAMusa esbuild per creare le funzioni Lambda di Node.js TypeScript dal codice. il supporto di esbuild è attualmente in anteprima pubblica. Durante l'anteprima pubblica, il supporto di esbuild potrebbe essere soggetto a modifiche incompatibili con il passato.

Prerequisiti

Per completare le fasi riportate in questa sezione, è necessario:

Implementare un'applicazione AWS SAM di esempio
  1. Inizializza l'applicazione utilizzando il modello Hello World. TypeScript

    sam init --app-template hello-world-typescript --name sam-app --package-type Zip --runtime nodejs18.x
  2. (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
  3. Costruisci l'app.

    cd sam-app sam build
  4. Distribuire l'app.

    sam deploy --guided
  5. Seguire le istruzioni visualizzate sullo schermo. Per accettare le opzioni predefinite fornite nell'esperienza interattiva, rispondi con Enter.

  6. 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"}
  7. Questo è un endpoint API pubblico accessibile su Internet. È consigliabile eliminare l'endpoint dopo il test.

    sam delete

Utilizzo di AWS CDK per distribuire il TypeScript codice in 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:

Implementare un'applicazione AWS CDK di esempio
  1. Crea una directory di progetto per la nuova applicazione.

    mkdir hello-world cd hello-world
  2. Inizializza l'app.

    cdk init app --language typescript
  3. 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
  4. Apri la directory lib. Dovresti vedere un file chiamato hello-world-stack.ts. Crea due nuovi file in questa directory: hello-world.function.ts e hello-world.ts.

  5. Apri hello-world.function.ts e aggiungi il seguente codice al file. Questo è il codice per la funzione Lambda.

    Nota

    L'istruzione import 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, consulta aws-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', }), }; };
  6. Apri hello-world.ts e aggiungi il seguente codice al file. Contiene il NodejsFunction costrutto, che crea la funzione Lambda, e il costrutto, che crea LambdaRestApi 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 NodejsFunction presuppone 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 la sezione relativa alla configurazione di esbuild nella guida di riferimento dell'API AWS CDK.

  7. Apri .ts. hello-world-stack 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'); } }
  8. dalla directory hello-world contenente il file cdk.json, implementa l'applicazione.

    cdk deploy
  9. AWS CDK crea e impacchetta la funzione Lambda usando esbuild e quindi implementa la funzione al runtime di 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 TypeScript codice in Lambda

L'esempio seguente dimostra come traspilare e distribuire codice in TypeScript 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:

Implementare una funzione di esempio
  1. Sul tuo computer locale, crea una directory di progetto per la nuova funzione.

  2. Crea un nuovo progetto Node.js con npm o un gestore di pacchetti di tua scelta.

    npm init
  3. Aggiungi i pacchetti @types/aws-lambda e esbuild come dipendenze di sviluppo. Il pacchetto @types/aws-lambda contiene le definizioni dei tipi per Lambda.

    npm install -D @types/aws-lambda esbuild
  4. 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 risorse API Gateway.

    Nota

    L'istruzione import 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, consulta aws-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', }), }; };
  5. 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.

    Linux and MacOS
    "scripts": { "prebuild": "rm -rf dist", "build": "esbuild index.ts --bundle --minify --sourcemap --platform=node --target=es2020 --outfile=dist/index.js", "postbuild": "cd dist && zip -r index.zip index.js*" },
    Windows

    In questo esempio, il comando "postbuild" utilizza l'utilità 7zip per creare il file con estensione .zip. Utilizza l'utilità zip di Windows preferita e modifica il comando secondo necessità.

    "scripts": { "prebuild": "del /q dist", "build": "esbuild index.ts --bundle --minify --sourcemap --platform=node --target=es2020 --outfile=dist/index.js", "postbuild": "cd dist && 7z a -tzip index.zip index.js*" },
  6. Creare il pacchetto.

    npm run build
  7. 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 "nodejs18.x" --role arn:aws:iam::123456789012:role/lambda-ex --zip-file "fileb://dist/index.zip" --handler index.handler
  8. 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\"}" }