Compilez votre projet C#/.NET localement, empaquetez-le dans un fichier ZIP, puis déployez-le sur Function Compute via la console ou Serverless Devs.
Bibliothèque de dépendances
Function Compute fournit la bibliothèque Aliyun.Serverless.Core pour le runtime C#. Elle permet de définir l'interface du handler, l'objet de contexte ainsi que les types associés.
Récupérez cette bibliothèque depuis NuGet et ajoutez-la au fichier <YourProjectName>.csproj :
<ItemGroup>
<PackageReference Include="Aliyun.Serverless.Core" Version="1.0.1" />
<PackageReference Include="Aliyun.Serverless.Core.Http" Version="1.0.3" />
</ItemGroup>
Runtimes pris en charge
|
Version .NET |
Valeur de l'indicateur -f |
|
.NET Core 3.1 |
|
|
.NET Core 2.1 |
|
Choisir une méthode de déploiement
|
Méthode |
Cas d'usage recommandé |
|
Déploiements ponctuels, prise en main de la plateforme |
|
|
Déploiements répétables, pipelines CI/CD |
Déployer avec la CLI .NET Core
La CLI .NET Core permet de créer des applications .NET multiplateformes et de les déployer sur Function Compute. Pour les instructions d'installation, consultez .NET.
Étape 1 : Créer un projet .NET
-
Créez un projet console :
Paramètre
Description
new consoleUtilise le modèle d'application console
-o HelloFcAppCrée un dossier
HelloFcApppour le projet-f netcoreapp3.1Cible .NET Core 3.1. Utilisez
netcoreapp2.1pour .NET Core 2.1dotnet new console -o HelloFcApp -f netcoreapp3.1Cette commande génère la structure suivante :
HelloFcApp ├── HelloFcApp.csproj # Project configuration: target framework and dependencies ├── Program.cs # Handler code └── obj # Intermediate build files -
Mettez à jour le fichier
HelloFcApp.csprojpour inclure la bibliothèque de dépendances Function Compute :<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> -
Remplacez le contenu du fichier
Program.cspar votre code de handler. L'exemple ci-dessous utilise un handler d'événement de type Stream. Pour les autres types de handlers, reportez-vous à Handlers.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){} } }
Étape 2 : Compiler et empaqueter
-
Compilez le projet et écrivez la sortie dans le répertoire
target:cd HelloFcApp && dotnet publish -c Release -o ./target -
Empaquetez le résultat de la compilation dans un fichier ZIP :
ImportantExécutez la commande
zip -r HelloFcApp.zip *depuis l'intérieur du répertoiretarget, et non depuis son parent. Si vous compressez le dossiertargetlui-même au lieu de son contenu, Function Compute ne trouvera pasHelloFcApp.dllau chemin racine attendu, ce qui empêchera le démarrage de la fonction.cd target && zip -r HelloFcApp.zip *Le fichier ZIP contient les éléments suivants :
HelloFcApp.zip ├── Aliyun.Serverless.Core.dll ├── HelloFcApp.deps.json ├── HelloFcApp.dll ├── HelloFcApp.pdb ├── HelloFcApp.runtimeconfig.json └── Microsoft.Extensions.Logging.Abstractions.dll
Étape 3 : Déployer et vérifier
Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, cliquez sur Functions.
Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur Create Function.
-
Sur la page Create Function, sélectionnez Event Function, configurez les paramètres suivants, puis cliquez sur Create. Une fois la fonction créée, l'onglet Code de la page Function Details s'ouvre automatiquement.
Paramètre
Valeur
Runtime
.NET Core 3.1
Code Upload Method
Upload ZIP — sélectionnez le fichier
HelloFcApp.zipobtenu à l'étape 2Handler
HelloFcApp::Example.Hello::StreamHandler— pour le format du handler, consultez Handlers -
Dans l'onglet Code, cliquez sur Test Function. Une exécution réussie retourne le résultat suivant :
{ "key1": "value1", "key2": "value2", "key3": "value3" }Pour consulter les journaux d'exécution, cliquez sur l'onglet Log Output.
Déployer avec Serverless Devs
Serverless Devs automatise les étapes de compilation et de déploiement, ce qui le rend adapté aux workflows répétables et aux pipelines CI/CD.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Déployer et vérifier
-
Initialisez le projet :
s initLorsque vous y êtes invité, sélectionnez Alibaba Cloud comme fournisseur cloud, choisissez un modèle .NET, puis spécifiez le runtime, la région et le nom de la fonction.
-
Accédez au répertoire du projet :
cd start-fc3-dotnetcoreLe projet présente la structure suivante :
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 -
Déployez le projet :
s deployUn déploiement réussi affiche la configuration de la fonction :
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 -
Testez la fonction :
sudo s invokeUne invocation réussie retourne le résultat suivant :
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