Menyebarkan. NETFungsi Lambda dengan gambar kontainer - AWS Lambda

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

Menyebarkan. NETFungsi Lambda dengan gambar kontainer

Ada tiga cara untuk membangun gambar kontainer untuk file. NETFungsi Lambda:

  • Menggunakan gambar AWS 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 gambar AWS dasar khusus OS

    AWS Gambar dasar khusus OS 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 dasar khusus OS untuk mengimplementasikan runtime kustom. Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan klien antarmuka runtime untuk. NETdalam 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. NETdalam gambar.

Tip

Untuk mengurangi waktu yang dibutuhkan agar fungsi kontainer Lambda menjadi aktif, lihat Menggunakan build multi-tahap dalam dokumentasi Docker. Untuk membuat gambar kontainer yang efisien, ikuti Praktik terbaik untuk menulis Dockerfiles.

Halaman ini menjelaskan cara membuat, menguji, dan menyebarkan gambar kontainer untuk Lambda.

AWS gambar dasar untuk. NET

AWS menyediakan gambar dasar berikut untuk. NET:

Tanda Waktu berjalan Sistem operasi Dockerfile penghentian

8

. NET8 Amazon Linux 2023 Dockerfile untuk. NET8 pada GitHub

Tidak dijadwalkan

6

. NET6 Amazon Linux 2 Dockerfile untuk. NET6 pada GitHub

20 Des 2024

ECRRepositori Amazon: gallery.ecr.aws/lambda/dotnet

Menggunakan gambar AWS dasar untuk. NET

Prasyarat

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

  • . NETSDK— Langkah-langkah berikut menggunakan. NET8 gambar dasar. Pastikan bahwa Anda. NETversi cocok dengan versi gambar dasar yang Anda tentukan di Dockerfile Anda.

  • Docker

Membuat dan menyebarkan gambar menggunakan gambar dasar

Dalam langkah-langkah berikut, Anda menggunakan Amazon.Lambda.Templates dan Amazon.Lambda.Tools untuk membuat file. NETproyek. Kemudian, Anda membuat gambar Docker, mengunggah gambar ke AmazonECR, dan menerapkannya ke fungsi Lambda.

  1. Instal paket Amazon.Lambda.Templates. NuGet

    dotnet new install Amazon.Lambda.Templates
  2. Buat a. NETproyek menggunakan lambda.image.EmptyFunction template.

    dotnet new lambda.image.EmptyFunction --name MyFunction --region us-east-1
  3. Buka direktori MyFunction/src/MyFunction tersebut. Di sinilah file proyek disimpan. Periksa file-file berikut:

    • aws-lambda-tools-defaults.json - File ini adalah tempat Anda menentukan opsi baris perintah saat menerapkan fungsi Lambda Anda.

    • Function.cs - Kode fungsi handler Lambda Anda. Ini adalah template C # yang mencakup Amazon.Lambda.Core pustaka default dan LambdaSerializer atribut default. Untuk informasi selengkapnya tentang persyaratan dan opsi serialisasi, lihatSerialisasi dalam fungsi Lambda. Anda dapat menggunakan kode yang disediakan untuk pengujian, atau menggantinya dengan kode Anda sendiri.

    • MyFunction.csproj — A. NETfile proyek, yang mencantumkan file dan rakitan yang terdiri dari aplikasi Anda.

    • README.md - File ini berisi informasi lebih lanjut tentang fungsi Lambda sampel.

  4. Periksa Dockerfile di direktori. src/MyFunction Anda dapat menggunakan Dockerfile yang disediakan untuk pengujian, atau menggantinya dengan milik Anda sendiri. Jika Anda menggunakan sendiri, pastikan untuk:

    • Atur FROM properti ke URIgambar dasar. Anda. NETversi harus cocok dengan versi gambar dasar.

    • Atur CMD argumen ke penangan fungsi Lambda. Ini harus cocok dengan image-command inaws-lambda-tools-defaults.json.

    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 root pengguna ketika tidak ada USER instruksi yang diberikan.

    contoh Dockerfile
    # You can also pull these images from DockerHub amazon/aws-lambda-dotnet:8 FROM public.ecr.aws/lambda/dotnet:8 # Copy function code to Lambda-defined environment variable COPY publish/* ${LAMBDA_TASK_ROOT} # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "MyFunction::MyFunction.Function::FunctionHandler" ]
  5. Instal Amazon.Lambda.Tools. NETAlat Global.

    dotnet tool install -g Amazon.Lambda.Tools

    Jika Amazon.Lambda.Tools sudah diinstal, pastikan Anda memiliki versi terbaru.

    dotnet tool update -g Amazon.Lambda.Tools
  6. Ubah direktori keMyFunction/src/MyFunction, jika Anda belum ada di sana.

    cd src/MyFunction
  7. Gunakan Amazon.Lambda.Tools untuk membuat image Docker, mendorongnya ke repositori ECR Amazon baru, dan menerapkan 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-function MyFunction --function-role lambda-role

    Untuk informasi lebih lanjut tentang Amazon.Lambda.Tools. NETGlobal Tool, lihat AWS Ekstensi untuk. NETCLIrepositori aktif. GitHub

  8. Memanggil fungsi.

    dotnet lambda invoke-function MyFunction --payload "Testing the function"

    Jika semuanya berhasil, Anda akan melihat hal berikut:

    Payload: "TESTING THE FUNCTION" Log Tail: START RequestId: id Version: $LATEST END RequestId: id REPORT RequestId: id Duration: 0.99 ms Billed Duration: 1 ms Memory Size: 256 MB Max Memory Used: 12 MB
  9. Hapus fungsi Lambda.

    dotnet lambda delete-function MyFunction

