Deploy fungsi Lambda Node.js 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.

Deploy fungsi Lambda Node.js dengan arsip file .zip

Kode AWS Lambda fungsi Anda terdiri dari file.js atau .mjs yang berisi kode handler fungsi Anda, bersama dengan paket dan modul tambahan yang bergantung pada kode Anda. Untuk menyebarkan kode fungsi ini ke Lambda, Anda menggunakan paket penerapan. Paket ini dapat berupa arsip file.zip atau gambar kontainer. Untuk informasi selengkapnya tentang penggunaan gambar kontainer dengan Node.js, lihat Menerapkan fungsi Lambda Node.js dengan gambar kontainer.

Untuk membuat paket penyebaran Anda sebagai arsip file.zip, Anda dapat menggunakan utilitas arsip file.zip bawaan alat baris perintah Anda, atau utilitas file.zip lainnya seperti 7zip. Contoh yang ditampilkan di bagian berikut mengasumsikan Anda menggunakan zip alat baris perintah di lingkungan Linux atau macOS. Untuk menggunakan perintah yang sama di Windows, Anda dapat menginstal Windows Subsystem untuk Linux untuk mendapatkan versi Windows terintegrasi dari Ubuntu dan Bash.

Perhatikan bahwa Lambda menggunakan izin POSIX file, jadi Anda mungkin perlu mengatur izin untuk folder paket penyebaran sebelum membuat arsip file.zip.

Dependensi runtime di Node.js

Untuk fungsi Lambda yang menggunakan runtime Node.js, dependensi dapat berupa modul Node.js apa pun. Runtime Node.js mencakup sejumlah pustaka umum, serta versi. AWS SDK for JavaScript Runtime nodejs16.x Lambda mencakup versi 2.x dari file. SDK Versi runtime nodejs18.x dan yang lebih baru termasuk versi 3 dari versi. SDK Untuk menggunakan versi 2 dari versi SDK with runtime nodejs18.x dan yang lebih baru, tambahkan SDK ke paket penyebaran file.zip Anda. Jika runtime yang Anda pilih menyertakan versi yang SDK Anda gunakan, Anda tidak perlu menyertakan SDK pustaka dalam file.zip Anda. Untuk mengetahui versi mana yang SDK disertakan dalam runtime yang Anda gunakan, lihatVersi termasuk runtime SDK.

Lambda memperbarui SDK pustaka secara berkala di runtime Node.js untuk menyertakan fitur terbaru dan peningkatan keamanan. Lambda juga menerapkan patch keamanan dan pembaruan ke pustaka lain yang termasuk dalam runtime. Untuk memiliki kontrol penuh atas dependensi dalam paket Anda, Anda dapat menambahkan versi pilihan Anda dari setiap dependensi yang disertakan runtime ke paket penerapan Anda. Misalnya, jika Anda ingin menggunakan versi tertentu dari SDK for JavaScript, Anda dapat memasukkannya ke dalam file.zip Anda sebagai dependensi. Untuk informasi selengkapnya tentang menambahkan dependensi yang disertakan runtime ke file.zip Anda, lihat. Jalur pencarian ketergantungan dan pustaka yang disertakan runtime

Di bawah model tanggung jawab AWS bersama, Anda bertanggung jawab atas pengelolaan dependensi apa pun dalam paket penerapan fungsi Anda. Ini termasuk menerapkan pembaruan dan patch keamanan. Untuk memperbarui dependensi dalam paket penerapan fungsi Anda, pertama buat file.zip baru dan kemudian unggah ke Lambda. Lihat Membuat paket penerapan.zip dengan dependensi dan Membuat dan memperbarui fungsi Lambda Node.js menggunakan file.zip untuk informasi lebih lanjut.

Membuat paket penerapan.zip tanpa dependensi

Jika kode fungsi Anda tidak memiliki dependensi kecuali pustaka yang disertakan dalam runtime Lambda, file.zip Anda hanya berisi index.mjs file index.js atau dengan kode handler fungsi Anda. Gunakan utilitas zip pilihan Anda untuk membuat file.zip dengan index.mjs file index.js atau Anda di root. Jika file yang berisi kode handler Anda tidak berada di root file.zip Anda, Lambda tidak akan dapat menjalankan kode Anda.

