Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyebarkan Fungsi Event .NET Lambda dengan gambar kontainer
Ada tiga cara untuk membangun image kontainer untuk Fungsi Event .NET Lambda:
-
Menggunakan sebuah AWS gambar dasar untuk .NET
Gambar AWS dasar dimuat sebelumnya dengan runtime bahasa, klien antarmuka runtime untuk mengelola interaksi antara Lambda dan kode fungsi Anda, dan emulator antarmuka runtime untuk pengujian lokal.
-
Menggunakan sebuah AWS OS-only gambar dasar
AWS OS-only image dasar
berisi distribusi Amazon Linux dan emulator antarmuka runtime . Gambar-gambar ini biasanya digunakan untuk membuat gambar kontainer untuk bahasa yang dikompilasi, seperti Go dan Rust, dan untuk versi bahasa atau bahasa yang Lambda tidak menyediakan gambar dasar, seperti Node.js 19. Anda juga dapat menggunakan gambar OS-only dasar untuk mengimplementasikan runtime kustom. Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan klien antarmuka runtime untuk.NET dalam gambar. -
Menggunakan gambar AWS non-dasar
Anda dapat menggunakan gambar dasar alternatif dari registri kontainer lain, seperti Alpine Linux atau Debian. Anda juga dapat menggunakan gambar kustom yang dibuat oleh organisasi Anda. Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan klien antarmuka runtime untuk.NET dalam gambar.
Tip
Untuk mengurangi waktu yang dibutuhkan agar fungsi kontainer Lambda menjadi aktif, lihat Menggunakan build multi-tahap
Halaman ini menjelaskan cara membuat, menguji, dan menyebarkan gambar kontainer untuk Lambda.
Topik
AWS gambar dasar untuk .NET
AWS menyediakan gambar dasar berikut untuk .NET:
| Tanda | Waktu berjalan | Sistem operasi | Dockerfile | penghentian |
|---|---|---|---|---|
10 |
.NET 10 | Amazon Linux 2023 | Dockerfile untuk .NET 10 di GitHub |
Nov 14, 2028 |
9 |
.NET 9 | Amazon Linux 2023 | Dockerfile untuk .NET 9 di GitHub |
Nov 10, 2026 |
8 |
.NET 8 | Amazon Linux 2023 | Dockerfile untuk .NET 8 di GitHub |
Nov 10, 2026 |
Repositori Amazon ECR: gallery.ecr. aws/lambda/dotnet
Menggunakan sebuah AWS gambar dasar untuk .NET
Prasyarat
Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
-
.NET SDK
— Langkah-langkah berikut menggunakan gambar dasar.NET 8. Pastikan versi.NET Anda cocok dengan versi gambar dasar yang Anda tentukan di Dockerfile Anda. -
Docker
(versi minimum 25.0.0) -
Plugin buildx Docker
.
Membuat dan menyebarkan gambar menggunakan gambar dasar
Dalam langkah-langkah berikut, Anda menggunakan Amazon.Lambda.Templates
-
Instal paket Amazon.Lambda.Templates
NuGet . dotnet new install Amazon.Lambda.Templates -
Buat proyek.NET menggunakan
lambda.image.EmptyFunctiontemplate.dotnet new lambda.image.EmptyFunction --nameMyFunction--regionus-east-1File proyek disimpan dalam
direktori:MyFunction/src/MyFunction-
aws-lambda-tools-defaults.json: Menentukan opsi baris perintah untuk menerapkan fungsi Lambda Anda.
-
Function.cs: Kode fungsi penangan Lambda Anda. Ini adalah template C # yang mencakup
Amazon.Lambda.Corepustaka default danLambdaSerializeratribut default. Untuk informasi selengkapnya tentang persyaratan dan opsi serialisasi, lihatSerialisasi dalam Fungsi Acara C# Lambda. Anda dapat menggunakan kode yang disediakan untuk pengujian, atau menggantinya dengan kode Anda sendiri. -
MyFunction.csproj: File proyek.NET
, yang mencantumkan file dan rakitan yang terdiri dari aplikasi Anda. -
Dockerfile: Anda dapat menggunakan Dockerfile yang disediakan untuk pengujian, atau menggantinya dengan milik Anda sendiri. Jika Anda menggunakan sendiri, pastikan untuk:
-
Mengatur
FROMproperti ke URI dari gambar dasar. Gambar dasar dan TargetFrameworkdalamMyFunction.csprojfile harus menggunakan versi.NET yang sama. Misalnya, untuk menggunakan .NET 9:-
Dockerfile:
FROMpublic.ecr.aws/lambda/dotnet:9 -
MyFunction.csproj:
<TargetFramework>net9.0</TargetFramework>
-
-
Atur
CMDargumen ke penangan fungsi Lambda. Ini harus cocok denganimage-commandinaws-lambda-tools-defaults.json.
-
-
-
Instal Alat Amazon.Lambda.Tools Global.NET
. dotnet tool install -g Amazon.Lambda.ToolsJika Amazon.Lambda.Tools sudah terinstal, pastikan Anda memiliki versi terbaru.
dotnet tool update -g Amazon.Lambda.Tools -
Ubah direktori ke
, jika Anda belum ada di sana.MyFunction/src/MyFunctioncd src/MyFunction -
Gunakan Amazon.Lambda.Tools untuk membuat image Docker, dorong ke repositori Amazon ECR baru, dan gunakan fungsi Lambda.
Untuk--function-role, tentukan nama peran—bukan Amazon Resource Name (ARN) —dari peran eksekusi untuk fungsi tersebut. Misalnya,
lambda-role.dotnet lambda deploy-functionMyFunction--function-rolelambda-roleUntuk informasi selengkapnya tentang Amazon.Lambda.Tools .NET Global Tool, lihat AWS Ekstensi untuk repositori.NET CLI
di. GitHub -
Memanggil fungsi.
dotnet lambda invoke-functionMyFunction--payload "Testing the function"Jika semuanya berhasil, Anda melihat respons yang mirip dengan yang berikut:
Payload: {"Lower":"testing the function","Upper":"TESTING THE FUNCTION"} Log Tail: INIT_REPORT Init Duration: 9999.81 ms Phase: init Status: timeout START RequestId: 12378346-f302-419b-b1f2-deaa1e8423ed Version: $LATEST END RequestId: 12378346-f302-419b-b1f2-deaa1e8423ed REPORT RequestId: 12378346-f302-419b-b1f2-deaa1e8423ed Duration: 3173.06 ms Billed Duration: 3174 ms Memory Size: 512 MB Max Memory Used: 24 MB -
Hapus fungsi Lambda.
dotnet lambda delete-functionMyFunction
Menggunakan gambar dasar alternatif dengan klien antarmuka runtime
Jika Anda menggunakan gambar OS-only dasar atau gambar dasar alternatif, Anda harus menyertakan klien antarmuka runtime dalam gambar Anda. Klien antarmuka runtime memperluasAPI runtime, yang mengelola interaksi antara Lambda dan kode fungsi Anda.
Contoh berikut menunjukkan cara membangun image container untuk.NET menggunakan image AWS non-base, dan cara menambahkan Amazon.Lambda.RuntimeSupport paket
Prasyarat
Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
-
.NET SDK
— Langkah-langkah berikut menggunakan gambar dasar.NET 9. Pastikan versi.NET Anda cocok dengan versi gambar dasar yang Anda tentukan di Dockerfile Anda. -
Docker
(versi minimum 25.0.0) -
Plugin buildx Docker
.
Membuat dan menyebarkan gambar menggunakan gambar dasar alternatif
-
Instal paket Amazon.Lambda.Templates
NuGet . dotnet new install Amazon.Lambda.Templates -
Buat proyek.NET menggunakan
lambda.CustomRuntimeFunctiontemplate. Template ini termasuk Amazon.Lambda.RuntimeSupportpaket. dotnet new lambda.CustomRuntimeFunction --nameMyFunction--regionus-east-1 -
Buka direktori
tersebut. Di sinilah file proyek disimpan. Periksa file-file berikut:MyFunction/src/MyFunction-
aws-lambda-tools-defaults.json — File ini adalah tempat Anda menentukan opsi baris perintah saat menerapkan fungsi Lambda Anda.
-
Function.cs— Kode berisi kelas dengan
Mainmetode yang menginisialisasiAmazon.Lambda.RuntimeSupportperpustakaan sebagai bootstrap.MainMetode ini adalah titik masuk untuk proses fungsi.MainMetode ini membungkus fungsi handler dalam pembungkus yang dapat digunakan bootstrap. Untuk informasi selengkapnya, lihat Menggunakan Amazon.Lambda.RuntimeSupport sebagai pustaka kelasdi GitHub repositori. -
MyFunction.csproj— File proyek.NET
, yang mencantumkan file dan rakitan yang terdiri dari aplikasi Anda. -
Readme.md— File ini berisi informasi lebih lanjut tentang fungsi Lambda sampel.
-
-
Buka
aws-lambda-tools-defaults.jsonfile dan Tambahkan baris berikut:"package-type": "image","docker-host-build-output-dir": "./bin/Release/lambda-publish"-
package-type: Mendefinisikan paket deployment sebagai image container.
-
docker-host-build-output-dir: Menyetel direktori keluaran untuk proses pembuatan.
contoh aws-lambda-alat-defaults.json
{ "Information": [ "This file provides default values for the deployment wizard inside Visual Studio and the AWS Lambda commands added to the .NET Core CLI.", "To learn more about the Lambda commands with the .NET Core CLI execute the following command at the command line in the project root directory.", "dotnet lambda help", "All the command line options for the Lambda command can be specified in this file." ], "profile": "", "region": "us-east-1", "configuration": "Release", "function-runtime": "provided.al2023", "function-memory-size": 256, "function-timeout": 30, "function-handler": "bootstrap", "msbuild-parameters": "--self-contained true","package-type": "image","docker-host-build-output-dir": "./bin/Release/lambda-publish"} -
-
Buat Dockerfile di direktori.
Contoh berikut Dockerfile menggunakan gambar dasar Microsoft .NET bukan gambar AWS dasar.MyFunction/src/MyFunction-
Atur
FROMproperti ke pengenal gambar dasar. Gambar dasar danTargetFrameworkdalamMyFunction.csprojfile harus menggunakan versi.NET yang sama. -
Gunakan
COPYperintah untuk menyalin fungsi ke/var/taskdirektori. -
Atur
ENTRYPOINTke modul yang Anda inginkan untuk menjalankan wadah Docker saat dimulai. Dalam hal ini, modul adalah bootstrap, yang menginisialisasiAmazon.Lambda.RuntimeSupportperpustakaan.
Perhatikan bahwa contoh Dockerfile tidak menyertakan instruksi USER
. Saat Anda menyebarkan gambar kontainer ke Lambda, Lambda secara otomatis mendefinisikan pengguna Linux default dengan izin yang paling tidak memiliki hak istimewa. Ini berbeda dari perilaku Docker standar yang default ke rootpengguna ketika tidak adaUSERinstruksi yang diberikan.contoh Dockerfile
# You can also pull these images from DockerHub amazon/aws-lambda-dotnet:8 FROMmcr.microsoft.com/dotnet/runtime:9.0# Set the image's internal work directory WORKDIR /var/task # Copy function code to Lambda-defined environment variable COPY "bin/Release/net9.0/linux-x64" . # Set the entrypoint to the bootstrap ENTRYPOINT ["/usr/bin/dotnet", "exec", "/var/task/bootstrap.dll"] -
-
Instal Amazon.Lambda.Tools ekstensi.NET Global Tools
. dotnet tool install -g Amazon.Lambda.ToolsJika Amazon.Lambda.Tools sudah terinstal, pastikan Anda memiliki versi terbaru.
dotnet tool update -g Amazon.Lambda.Tools -
Gunakan Amazon.Lambda.Tools untuk membuat image Docker, dorong ke repositori Amazon ECR baru, dan gunakan fungsi Lambda.
Untuk--function-role, tentukan nama peran—bukan Amazon Resource Name (ARN) —dari peran eksekusi untuk fungsi tersebut. Misalnya,
lambda-role.dotnet lambda deploy-functionMyFunction--function-rolelambda-roleUntuk informasi selengkapnya tentang Amazon.Lambda.Tools ekstensi.NET CLI, lihat AWS Ekstensi untuk repositori.NET CLI
di. GitHub -
Memanggil fungsi.
dotnet lambda invoke-functionMyFunction--payload "Testing the function"Jika semuanya berhasil, Anda akan melihat hal berikut:
Payload: "TESTING THE FUNCTION" Log Tail: START RequestId:idVersion: $LATEST END RequestId:idREPORT RequestId:idDuration: 0.99 ms Billed Duration: 1 ms Memory Size: 256 MB Max Memory Used: 12 MB -
Hapus fungsi Lambda.
dotnet lambda delete-functionMyFunction