Menggunakan gambar dasar alternatif dengan klien antarmuka runtime

Jika Anda menggunakan gambar dasar khusus OS atau gambar dasar alternatif, Anda harus menyertakan klien antarmuka runtime dalam gambar Anda. Klien antarmuka runtime memperluasMenggunakan runtime Lambda untuk runtime khusus API, yang mengelola interaksi antara Lambda dan kode fungsi Anda.

Contoh berikut menunjukkan bagaimana membangun image container untuk. NETmenggunakan gambar AWS non-dasar, dan cara menambahkan Amazon.Lambda. RuntimeSupport paket, yang merupakan klien antarmuka runtime Lambda untuk. NET. Contoh Dockerfile menggunakan Microsoft. NET8 gambar dasar.

Prasyarat

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

  • . NETSDK— Langkah-langkah berikut menggunakan a. NET8 gambar dasar. Pastikan bahwa Anda. NETversi cocok dengan versi gambar dasar yang Anda tentukan di Dockerfile Anda.

  • Docker

Membuat dan menyebarkan gambar menggunakan gambar dasar alternatif

  1. Instal paket Amazon.Lambda.Templates. NuGet

    dotnet new install Amazon.Lambda.Templates
  2. Buat a. NETproyek menggunakan lambda.CustomRuntimeFunction template. Template ini termasuk Amazon.Lambda. RuntimeSupportpaket.

    dotnet new lambda.CustomRuntimeFunction --name MyFunction --region us-east-1
  3. Buka direktori MyFunction/src/MyFunction tersebut. Di sinilah file proyek disimpan. Periksa file-file berikut:

    • 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 Main metode yang menginisialisasi Amazon.Lambda.RuntimeSupport perpustakaan 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 kelas di GitHub repositori.

    • MyFunction.csproj — A. NETfile proyek, yang mencantumkan file dan rakitan yang terdiri dari aplikasi Anda.

    • README.md - File ini berisi informasi lebih lanjut tentang fungsi Lambda sampel.

  4. Buka aws-lambda-tools-defaults.json file 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: Menetapkan direktori output untuk proses build.

    contoh aws-lambda-tools-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" }
  5. Buat Dockerfile di direktori. MyFunction/src/MyFunction Contoh berikut Dockerfile menggunakan Microsoft. NETgambar dasar, bukan gambar AWS dasar.

    • Atur FROM properti ke pengenal gambar dasar. Anda. NETversi harus cocok dengan versi gambar dasar.

    • Gunakan COPY perintah untuk menyalin fungsi ke /var/task direktori.

    • Atur ENTRYPOINT ke modul yang Anda inginkan untuk menjalankan wadah Docker saat dimulai. Dalam hal ini, modul adalah bootstrap, yang menginisialisasi Amazon.Lambda.RuntimeSupport perpustakaan.

    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 root pengguna ketika tidak ada USER instruksi yang diberikan.

    contoh Dockerfile
    # You can also pull these images from DockerHub amazon/aws-lambda-dotnet:8 FROM mcr.microsoft.com/dotnet/runtime:8.0 # Set the image's internal work directory WORKDIR /var/task # Copy function code to Lambda-defined environment variable COPY "bin/Release/net8.0/linux-x64" . # Set the entrypoint to the bootstrap ENTRYPOINT ["/usr/bin/dotnet", "exec", "/var/task/bootstrap.dll"]
  6. Instal Amazon.Lambda.Tools. NETEkstensi Alat Global.

    dotnet tool install -g Amazon.Lambda.Tools

    Jika Amazon.Lambda.Tools sudah diinstal, pastikan Anda memiliki versi terbaru.

    dotnet tool update -g Amazon.Lambda.Tools
  7. Gunakan Amazon.Lambda.Tools untuk membuat image Docker, mendorongnya ke repositori ECR Amazon baru, dan menerapkan 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-function MyFunction --function-role lambda-role

    Untuk informasi lebih lanjut tentang Amazon.Lambda.Tools. NETCLIekstensi, lihat AWS Ekstensi untuk. NETCLIrepositori aktif. GitHub

  8. Memanggil fungsi.

    dotnet lambda invoke-function MyFunction --payload "Testing the function"

    Jika semuanya berhasil, Anda akan melihat hal berikut:

    Payload: "TESTING THE FUNCTION" Log Tail: START RequestId: id Version: $LATEST END RequestId: id REPORT RequestId: id Duration: 0.99 ms Billed Duration: 1 ms Memory Size: 256 MB Max Memory Used: 12 MB
  9. Hapus fungsi Lambda.

    dotnet lambda delete-function MyFunction