Untuk mempelajari cara menerapkan file.zip Anda untuk membuat fungsi Lambda baru atau memperbarui yang sudah ada, lihat. Membuat dan memperbarui fungsi Lambda Node.js menggunakan file.zip

Membuat paket penerapan.zip dengan dependensi

Jika kode fungsi Anda bergantung pada paket atau modul yang tidak disertakan dalam runtime Lambda Node.js, Anda dapat menambahkan dependensi ini ke file.zip dengan kode fungsi Anda atau menggunakan lapisan Lambda. Petunjuk di bagian ini menunjukkan cara memasukkan dependensi Anda ke dalam paket penerapan.zip Anda. Untuk petunjuk tentang cara memasukkan dependensi Anda dalam lapisan, lihat. Membuat layer Node.js untuk dependensi Anda

Contoh CLI perintah berikut membuat file.zip bernama my_deployment_package.zip berisi index.mjs file index.js or dengan kode handler fungsi Anda dan dependensinya. Dalam contoh, Anda menginstal dependensi menggunakan manajer paket npm.

Untuk membuat paket deployment
  1. Arahkan ke direktori proyek yang berisi file kode index.mjs sumber index.js atau Anda. Dalam contoh ini, direktori diberi namamy_function.

    cd my_function
  2. Instal pustaka yang diperlukan fungsi Anda di node_modules direktori menggunakan npm install perintah. Dalam contoh ini Anda menginstal file AWS X-Ray SDK for Node.js.

    npm install aws-xray-sdk

    Ini menciptakan struktur folder yang mirip dengan berikut ini:

    ~/my_function ├── index.mjs └── node_modules ├── async ├── async-listener ├── atomic-batcher ├── aws-sdk ├── aws-xray-sdk ├── aws-xray-sdk-core

    Anda juga dapat menambahkan modul khusus yang Anda buat sendiri ke paket penyebaran Anda. Buat direktori di bawah node_modules dengan nama modul Anda dan simpan paket tertulis kustom Anda di sana.

  3. Buat file.zip yang berisi isi folder proyek Anda di root. Gunakan opsi r (rekursif) untuk memastikan zip mengompresi subfolder.

    zip -r my_deployment_package.zip .

Membuat layer Node.js untuk dependensi Anda

Instruksi di bagian ini menunjukkan cara memasukkan dependensi Anda dalam lapisan. Untuk petunjuk tentang cara menyertakan dependensi Anda dalam paket penerapan, lihat. Membuat paket penerapan.zip dengan dependensi

Saat Anda menambahkan lapisan ke fungsi, Lambda memuat konten lapisan ke dalam /opt direktori lingkungan eksekusi itu. Untuk setiap runtime Lambda, PATH variabel sudah menyertakan jalur folder tertentu dalam direktori. /opt Untuk memastikan bahwa PATH variabel mengambil konten lapisan Anda, file layer.zip Anda harus memiliki dependensi di jalur folder berikut:

  • nodejs/node_modules

  • nodejs/node16/node_modules (NODE_PATH)

  • nodejs/node18/node_modules (NODE_PATH)

  • nodejs/node20/node_modules (NODE_PATH)

Misalnya, struktur file layer.zip Anda mungkin terlihat seperti berikut:

xray-sdk.zip └ nodejs/node_modules/aws-xray-sdk

Selain itu, Lambda secara otomatis mendeteksi pustaka apa pun di /opt/lib direktori, dan binari apa pun di direktori. /opt/bin Untuk memastikan bahwa Lambda menemukan konten layer Anda dengan benar, Anda juga dapat membuat layer dengan struktur berikut:

custom-layer.zip └ lib | lib_1 | lib_2 └ bin | bin_1 | bin_2

