View a markdown version of this page

Terapkan TypeScript kode transpiled di Lambda dengan arsip file.zip - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Terapkan TypeScript kode transpiled di Lambda dengan arsip file.zip

Sebelum Anda dapat menerapkan TypeScript kode ke AWS Lambda, Anda perlu mentranspilasinya ke. JavaScript Halaman ini menjelaskan tiga cara untuk membangun dan menerapkan TypeScript kode ke Lambda dengan arsip file.zip:

AWS SAM dan AWS CDK menyederhanakan TypeScript fungsi pembangunan dan penyebaran. Spesifikasi AWS SAM template menyediakan sintaks sederhana dan bersih untuk menggambarkan fungsi Lambda, API, izin, konfigurasi, dan peristiwa yang membentuk aplikasi tanpa server Anda. Dengan ini AWS CDK, Anda dapat membangun aplikasi yang andal, terukur, dan hemat biaya di cloud dengan kekuatan ekspresif yang cukup besar dari bahasa pemrograman. Ini AWS CDK ditujukan untuk AWS pengguna yang cukup hingga sangat berpengalaman. Baik AWS CDK dan AWS SAM menggunakan esbuild untuk mentranspile kode TypeScript ke. JavaScript

Penggunaan AWS SAM untuk menerapkan TypeScript kode ke Lambda

Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menerapkan contoh TypeScript aplikasi Hello World menggunakan AWS SAM. Aplikasi ini mengimplementasikan backend API dasar. Ini terdiri dari titik akhir Amazon API Gateway dan fungsi Lambda. Ketika Anda mengirim permintaan GET ke titik akhir API Gateway, fungsi Lambda dipanggil. Fungsi mengembalikan hello world pesan.

catatan

AWS SAM menggunakan esbuild untuk membuat fungsi Node.js Lambda dari TypeScript kode. dukungan esbuild saat ini dalam pratinjau publik. Selama pratinjau publik, dukungan esbuild mungkin tunduk pada perubahan yang tidak kompatibel ke belakang.

Prasyarat

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:

Menyebarkan sampel AWS SAM application
  1. Inisialisasi aplikasi menggunakan TypeScript template Hello World.

    sam init --app-template hello-world-typescript --name sam-app --package-type Zip --runtime nodejs24.x
  2. (Opsional) Aplikasi sampel mencakup konfigurasi untuk alat yang umum digunakan, seperti ESLLint untuk linting kode dan J est untuk pengujian unit. Untuk menjalankan perintah lint dan test:

    cd sam-app/hello-world npm install npm run lint npm run test
  3. Bangun aplikasi.

    cd sam-app sam build
  4. Terapkan aplikasi.

    sam deploy --guided
  5. Ikuti petunjuk di layar. Untuk menerima opsi default yang disediakan dalam pengalaman interaktif, respons dengan Enter.

  6. Output menunjukkan titik akhir untuk REST API. Buka titik akhir di browser untuk menguji fungsinya. Anda harus melihat tanggapan ini:

    {"message":"hello world"}
  7. Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.

    sam delete

Menggunakan AWS CDK untuk menerapkan TypeScript kode ke Lambda

Ikuti langkah-langkah di bawah ini untuk membangun dan menerapkan TypeScript aplikasi sampel menggunakan AWS CDK. Aplikasi ini mengimplementasikan backend API dasar. Ini terdiri dari titik akhir API Gateway dan fungsi Lambda. Ketika Anda mengirim permintaan GET ke titik akhir API Gateway, fungsi Lambda dipanggil. Fungsi mengembalikan hello world pesan.

Prasyarat

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:

Menyebarkan sampel AWS CDK application
  1. Buat direktori proyek untuk aplikasi baru Anda.

    mkdir hello-world cd hello-world
  2. Inisialisasi aplikasi.

    cdk init app --language typescript
  3. Tambahkan paket @ types/aws -lambda sebagai ketergantungan pengembangan. Paket ini berisi definisi tipe untuk Lambda.

    npm install -D @types/aws-lambda
  4. Buka direktori lib. Anda akan melihat file bernama hello- world-stack.ts. Buat dua file baru di direktori ini: hello-world.function.ts dan hello-world.ts.

  5. Buka hello-world.function.ts dan tambahkan kode berikut ke file. Ini adalah kode untuk fungsi Lambda.

    catatan

    Per import nyataan tersebut mengimpor definisi tipe dari @ types/aws -lambda. Itu tidak mengimpor paket aws-lambda NPM, yang merupakan alat pihak ketiga yang tidak terkait. Untuk informasi selengkapnya, lihat aws-lambda di repositori. 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. Buka hello-world.ts dan tambahkan kode berikut ke file. Ini berisi NodejsFunction konstruk, yang menciptakan fungsi Lambda, dan LambdaRestApi konstruk, yang menciptakan REST API.

    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, }); } }

    Konstruk NodejsFunction si mengasumsikan yang berikut secara default:

    • Handler fungsi Anda dipanggilhandler.

    • File.ts yang berisi kode fungsi (hello-world.function.ts) berada di direktori yang sama dengan file.ts yang berisi konstruk (hello-world.ts). Konstruksi menggunakan ID konstruk (“hello-world”) dan nama file handler Lambda (“function”) untuk menemukan kode fungsi. Misalnya, jika kode fungsi Anda ada dalam file bernama hello-world.my-function.ts, file hello-world.ts harus mereferensikan kode fungsi seperti ini:

      const helloFunction = new NodejsFunction(this, 'my-function');

    Anda dapat mengubah perilaku ini dan mengonfigurasi parameter esbuild lainnya. Untuk informasi selengkapnya, lihat Mengonfigurasi esbuild di referensi AWS CDK API.

  7. Buka hello- world-stack.ts. Ini adalah kode yang mendefinisikan AWS CDK tumpukan Anda. Ganti kode dengan yang berikut:

    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. dari hello-world direktori yang berisi cdk.json file Anda, gunakan aplikasi Anda.

    cdk deploy
  9. Mem AWS CDK bangun dan mengemas fungsi Lambda menggunakan esbuild, dan kemudian menerapkan fungsi tersebut ke runtime Lambda. Output menunjukkan titik akhir untuk REST API. Buka titik akhir di browser untuk menguji fungsinya. Anda harus melihat tanggapan ini:

    {"message":"hello world"}

    Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.

Menggunakan AWS CLI dan esbuild untuk menerapkan TypeScript kode ke Lambda

Contoh berikut menunjukkan cara mentranspile dan menerapkan TypeScript kode ke Lambda menggunakan esbuild dan AWS CLI. esbuild menghasilkan satu JavaScript file dengan semua dependensi. Ini adalah satu-satunya file yang perlu Anda tambahkan ke arsip.zip.

Prasyarat

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:

Menyebarkan fungsi sampel
  1. Pada mesin lokal Anda, buat direktori proyek untuk fungsi baru Anda.

  2. Buat Node.js proyek baru dengan npm atau manajer paket pilihan Anda.

    npm init
  3. Tambahkan paket @ types/aws -lambda dan esbuild sebagai dependensi pengembangan. @types/aws-lambdaPaket berisi definisi tipe untuk Lambda.

    npm install -D @types/aws-lambda esbuild
  4. Buat file baru bernama index.ts. Tambahkan kode berikut ke file baru. Ini adalah kode untuk fungsi Lambda. Fungsi mengembalikan hello world pesan. Fungsi ini tidak membuat sumber daya API Gateway apa pun.

    catatan

    Per import nyataan tersebut mengimpor definisi tipe dari @ types/aws -lambda. Itu tidak mengimpor paket aws-lambda NPM, yang merupakan alat pihak ketiga yang tidak terkait. Untuk informasi selengkapnya, lihat aws-lambda di repositori. 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. Tambahkan skrip build ke file package.json. Ini mengonfigurasi esbuild untuk membuat paket penerapan.zip secara otomatis. Untuk informasi selengkapnya, lihat Membangun skrip di dokumentasi 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

    Dalam contoh ini, "postbuild" perintah menggunakan utilitas 7zip untuk membuat file.zip Anda. Gunakan utilitas zip Windows pilihan Anda sendiri dan ubah perintah seperlunya.

    "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. Bangun paket.

    npm run build
  7. Buat fungsi Lambda menggunakan paket penerapan.zip. Ganti teks yang disorot dengan Nama Sumber Daya Amazon (ARN) dari peran eksekusi Anda.

    aws lambda create-function --function-name hello-world --runtime "nodejs24.x" --role arn:aws:iam::123456789012:role/lambda-ex --zip-file "fileb://dist/index.zip" --handler index.handler
  8. Jalankan acara pengujian untuk mengonfirmasi bahwa fungsi mengembalikan respons berikut. Jika Anda ingin memanggil fungsi ini menggunakan API Gateway, buat dan konfigurasikan REST API.

    { "statusCode": 200, "body": "{\"message\":\"hello world\"}" }