View a markdown version of this page

Menyebarkan aplikasi ASP.NET - AWS Lambda

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

Menyebarkan aplikasi ASP.NET

Selain menghosting fungsi berbasis acara, Anda juga dapat menggunakan.NET dengan Lambda Event Functions untuk meng-host aplikasi ringan. ASP.NET Anda dapat membangun dan menyebarkan ASP.NET aplikasi menggunakan Amazon.Lambda.AspNetCoreServer NuGet paket. Di bagian ini, Anda mempelajari cara menerapkan API ASP.NET web ke Lambda menggunakan tooling.NET Lambda CLI.

Prasyarat

.NET 8 SDK

Instal .NET 8 SDK dan ASP.NET Core Runtime.

Amazon.Lambda.Tools

Untuk membuat fungsi Lambda Anda, Anda menggunakan Amazon.Lambda.Toolsekstensi.NET Global Tools. Untuk menginstalAmazon.Lambda.Tools, jalankan perintah berikut:

dotnet tool install -g Amazon.Lambda.Tools

Untuk informasi selengkapnya tentang Amazon.Lambda.Tools ekstensi.NET CLI, lihat AWS Ekstensi untuk repositori.NET CLI di. GitHub

Amazon.Lambda.Templates

Untuk menghasilkan kode fungsi Lambda Anda, gunakan paket. Amazon.Lambda.Templates NuGet Untuk menginstal paket template ini, jalankan perintah berikut:

dotnet new --install Amazon.Lambda.Templates

Menerapkan API ASP.NET Web ke Lambda

Untuk menggunakan API web ASP.NET, Anda dapat menggunakan template .NET Lambda untuk membuat proyek API web baru. Gunakan perintah berikut untuk menginisialisasi proyek API ASP.NET web baru. Dalam perintah contoh, kami memberi nama proyekAspNetOnLambda.

dotnet new serverless.AspNetCoreWebAPI -n AspNetOnLambda

Perintah ini membuat file dan direktori berikut di direktori proyek Anda.

. └── AspNetOnLambda ├── src │   └── AspNetOnLambda │   ├── AspNetOnLambda.csproj │   ├── Controllers │   │   └── ValuesController.cs │   ├── LambdaEntryPoint.cs │   ├── LocalEntryPoint.cs │   ├── Readme.md │   ├── Startup.cs │   ├── appsettings.Development.json │   ├── appsettings.json │   ├── aws-lambda-tools-defaults.json │   └── serverless.template └── test └── AspNetOnLambda.Tests ├── AspNetOnLambda.Tests.csproj ├── SampleRequests │   └── ValuesController-Get.json ├── ValuesControllerTests.cs └── appsettings.json

Ketika Lambda memanggil fungsi Anda, titik masuk yang digunakannya adalah file. LambdaEntryPoint.cs File yang dibuat oleh template.NET Lambda berisi kode berikut.

namespace AspNetOnLambda; public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction { protected override void Init(IWebHostBuilder builder) { builder .UseStartup≪Startup≫(); } protected override void Init(IHostBuilder builder) { } }

Titik masuk yang digunakan oleh Lambda harus mewarisi dari salah satu dari tiga kelas dasar dalam paket. Amazon.Lambda.AspNetCoreServer Ketiga kelas dasar ini adalah:

  • APIGatewayProxyFunction

  • APIGatewayHttpApiV2ProxyFunction

  • ApplicationLoadBalancerFunction

Kelas default yang digunakan saat Anda membuat LambdaEntryPoint.cs file menggunakan template.NET Lambda yang disediakan adalah. APIGatewayProxyFunction Kelas dasar yang Anda gunakan dalam fungsi Anda bergantung pada lapisan API mana yang berada di depan fungsi Lambda Anda.

Masing-masing dari tiga kelas dasar berisi metode publik bernamaFunctionHandlerAsync. Nama metode ini merupakan bagian dari string handler yang digunakan Lambda untuk memanggil fungsi Anda. FunctionHandlerAsyncMetode ini mengubah payload peristiwa masuk ke ASP.NET format yang benar dan ASP.NET respons kembali ke muatan respons Lambda. Untuk AspNetOnLambda proyek contoh yang ditampilkan, string handler adalah sebagai berikut.

AspNetOnLambda::AspNetOnLambda.LambdaEntryPoint::FunctionHandlerAsync

Untuk menerapkan API ke Lambda, jalankan perintah berikut untuk menavigasi ke direktori yang berisi file kode sumber Anda dan menerapkan fungsi Anda menggunakan. CloudFormation

cd AspNetOnLambda/src/AspNetOnLambda dotnet lambda deploy-serverless
Tip

Saat Anda menerapkan API menggunakan dotnet lambda deploy-serverless perintah, CloudFormation beri nama pada fungsi Lambda Anda berdasarkan nama tumpukan yang Anda tentukan selama penerapan. Untuk memberikan nama khusus pada fungsi Lambda Anda, edit serverless.template file untuk menambahkan FunctionName properti ke sumber daya. AWS::Serverless::Function Lihat Jenis nama di Panduan CloudFormation Pengguna untuk mempelajari lebih lanjut.

Menerapkan API ASP.NET minimal ke Lambda

Untuk menerapkan API ASP.NET minimal ke Lambda, Anda dapat menggunakan template.NET Lambda untuk membuat proyek API minimal yang baru. Gunakan perintah berikut untuk menginisialisasi proyek API minimal yang baru. Dalam contoh ini, kami memberi nama proyekMinimalApiOnLambda.

dotnet new serverless.AspNetCoreMinimalAPI -n MinimalApiOnLambda

Perintah membuat file dan direktori berikut di direktori proyek Anda.

└── MinimalApiOnLambda └── src └── MinimalApiOnLambda ├── Controllers │   └── CalculatorController.cs ├── MinimalApiOnLambda.csproj ├── Program.cs ├── Readme.md ├── appsettings.Development.json ├── appsettings.json ├── aws-lambda-tools-defaults.json └── serverless.template

Program.csFile berisi kode berikut.

var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Add AWS Lambda support. When application is run in Lambda Kestrel is swapped out as the web server with Amazon.Lambda.AspNetCoreServer. This // package will act as the webserver translating request and responses between the Lambda event source and ASP.NET Core. builder.Services.AddAWSLambdaHosting(LambdaEventSource.RestApi); var app = builder.Build(); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.MapGet("/", () => "Welcome to running ASP.NET Core Minimal API on AWS Lambda"); app.Run();

Untuk mengonfigurasi API minimal agar berjalan di Lambda, Anda mungkin perlu mengedit kode ini agar permintaan dan tanggapan antara Lambda dan ASP.NET Core diterjemahkan dengan benar. Secara default, fungsi dikonfigurasi untuk sumber peristiwa REST API. Untuk HTTP API atau penyeimbang beban aplikasi, ganti (LambdaEventSource.RestApi) dengan salah satu opsi berikut:

  • (LambdaEventSource.HttpAPi)

  • (LambdaEventSource.ApplicationLoadBalancer)

Untuk menerapkan API minimal Anda ke Lambda, jalankan perintah berikut untuk menavigasi ke direktori yang berisi file kode sumber Anda dan menerapkan fungsi Anda menggunakan. CloudFormation

cd MinimalApiOnLambda/src/MinimalApiOnLambda dotnet lambda deploy-serverless