Setelah Anda mengemas layer Anda, lihat Membuat dan menghapus layer di Lambda dan Menambahkan lapisan ke fungsi untuk menyelesaikan setup layer Anda.

Jalur pencarian ketergantungan dan pustaka yang disertakan runtime

Runtime Node.js mencakup sejumlah pustaka umum, serta versi. AWS SDK for JavaScript Jika Anda ingin menggunakan versi yang berbeda dari pustaka yang disertakan runtime, Anda dapat melakukannya dengan menggabungkannya dengan fungsi Anda atau dengan menambahkannya sebagai dependensi dalam paket penerapan Anda. Misalnya, Anda dapat menggunakan versi yang berbeda SDK dengan menambahkannya ke paket penerapan.zip Anda. Anda juga dapat memasukkannya ke dalam lapisan Lambda untuk fungsi Anda.

Saat Anda menggunakan require pernyataan import atau dalam kode Anda, runtime Node.js mencari direktori di NODE_PATH jalur hingga menemukan modul. Secara default, lokasi pertama pencarian runtime adalah direktori tempat paket deployment .zip Anda didekompresi dan dipasang (). /var/task Jika Anda menyertakan versi pustaka yang disertakan runtime dalam paket penerapan, versi ini akan lebih diutamakan daripada versi yang disertakan dalam runtime. Dependensi dalam paket penerapan Anda juga lebih diutamakan daripada dependensi dalam lapisan.

Saat Anda menambahkan dependensi ke lapisan, Lambda mengekstrak ini /opt/nodejs/nodexx/node_modules ke nodexx mana mewakili versi runtime yang Anda gunakan. Di jalur pencarian, direktori ini lebih diutamakan daripada direktori yang berisi pustaka yang disertakan runtime (). /var/lang/lib/node_modules Oleh karena itu, pustaka di lapisan fungsi lebih diutamakan daripada versi yang disertakan dalam runtime.

Anda dapat melihat jalur pencarian lengkap untuk fungsi Lambda Anda dengan menambahkan baris kode berikut.

console.log(process.env.NODE_PATH)

Anda juga dapat menambahkan dependensi di folder terpisah di dalam paket.zip Anda. Misalnya, Anda dapat menambahkan modul kustom ke folder dalam paket.zip Anda yang dipanggilcommon. Ketika paket.zip Anda didekompresi dan dipasang, folder ini ditempatkan di dalam direktori. /var/task Untuk menggunakan dependensi dari folder dalam paket deployment .zip Anda dalam kode Anda, gunakan const { } = require() pernyataan import { } from atau, tergantung pada apakah Anda menggunakan CJS atau ESM resolusi modul. Sebagai contoh:

import { myModule } from './common'

Jika Anda menggabungkan kode Anda denganesbuild,rollup, atau serupa, dependensi yang digunakan oleh fungsi Anda dibundel bersama dalam satu atau beberapa file. Kami merekomendasikan menggunakan metode ini untuk menjual dependensi bila memungkinkan. Dibandingkan dengan menambahkan dependensi ke paket penerapan Anda, bundling kode Anda menghasilkan peningkatan kinerja karena pengurangan operasi I/O.

Membuat dan memperbarui fungsi Lambda Node.js menggunakan file.zip

Setelah Anda membuat paket.zip deployment, Anda dapat menggunakannya untuk membuat fungsi Lambda baru atau memperbarui yang sudah ada. Anda dapat menerapkan paket.zip Anda menggunakan konsol Lambda, the, AWS Command Line Interface dan Lambda. API Anda juga dapat membuat dan memperbarui fungsi Lambda menggunakan AWS Serverless Application Model (AWS SAM) dan. AWS CloudFormation

Ukuran maksimum untuk paket.zip deployment untuk Lambda adalah 250 MB (unzip). Perhatikan bahwa batas ini berlaku untuk ukuran gabungan semua file yang Anda unggah, termasuk lapisan Lambda apa pun.

