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 untuk meng-host aplikasi ASP.NET ringan. Anda dapat membangun dan menyebarkan aplikasi ASP.NET menggunakan paket. Amazon.Lambda.AspNetCoreServer NuGet Di bagian ini, Anda mempelajari cara menerapkan API web ASP.NET 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

Menyebarkan API Web ASP.NET ke Lambda

Untuk menerapkan API web menggunakan ASP.NET, Anda dapat menggunakan template .NET Lambda untuk membuat proyek API web baru. Gunakan perintah berikut untuk menginisialisasi proyek API web ASP.NET 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 akan membentuk bagian dari string handler yang digunakan Lambda untuk memanggil fungsi Anda. FunctionHandlerAsyncMetode ini mengubah payload acara masuk menjadi format ASP.NET yang benar dan respons ASP.NET 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. AWS CloudFormation

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

Saat Anda menerapkan API menggunakan dotnet lambda deploy-serverless perintah, AWS 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 AWS CloudFormation Pengguna untuk mempelajari lebih lanjut.

Menerapkan API minimal ASP.NET ke Lambda

Untuk menerapkan API minimal ASP.NET 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. AWS CloudFormation

cd MinimalApiOnLambda/src/MinimalApiOnLambda dotnet lambda deploy-serverless