

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

# Deploy fungsi Lambda .NET dengan gambar kontainer
<a name="csharp-image"></a>

Ada tiga cara untuk membangun image container untuk fungsi.NET Lambda:
+ [Menggunakan gambar AWS dasar untuk.NET](#csharp-image-instructions)

  [Gambar AWS dasar](images-create.md#runtimes-images-lp) 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](images-create.md#runtimes-images-provided)

  [AWS Gambar dasar khusus OS](https://gallery.ecr.aws/lambda/provided) berisi distribusi Amazon Linux dan emulator antarmuka [runtime](https://github.com/aws/aws-lambda-runtime-interface-emulator/). Gambar-gambar ini biasanya digunakan untuk membuat gambar kontainer untuk bahasa yang dikompilasi, seperti [Go](go-image.md#go-image-provided) dan [Rust](lambda-rust.md), 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 [khusus](runtimes-custom.md). Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan [klien antarmuka runtime untuk.NET](#csharp-image-clients) dalam gambar.
+ [Menggunakan gambar AWS non-dasar](#csharp-image-clients)

  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](#csharp-image-clients) dalam gambar.

**Tip**  
Untuk mengurangi waktu yang dibutuhkan agar fungsi penampung Lambda menjadi aktif, lihat [Menggunakan build multi-tahap](https://docs.docker.com/build/building/multi-stage/) dalam dokumentasi Docker. Untuk membuat gambar kontainer yang efisien, ikuti [Praktik terbaik untuk menulis Dockerfiles](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/).

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

**Topics**
+ [AWS gambar dasar untuk .NET](#csharp-image-base)
+ [Menggunakan gambar AWS dasar untuk.NET](#csharp-image-instructions)
+ [Menggunakan gambar dasar alternatif dengan klien antarmuka runtime](#csharp-image-clients)

## AWS gambar dasar untuk .NET
<a name="csharp-image-base"></a>

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](https://github.com/aws/aws-lambda-base-images/blob/dotnet10/Dockerfile.dotnet10) |   Nov 14, 2028   | 
| 9 | .NET 9 | Amazon Linux 2023 | [Dockerfile untuk .NET 9 di GitHub](https://github.com/aws/aws-lambda-base-images/blob/dotnet9/Dockerfile.dotnet9) |   Nov 10, 2026   | 
| 8 | .NET 8 | Amazon Linux 2023 | [Dockerfile untuk .NET 8 di GitHub](https://github.com/aws/aws-lambda-base-images/blob/dotnet8/Dockerfile.dotnet8) |   Nov 10, 2026   | 

[Repositori Amazon ECR: gallery.ecr. aws/lambda/dotnet](https://gallery.ecr.aws/lambda/dotnet)

## Menggunakan gambar AWS dasar untuk.NET
<a name="csharp-image-instructions"></a>

### Prasyarat
<a name="dotnet-csharp-image-prerequisites"></a>

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
+ [.NET SDK](https://dotnet.microsoft.com/download) — Langkah-langkah berikut menggunakan gambar dasar.NET 8. Pastikan versi.NET Anda cocok dengan versi [gambar dasar](https://gallery.ecr.aws/lambda/dotnet) yang Anda tentukan di Dockerfile Anda.
+ [Docker](https://docs.docker.com/get-docker) (versi minimum 25.0.0)
+ Plugin [buildx Docker](https://github.com/docker/buildx/blob/master/README.md).

### Membuat dan menyebarkan gambar menggunakan gambar dasar
<a name="dotnet-image-create"></a>

Dalam langkah-langkah berikut, Anda menggunakan [Amazon.Lambda.Templates dan [Amazon.Lambda.Tools](https://github.com/aws/aws-extensions-for-dotnet-cli#aws-lambda-amazonlambdatools)](https://github.com/aws/aws-lambda-dotnet#dotnet-cli-templates) untuk membuat proyek.NET. Kemudian, Anda membuat gambar Docker, mengunggah gambar ke Amazon ECR, dan menerapkannya ke fungsi Lambda.

1. Instal paket [Amazon.Lambda.Templates.](https://github.com/aws/aws-lambda-dotnet#dotnet-cli-templates) NuGet 

   ```
   dotnet new install Amazon.Lambda.Templates
   ```

1. Buat proyek.NET menggunakan `lambda.image.EmptyFunction` template.

   ```
   dotnet new lambda.image.EmptyFunction --name MyFunction --region us-east-1
   ```

   File proyek disimpan dalam `MyFunction/src/MyFunction` direktori:
   + **aws-lambda-tools-defaults.json**: Menentukan opsi baris perintah untuk menyebarkan fungsi Lambda Anda.
   + **Function.cs**: Kode fungsi handler Lambda Anda. Ini adalah template C \$1 yang mencakup `Amazon.Lambda.Core` pustaka default dan `LambdaSerializer` atribut default. Untuk informasi selengkapnya tentang persyaratan dan opsi serialisasi, lihat[Serialisasi dalam fungsi C\$1 Lambda](csharp-handler.md#csharp-handler-serializer). Anda dapat menggunakan kode yang disediakan untuk pengujian, atau menggantinya dengan kode Anda sendiri.
   + **MyFunction.csproj**: [File proyek.NET, yang mencantumkan file](https://learn.microsoft.com/en-us/dotnet/core/project-sdk/overview#project-files) 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 milik Anda sendiri, pastikan untuk:
     + Mengatur `FROM` properti ke [URI dari gambar dasar](https://gallery.ecr.aws/lambda/dotnet). Gambar dasar dan `TargetFramework` dalam `MyFunction.csproj` file harus menggunakan versi.NET yang sama. Misalnya, untuk menggunakan .NET 9:
       + Dockerfile: `FROM public.ecr.aws/lambda/dotnet:9`
       + MyFunction.csproj: `<TargetFramework>net9.0</TargetFramework>`
     + Atur `CMD` argumen ke penangan fungsi Lambda. Ini harus cocok dengan `image-command` in`aws-lambda-tools-defaults.json`.

1. [Instal Amazon.Lambda.Tools .NET Global Tool.](https://aws.amazon.com/blogs/developer/net-core-global-tools-for-aws/)

   ```
   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
   ```

1. Ubah direktori ke`MyFunction/src/MyFunction`, jika Anda belum ada di sana.

   ```
   cd src/MyFunction
   ```

1. Gunakan Amazon.Lambda.Tools untuk membuat image Docker, mendorongnya ke repositori Amazon ECR baru, dan menerapkan fungsi Lambda.

   [Untuk`--function-role`, tentukan nama peran—bukan Nama Sumber Daya Amazon (ARN) —dari peran eksekusi untuk fungsi tersebut.](lambda-intro-execution-role.md) Misalnya, `lambda-role`.

   ```
   dotnet lambda deploy-function MyFunction --function-role lambda-role
   ```

   Untuk informasi selengkapnya tentang Amazon.Lambda.Tools .NET Global Tool, lihat Extensions [AWS for](https://github.com/aws/aws-extensions-for-dotnet-cli) .NET CLI repository on. GitHub

1. Memanggil fungsi.

   ```
   dotnet lambda invoke-function MyFunction --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
   ```

1. Hapus fungsi Lambda.

   ```
   dotnet lambda delete-function MyFunction
   ```

## Menggunakan gambar dasar alternatif dengan klien antarmuka runtime
<a name="csharp-image-clients"></a>

Jika Anda menggunakan gambar [dasar khusus OS atau gambar dasar](images-create.md#runtimes-images-provided) alternatif, Anda harus menyertakan klien antarmuka runtime dalam gambar Anda. Klien antarmuka runtime memperluas[API runtime](runtimes-api.md), yang mengelola interaksi antara Lambda dan kode fungsi Anda.

Contoh berikut menunjukkan bagaimana membangun image container untuk.NET menggunakan image AWS non-base, dan bagaimana menambahkan [Amazon.Lambda. RuntimeSupport ](https://github.com/aws/aws-lambda-dotnet/blob/master/Libraries/src/Amazon.Lambda.RuntimeSupport/README.md#using-amazonlambdaruntimesupport-as-a-class-library)paket, yang merupakan klien antarmuka runtime Lambda untuk.NET. Contoh Dockerfile menggunakan gambar dasar Microsoft .NET 8.

### Prasyarat
<a name="dotnet-csharp-alt-prerequisites"></a>

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
+ [.NET SDK](https://dotnet.microsoft.com/download) — Langkah-langkah berikut menggunakan gambar dasar.NET 9. Pastikan versi.NET Anda cocok dengan versi gambar dasar yang Anda tentukan di Dockerfile Anda.
+ [Docker](https://docs.docker.com/get-docker) (versi minimum 25.0.0)
+ Plugin [buildx Docker](https://github.com/docker/buildx/blob/master/README.md).

### Membuat dan menyebarkan gambar menggunakan gambar dasar alternatif
<a name="dotnet-alt-create"></a>

1. Instal paket [Amazon.Lambda.Templates.](https://github.com/aws/aws-lambda-dotnet#dotnet-cli-templates) NuGet 

   ```
   dotnet new install Amazon.Lambda.Templates
   ```

1. Buat proyek.NET menggunakan `lambda.CustomRuntimeFunction` template. Template ini termasuk [Amazon.Lambda. RuntimeSupport](https://github.com/aws/aws-lambda-dotnet/blob/master/Libraries/src/Amazon.Lambda.RuntimeSupport/README.md#using-amazonlambdaruntimesupport-as-a-class-library)paket.

   ```
   dotnet new lambda.CustomRuntimeFunction --name MyFunction --region us-east-1
   ```

1. 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. `Main`Metode ini adalah titik masuk untuk proses fungsi. `Main`Metode ini membungkus fungsi handler dalam pembungkus yang dapat digunakan bootstrap. Untuk informasi selengkapnya, lihat [Menggunakan Amazon.Lambda. RuntimeSupport sebagai pustaka kelas](https://github.com/aws/aws-lambda-dotnet/blob/master/Libraries/src/Amazon.Lambda.RuntimeSupport/README.md#using-amazonlambdaruntimesupport-as-a-class-library) di GitHub repositori.
   + **MyFunction.csproj** — [File proyek.NET, yang mencantumkan file](https://learn.microsoft.com/en-us/dotnet/core/project-sdk/overview#project-files) dan rakitan yang terdiri dari aplikasi Anda.
   + **README.md** - File ini berisi informasi lebih lanjut tentang fungsi Lambda sampel.

1. 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.  
**Example 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"
   }
   ```

1. Buat Dockerfile di direktori. `MyFunction/src/MyFunction` Contoh berikut Dockerfile menggunakan gambar dasar Microsoft .NET bukan gambar [AWS dasar](#csharp-image-base).
   + Atur `FROM` properti ke pengenal gambar dasar. Gambar dasar dan `TargetFramework` dalam `MyFunction.csproj` file harus menggunakan versi.NET yang sama.
   + 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](https://docs.docker.com/reference/dockerfile/#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.  
**Example Dockerfile**  

   ```
   # You can also pull these images from DockerHub amazon/aws-lambda-dotnet:8
   FROM mcr.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"]
   ```

1. [Instal ekstensi Amazon.Lambda.Tools .NET Global Tools.](https://aws.amazon.com/blogs/developer/net-core-global-tools-for-aws/)

   ```
   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
   ```

1. Gunakan Amazon.Lambda.Tools untuk membuat image Docker, mendorongnya ke repositori Amazon ECR baru, dan menerapkan fungsi Lambda.

   [Untuk`--function-role`, tentukan nama peran—bukan Nama Sumber Daya Amazon (ARN) —dari peran eksekusi untuk fungsi tersebut.](lambda-intro-execution-role.md) Misalnya, `lambda-role`.

   ```
   dotnet lambda deploy-function MyFunction --function-role lambda-role
   ```

   [Untuk informasi selengkapnya tentang ekstensi Amazon.Lambda.Tools .NET CLI, lihat ekstensi untuk repositori.NET CLI di AWS .](https://github.com/aws/aws-extensions-for-dotnet-cli) GitHub

1. 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
   ```

1. Hapus fungsi Lambda.

   ```
   dotnet lambda delete-function MyFunction
   ```