Runtime Lambda membutuhkan izin untuk membaca file dalam paket deployment Anda. Dalam notasi oktal izin Linux, Lambda membutuhkan 644 izin untuk file yang tidak dapat dieksekusi (rw-r - r--) dan 755 izin () untuk direktori dan file yang dapat dieksekusi. rwxr-xr-x

Di Linux dan macOS, gunakan chmod perintah untuk mengubah izin file pada file dan direktori dalam paket penyebaran Anda. Misalnya, untuk memberikan file yang dapat dieksekusi izin yang benar, jalankan perintah berikut.

chmod 755 <filepath>

Untuk mengubah izin file di Windows, lihat Mengatur, Melihat, Mengubah, atau Menghapus Izin pada Objek dalam dokumentasi Microsoft Windows.

Membuat dan memperbarui fungsi dengan file.zip menggunakan konsol

Untuk membuat fungsi baru, Anda harus terlebih dahulu membuat fungsi di konsol, lalu mengunggah arsip.zip Anda. Untuk memperbarui fungsi yang ada, buka halaman untuk fungsi Anda, lalu ikuti prosedur yang sama untuk menambahkan file.zip Anda yang diperbarui.

Jika file.zip Anda kurang dari 50MB, Anda dapat membuat atau memperbarui fungsi dengan mengunggah file langsung dari mesin lokal Anda. Untuk file.zip yang lebih besar dari 50MB, Anda harus mengunggah paket Anda ke bucket Amazon S3 terlebih dahulu. Untuk petunjuk tentang cara mengunggah file ke bucket Amazon S3 menggunakan AWS Management Console, lihat Memulai Amazon S3. Untuk mengunggah file menggunakan AWS CLI, lihat Memindahkan objek di Panduan AWS CLI Pengguna.

catatan

Anda tidak dapat mengubah jenis paket penerapan (.zip atau image kontainer) untuk fungsi yang ada. Misalnya, Anda tidak dapat mengonversi fungsi gambar kontainer untuk menggunakan arsip file.zip. Anda harus membuat fungsi baru.

Untuk membuat fungsi baru (konsol)
  1. Buka halaman Fungsi konsol Lambda dan pilih Buat Fungsi.

  2. Pilih Tulis dari awal.

  3. Di bagian Informasi dasar, lakukan hal berikut:

    1. Untuk nama Fungsi, masukkan nama untuk fungsi Anda.

    2. Untuk Runtime, pilih runtime yang ingin Anda gunakan.

    3. (Opsional) Untuk Arsitektur, pilih arsitektur set instruksi untuk fungsi Anda. Arsitektur defaultnya adalah x86_64. Pastikan bahwa paket deployment .zip untuk fungsi Anda kompatibel dengan arsitektur set instruksi yang Anda pilih.

  4. (Opsional) Di bagian Izin, luaskan Ubah peran eksekusi default. Anda dapat membuat peran Eksekusi baru atau menggunakan yang sudah ada.

  5. Pilih Buat fungsi. Lambda menciptakan fungsi dasar 'Hello world' menggunakan runtime yang Anda pilih.

Untuk mengunggah arsip.zip dari mesin lokal Anda (konsol)
  1. Di halaman Fungsi konsol Lambda, pilih fungsi yang ingin Anda unggah file.zip.

  2. Pilih tab Kode.

  3. Di panel Sumber kode, pilih Unggah dari.

  4. Pilih file.zip.

  5. Untuk mengunggah file.zip, lakukan hal berikut:

    1. Pilih Unggah, lalu pilih file.zip Anda di pemilih file.

    2. Pilih Buka.

    3. Pilih Simpan.

Untuk mengunggah arsip.zip dari bucket Amazon S3 (konsol)
  1. Di halaman Fungsi konsol Lambda, pilih fungsi yang ingin Anda unggah file.zip baru.

  2. Pilih tab Kode.

  3. Di panel Sumber kode, pilih Unggah dari.

  4. Pilih lokasi Amazon S3.

  5. Rekatkan tautan Amazon S3 URL dari file.zip Anda dan pilih Simpan.

Memperbarui fungsi file.zip menggunakan editor kode konsol

