C#/.NET projenizi yerel ortamda derleyin, ZIP dosyası olarak paketleyin ve konsol veya Serverless Devs kullanarak Function Compute'a dağıtın.
Bağımlılık kitaplığı
Function Compute, C# çalışma zamanı için Aliyun.Serverless.Core kitaplığını sağlar. İşleyici arayüzünü, bağlam nesnesini ve ilgili türleri tanımlamak için bu kitaplığı kullanın.
Kitaplığı NuGet üzerinden edinin ve <YourProjectName>.csproj dosyanıza ekleyin:
<ItemGroup>
<PackageReference Include="Aliyun.Serverless.Core" Version="1.0.1" />
<PackageReference Include="Aliyun.Serverless.Core.Http" Version="1.0.3" />
</ItemGroup>
Desteklenen çalışma zamanları
|
|
|
|
|
|
|
|
|
Dağıtım yöntemi seçme
|
|
|
|
|
|
|
|
.NET Core CLI ile dağıtım
Platformlar arası .NET uygulamaları oluşturmak ve bunları Function Compute'a dağıtmak için .NET Core CLI'yı kullanın. Kurulum talimatları için bkz. .NET.
Adım 1: .NET projesi oluşturma
-
Yeni bir konsol projesi oluşturun:
Parametre
Açıklamanew console
Konsol uygulaması şablonunu kullanır-o HelloFcApp
Proje için birHelloFcAppdizini oluşturur-f netcoreapp3.1
.NET Core 3.1'i hedefler. .NET Core 2.1 içinnetcoreapp2.1kullanındotnet new console -o HelloFcApp -f netcoreapp3.1Komut aşağıdaki yapıyı oluşturur:
HelloFcApp ├── HelloFcApp.csproj # Project configuration: target framework and dependencies ├── Program.cs # Handler code └── obj # Intermediate build files -
Function Compute bağımlılık kitaplığını içerecek şekilde
HelloFcApp.csprojdosyasını güncelleyin:<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Aliyun.Serverless.Core" Version="1.0.1" /> <PackageReference Include="Aliyun.Serverless.Core.Http" Version="1.0.3" /> </ItemGroup> </Project> -
Program.csdosyasının içeriğini işleyici kodunuzla değiştirin. Aşağıdaki örnekte Stream türünde bir olay işleyicisi kullanılmaktadır. Diğer işleyici türleri için bkz. İşleyiciler.using System.IO; using System.Threading.Tasks; using Aliyun.Serverless.Core; using Microsoft.Extensions.Logging; namespace Example { public class Hello { public async Task<Stream> StreamHandler(Stream input, IFcContext context) { IFcLogger logger = context.Logger; logger.LogInformation("Handle request: {0}", context.RequestId); MemoryStream copy = new MemoryStream(); await input.CopyToAsync(copy); copy.Seek(0, SeekOrigin.Begin); return copy; } static void Main(string[] args){} } }
Adım 2: Derleme ve paketleme
-
Projeyi derleyin ve çıktıyı
targetdizinine yazın:cd HelloFcApp && dotnet publish -c Release -o ./target -
Derlenmiş çıktıyı bir ZIP dosyasında paketleyin:
Önemlizip -r HelloFcApp.zip *komutunu üst dizinden değil,targetdizininin içinde çalıştırın. İçerikler yerinetargetklasörünün kendisini zip'lerseniz Function Compute, beklenen kök yoldaHelloFcApp.dlldosyasını bulamaz ve işlev başlatılamaz.cd target && zip -r HelloFcApp.zip *ZIP dosyası aşağıdaki dosyaları içerir:
HelloFcApp.zip ├── Aliyun.Serverless.Core.dll ├── HelloFcApp.deps.json ├── HelloFcApp.dll ├── HelloFcApp.pdb ├── HelloFcApp.runtimeconfig.json └── Microsoft.Extensions.Logging.Abstractions.dll
Adım 3: Dağıtım ve doğrulama
Function Compute konsoluna giriş yapın. Sol gezinme bölmesinde Functions öğesini tıklayın.
Üst gezinme çubuğunda bir bölge seçin. Functions sayfasında Create Function öğesini tıklayın.
-
Create Function sayfasında Event Function seçeneğini belirleyin, aşağıdaki parametreleri yapılandırın ve Create öğesini tıklayın. İşlev oluşturulduktan sonra Function Details sayfasının Code sekmesi otomatik olarak açılır.
Parametre
Değer
Runtime
.NET Core 3.1
Code Upload Method
Upload ZIP — 2. AdımdakiHelloFcApp.zipdosyasını seçin
HandlerHelloFcApp::Example.Hello::StreamHandler— işleyici biçimi için bkz. İşleyiciler -
Code sekmesinde Test Function öğesini tıklayın. Başarılı bir çalıştırma şu sonucu döndürür:
{ "key1": "value1", "key2": "value2", "key3": "value3" }Çalıştırma günlüklerini görüntülemek için Log Output sekmesini tıklayın.
Serverless Devs ile dağıtım
Serverless Devs, derleme ve dağıtım adımlarını otomatikleştirerek tekrarlanabilir iş akışları ve CI/CD işlem hatları için uygun hale getirir.
Ön koşullar
Başlamadan önce aşağıdakileri yaptığınızdan emin olun:
Dağıtım ve doğrulama
-
Projeyi başlatın:
s initİstendiğinde cloud provider olarak Alibaba Cloud'u seçin, bir .NET şablonu belirleyin ve çalışma zamanını, bölgeyi ve işlev adını girin.
-
Proje dizinine gidin:
cd start-fc3-dotnetcoreProjenin yapısı aşağıdaki gibidir:
start-fc3-dotnetcore ├── HelloFcApp │ ├── bin # Compiled binaries │ ├── obj # Intermediate build files │ ├── target # Publish output │ ├── HelloWorldApp.csproj # Project configuration │ └── Program.cs # Handler code ├── readme └── s.yaml # Serverless Devs configuration -
Projeyi dağıtın:
s deployBaşarılı bir dağıtımda işlev yapılandırması çıktılanır:
s.yaml: /root/start-fc3-dotnetcore/s.yaml Downloading[/v3/packages/fc3/zipball/0.0.24]... Download fc3 successfully Steps for [deploy] of [hello-world-app] ==================== Microsoft (R) Build Engine version 16.7.3+2f374e28e for .NET Copyright (C) Microsoft Corporation. All rights reserved. Determining projects to restore... Restored /root/start-fc3-dotnetcore/HelloWorldApp/HelloWorldApp.csproj (in 154 ms). HelloWorldApp -> /root/start-fc3-dotnetcore/HelloWorldApp/bin/Release/netcoreapp3.1/HelloWorldApp.dll HelloWorldApp -> /root/start-fc3-dotnetcore/HelloWorldApp/target/ [hello_world] completed (2.66s) Result for [deploy] of [hello-world-app] ==================== region: cn-hangzhou description: hello world by serverless devs functionName: start-dotnetcore-p6jp handler: HelloWorldApp::Example.Hello::StreamHandler internetAccess: true memorySize: 128 role: runtime: dotnetcore3.1 timeout: 10 A complete log of this run can be found in: /root/.s/logs/0327105651 -
İşlevi test edin:
sudo s invokeBaşarılı bir çağrı şu sonucu döndürür:
Steps for [invoke] of [hello-world-app] ==================== ========= FC invoke Logs begin ========= FunctionCompute dotnetcore3.1 runtime inited. FC Invoke Start RequestId: 1-6603951e-157f3f32-7fe6f248d7d0 hello world! FC Invoke End RequestId: 1-6603951e-157f3f32-7fe6f248d7d0 Duration: 117.33 ms, Billed Duration: 118 ms, Memory Size: 128 MB, Max Memory Used: 13.16 MB ========= FC invoke Logs end ========= Invoke instanceId: c-6603951e-15f440b6-2df37e4bf046 Code Checksum: 13273801077182424526 Qualifier: LATEST RequestId: 1-6603951e-157f3f32-7fe6f248d7d0 Invoke Result: hello world! ✔ [hello_world] completed (0.72s) A complete log of this run can be found in: /root/.s/logs/0327114013