Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Terapkan TypeScript kode yang ditranspilasikan di Lambda dengan arsip file.zip
Sebelum Anda dapat menerapkan TypeScript kode keAWS Lambda, Anda perlu mentranspilasinya menjadi. JavaScript Halaman ini menjelaskan tiga cara untuk membangun dan menyebarkan TypeScript kode ke Lambda dengan arsip file.zip:
AWS SAMdan AWS CDK menyederhanakan fungsi membangun dan menyebarkan TypeScript . Spesifikasi AWS SAM template menyediakan sintaks sederhana dan bersih untuk menggambarkan fungsi Lambda, API, izin, konfigurasi, dan peristiwa yang membentuk aplikasi tanpa server Anda. Ini AWS CDKmemungkinkan Anda membangun aplikasi yang andal, terukur, dan hemat biaya di cloud dengan kekuatan ekspresif yang cukup besar dari bahasa pemrograman. AWS CDKIni ditujukan untuk AWS pengguna yang cukup hingga sangat berpengalaman. Baik esbuild AWS CDK dan AWS SAM use untuk mentranspile TypeScript kode menjadi. JavaScript
Menggunakan AWS SAM untuk menyebarkan TypeScript kode ke Lambda
Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menyebarkan contoh aplikasi Hello World menggunakan TypeScript aplikasi Hello World. 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 SAMmenggunakan esbuild untuk membuat fungsi Lambda Node.js TypeScript dari kode. dukungan esbuild saat ini dalam pratinjau publik. Selama pratinjau publik, dukungan esbuild mungkin mengalami perubahan yang tidak kompatibel ke belakang.
Prasyarat
Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
Menyebarkan aplikasi sampel AWS SAM
-
Inisialisasi aplikasi menggunakan TypeScript template Hello World.
sam init --app-template hello-world-typescript --name sam-app --package-type Zip --runtime nodejs18.x
-
(Opsional) Aplikasi sampel mencakup konfigurasi untuk alat yang umum digunakan, seperti ESLLint untuk linting
kode dan Jest untuk pengujian unit. Untuk menjalankan perintah lint dan test: cd sam-app/hello-world npm install npm run lint npm run test
-
Bangun aplikasi.
cd sam-app sam build
-
Terapkan aplikasi.
sam deploy --guided
-
Ikuti petunjuk di layar. Untuk menerima opsi default yang disediakan dalam pengalaman interaktif, respons dengan
Enter
. -
Output menunjukkan titik akhir untuk REST API. Buka titik akhir di browser untuk menguji fungsinya. Anda akan 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.
sam delete
Menggunakan TypeScript kode AWS CDK untuk menyebarkan ke Lambda
Ikuti langkah-langkah di bawah ini untuk membangun dan menerapkan TypeScript aplikasi sampel menggunakan aplikasi. 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 aplikasi sampel AWS CDK
-
Buat direktori proyek untuk aplikasi baru Anda.
mkdir hello-world cd hello-world
-
Inisialisasi aplikasi.
cdk init app --language typescript
-
Tambahkan paket @types /aws-lambda
sebagai dependensi pengembangan. Paket ini berisi definisi tipe untuk Lambda. npm install -D @types/aws-lambda
-
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.
-
Buka hello-world.function.ts dan tambahkan kode berikut ke file. Ini adalah kode untuk fungsi Lambda.
catatan
import
Pernyataan 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-lambdadi 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', }), }; };
-
Buka hello-world.ts dan tambahkan kode berikut ke file. Ini berisi NodejsFunction konstruksi, yang menciptakan fungsi Lambda, dan konstruksi, LambdaRestApi yang membuat 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, }); } }
NodejsFunction
Konstruk mengasumsikan hal berikut secara default:-
Penangan fungsi Anda dipanggil
handler
. -
File.ts yang berisi kode fungsi (hello-world.function.ts) berada di direktori yang sama dengan file.ts yang berisi konstruksi (hello-world.ts). Konstruk menggunakan ID konstruksi (“hello-world”) dan nama file penangan Lambda (“fungsi”) 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.
-
-
Buka hello-world-stack.ts. Ini adalah kode yang mendefinisikan AWS CDKtumpukan 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'); } }
-
dari
hello-world
direktori yang berisicdk.json
file Anda, terapkan aplikasi Anda.cdk deploy
-
AWS CDKMembangun dan mengemas fungsi Lambda menggunakan esbuild, lalu menerapkan fungsi tersebut ke runtime Lambda. Output menunjukkan titik akhir untuk REST API. Buka titik akhir di browser untuk menguji fungsinya. Anda akan 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 menyebarkan TypeScript kode ke Lambda
Contoh berikut menunjukkan cara mentranspile dan menyebarkan kode TypeScript ke Lambda menggunakan esbuild dan. esbuild menghasilkan satu file dengan semua AWS CLI dependensi. JavaScript 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:
-
Node.js 18.x
-
Peran eksekusi untuk fungsi Lambda
-
Untuk pengguna Windows, utilitas file zip seperti 7zip
.
Menyebarkan fungsi sampel
-
Pada mesin lokal Anda, buat direktori proyek untuk fungsi baru Anda.
-
Buat proyek Node.js baru dengan npm atau manajer paket pilihan Anda.
npm init
-
Tambahkan paket @types /aws-lambda
dan esbuild sebagai dependensi pengembangan. @types/aws-lambda
Paket berisi definisi tipe untuk Lambda.npm install -D @types/aws-lambda esbuild
-
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
import
Pernyataan 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-lambdadi 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', }), }; };
-
Tambahkan skrip build ke file package.json. Ini mengonfigurasi esbuild untuk secara otomatis membuat paket penyebaran.zip. Untuk informasi selengkapnya, lihat Membuat skrip
di dokumentasi esbuild. -
Bangun paketnya.
npm run build
-
Buat fungsi Lambda menggunakan paket.zip deployment. Ganti teks yang disorot dengan Amazon Resource Name (ARN) dari peran eksekusi Anda.
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 -
Jalankan acara uji untuk mengonfirmasi bahwa fungsi mengembalikan respons berikut. Jika Anda ingin menjalankan fungsi ini menggunakan API Gateway, buat dan konfigurasikan REST API.
{ "statusCode": 200, "body": "{\"message\":\"hello world\"}" }