Untuk beberapa fungsi dengan paket penyebaran.zip, Anda dapat menggunakan editor kode bawaan konsol Lambda untuk memperbarui kode fungsi Anda secara langsung. Untuk menggunakan fitur ini, fungsi Anda harus memenuhi kriteria berikut:

  • Fungsi Anda harus menggunakan salah satu runtime bahasa yang ditafsirkan (Python, Node.js, atau Ruby)

  • Paket penerapan fungsi Anda harus lebih kecil dari 3MB.

Kode fungsi untuk fungsi dengan paket penerapan gambar kontainer tidak dapat diedit langsung di konsol.

Untuk memperbarui kode fungsi menggunakan editor kode konsol
  1. Buka halaman Fungsi konsol Lambda dan pilih fungsi Anda.

  2. Pilih tab Kode.

  3. Di panel Sumber kode, pilih file kode sumber Anda dan edit di editor kode terintegrasi.

  4. Setelah selesai mengedit kode, pilih Deploy untuk menyimpan perubahan dan memperbarui fungsi Anda.

Membuat dan memperbarui fungsi dengan file.zip menggunakan AWS CLI

Anda dapat menggunakan AWS CLIuntuk membuat fungsi baru atau memperbarui yang sudah ada menggunakan file.zip. Gunakan create-function dan update-function-codeperintah untuk menyebarkan paket.zip Anda. Jika file.zip Anda lebih kecil dari 50MB, Anda dapat mengunggah paket.zip dari lokasi file di mesin build lokal Anda. Untuk file yang lebih besar, Anda harus mengunggah paket.zip Anda dari bucket Amazon S3. Untuk petunjuk tentang cara mengunggah file ke bucket Amazon S3 menggunakan AWS CLI, lihat Memindahkan objek di AWS CLI Panduan Pengguna.

catatan

Jika Anda mengunggah file.zip dari bucket Amazon S3 menggunakan AWS CLI bucket, bucket harus berada di lokasi Wilayah AWS yang sama dengan fungsi Anda.

Untuk membuat fungsi baru menggunakan file.zip dengan AWS CLI, Anda harus menentukan yang berikut:

  • Nama fungsi Anda (--function-name)

  • Runtime () --runtime fungsi Anda

  • Amazon Resource Name (ARN) dari peran eksekusi fungsi Anda (--role)

  • Nama metode handler dalam kode fungsi Anda () --handler

Anda juga harus menentukan lokasi file.zip Anda. Jika file.zip Anda terletak di folder di mesin build lokal Anda, gunakan --zip-file opsi untuk menentukan jalur file, seperti yang ditunjukkan pada perintah contoh berikut.

aws lambda create-function --function-name myFunction \ --runtime nodejs20.x --handler index.handler \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --zip-file fileb://myFunction.zip

Untuk menentukan lokasi file.zip di bucket Amazon S3, gunakan opsi seperti --code yang ditunjukkan pada perintah contoh berikut. Anda hanya perlu menggunakan S3ObjectVersion parameter untuk objek berversi.

aws lambda create-function --function-name myFunction \ --runtime nodejs20.x --handler index.handler \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --code S3Bucket=amzn-s3-demo-bucket,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion

Untuk memperbarui fungsi yang ada menggunakanCLI, Anda menentukan nama fungsi Anda menggunakan --function-name parameter. Anda juga harus menentukan lokasi file.zip yang ingin Anda gunakan untuk memperbarui kode fungsi Anda. Jika file.zip Anda terletak di folder di mesin build lokal Anda, gunakan --zip-file opsi untuk menentukan jalur file, seperti yang ditunjukkan pada perintah contoh berikut.

aws lambda update-function-code --function-name myFunction \ --zip-file fileb://myFunction.zip

Untuk menentukan lokasi file.zip di bucket Amazon S3, gunakan opsi --s3-key dan seperti --s3-bucket yang ditunjukkan pada perintah contoh berikut. Anda hanya perlu menggunakan --s3-object-version parameter untuk objek berversi.

aws lambda update-function-code --function-name myFunction \ --s3-bucket amzn-s3-demo-bucket --s3-key myFileName.zip --s3-object-version myObject Version

Membuat dan memperbarui fungsi dengan file.zip menggunakan Lambda API

Untuk membuat dan memperbarui fungsi menggunakan arsip file.zip, gunakan API operasi berikut:

Membuat dan memperbarui fungsi dengan file.zip menggunakan AWS SAM

The AWS Serverless Application Model (AWS SAM) adalah toolkit yang membantu merampingkan proses membangun dan menjalankan aplikasi tanpa server. AWS Anda menentukan sumber daya untuk aplikasi Anda dalam JSON template YAML atau dan menggunakan antarmuka baris AWS SAM perintah (AWS SAM CLI) untuk membangun, mengemas, dan menyebarkan aplikasi Anda. Saat Anda membuat fungsi Lambda dari AWS SAM template, AWS SAM secara otomatis membuat paket penerapan .zip atau gambar kontainer dengan kode fungsi Anda dan dependensi apa pun yang Anda tentukan. Untuk mempelajari lebih lanjut cara menggunakan AWS SAM untuk membangun dan menerapkan fungsi Lambda, lihat Memulai di Panduan AWS SAMAWS Serverless Application Model Pengembang.

Anda juga dapat menggunakan AWS SAM untuk membuat fungsi Lambda menggunakan arsip file.zip yang ada. Untuk membuat fungsi Lambda menggunakan AWS SAM, Anda dapat menyimpan file.zip di bucket Amazon S3 atau di folder lokal di mesin build Anda. Untuk petunjuk tentang cara mengunggah file ke bucket Amazon S3 menggunakan AWS CLI, lihat Memindahkan objek di AWS CLI Panduan Pengguna.

Dalam AWS SAM template Anda, AWS::Serverless::Function sumber daya menentukan fungsi Lambda Anda. Dalam sumber daya ini, atur properti berikut untuk membuat fungsi menggunakan arsip file.zip:

  • PackageType- diatur ke Zip

  • CodeUri- diatur ke kode fungsi Amazon S3URI, jalur ke folder lokal, atau objek FunctionCode

  • Runtime- Setel ke runtime yang Anda pilih

Dengan AWS SAM, jika file.zip Anda lebih besar dari 50MB, Anda tidak perlu mengunggahnya ke bucket Amazon S3 terlebih dahulu. AWS SAM dapat mengunggah paket.zip hingga ukuran maksimum yang diizinkan 250MB (unzip) dari lokasi di mesin build lokal Anda.

Untuk mempelajari selengkapnya tentang penerapan fungsi menggunakan file.zip di AWS SAM, lihat AWS: :Serverless: :Function dalam Panduan Pengembang.AWS SAM

Membuat dan memperbarui fungsi dengan file.zip menggunakan AWS CloudFormation

Anda dapat menggunakan AWS CloudFormation untuk membuat fungsi Lambda menggunakan arsip file.zip. Untuk membuat fungsi Lambda dari file.zip, Anda harus terlebih dahulu mengunggah file Anda ke bucket Amazon S3. Untuk petunjuk tentang cara mengunggah file ke bucket Amazon S3 menggunakan AWS CLI, lihat Memindahkan objek di AWS CLI Panduan Pengguna.

Dalam AWS CloudFormation template Anda, AWS::Lambda::Function sumber daya menentukan fungsi Lambda Anda. Dalam sumber daya ini, atur properti berikut untuk membuat fungsi menggunakan arsip file.zip:

  • PackageType- Setel ke Zip

  • Code- Masukkan nama bucket Amazon S3 dan nama file.zip di dan bidang S3Bucket S3Key

  • Runtime- Setel ke runtime yang Anda pilih

File.zip yang AWS CloudFormation menghasilkan tidak boleh melebihi 4MB. Untuk mempelajari selengkapnya tentang penerapan fungsi menggunakan file.zip di AWS CloudFormation, lihat AWS: :Lambda: :Function di Panduan Pengguna.AWS CloudFormation