Compile seu projeto C#/.NET localmente, empacote-o em um arquivo ZIP e implante-o no Function Compute usando o console ou o Serverless Devs.
Biblioteca de dependências
O Function Compute fornece a biblioteca Aliyun.Serverless.Core para o runtime C#. Utilize-a para definir a interface do handler, o objeto de contexto e os tipos relacionados.
Obtenha a biblioteca no NuGet e adicione-a ao arquivo <YourProjectName>.csproj:
<ItemGroup>
<PackageReference Include="Aliyun.Serverless.Core" Version="1.0.1" />
<PackageReference Include="Aliyun.Serverless.Core.Http" Version="1.0.3" />
</ItemGroup>
Runtimes suportados
|
Versão do .NET |
**Valor da flag |
|
.NET Core 3.1 |
|
|
.NET Core 2.1 |
|
Escolha um método de implantação
|
Método |
Mais indicado para |
|
Implantações pontuais e aprendizado da plataforma |
|
|
Implantações recorrentes e pipelines de CI/CD |
Implante com o .NET Core CLI
Utilize o .NET Core CLI para criar aplicações .NET multiplataforma e implantá-las no Function Compute. Para instruções de instalação, consulte .NET.
Etapa 1: Crie um projeto .NET
-
Crie um novo projeto de console:
Parâmetro
Descrição
new consoleUsa o modelo de aplicação de console
-o HelloFcAppCria o diretório
HelloFcApppara o projeto-f netcoreapp3.1Define como alvo o .NET Core 3.1. Use
netcoreapp2.1para .NET Core 2.1dotnet new console -o HelloFcApp -f netcoreapp3.1O comando cria a seguinte estrutura:
HelloFcApp ├── HelloFcApp.csproj # Project configuration: target framework and dependencies ├── Program.cs # Handler code └── obj # Intermediate build files -
Atualize o arquivo
HelloFcApp.csprojpara incluir a biblioteca de dependências do 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> -
Substitua o conteúdo de
Program.cspelo seu código de handler. O exemplo abaixo utiliza um handler de eventos do tipo Stream. Para outros tipos de handler, consulte 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){} } }
Etapa 2: Compile e empacote
-
Compile o projeto e grave a saída no diretório
target:cd HelloFcApp && dotnet publish -c Release -o ./target -
Empacote a saída compilada em um arquivo ZIP:
ImportanteExecute
zip -r HelloFcApp.zip *de dentro do diretóriotarget, e não de seu diretório pai. Se você compactar a pastatargetem vez de seu conteúdo, o Function Compute não conseguirá localizar o arquivoHelloFcApp.dllno caminho raiz esperado, e a função falhará ao iniciar.cd target && zip -r HelloFcApp.zip *O arquivo ZIP contém os seguintes arquivos:
HelloFcApp.zip ├── Aliyun.Serverless.Core.dll ├── HelloFcApp.deps.json ├── HelloFcApp.dll ├── HelloFcApp.pdb ├── HelloFcApp.runtimeconfig.json └── Microsoft.Extensions.Logging.Abstractions.dll
Etapa 3: Implante e verifique
Faça login no console do Function Compute. No painel de navegação à esquerda, clique em Functions.
Na barra de navegação superior, selecione uma região. Na página Functions, clique em Create Function.
-
Na página Create Function, selecione Event Function, configure os parâmetros a seguir e clique em Create. Após a criação da função, a aba Code da página Function Details será aberta automaticamente.
Parâmetro
Valor
Runtime
.NET Core 3.1
Code Upload Method
Upload ZIP — selecione o arquivo
HelloFcApp.zipda Etapa 2Handler
HelloFcApp::Example.Hello::StreamHandler— para o formato do handler, consulte Handlers -
Na aba Code, clique em Test Function. Uma execução bem-sucedida retorna:
{ "key1": "value1", "key2": "value2", "key3": "value3" }Para visualizar os logs de execução, clique na aba Log Output.
Implante com o Serverless Devs
O Serverless Devs automatiza as etapas de compilação e implantação, sendo ideal para fluxos de trabalho recorrentes e pipelines de CI/CD.
Pré-requisitos
Antes de começar, certifique-se de ter:
Implante e verifique
-
Inicialize o projeto:
s initQuando solicitado, selecione Alibaba Cloud como provedor de nuvem, escolha um modelo .NET e especifique o runtime, a região e o nome da função.
-
Acesse o diretório do projeto:
cd start-fc3-dotnetcoreO projeto possui a seguinte estrutura:
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 -
Implante o projeto:
s deployUma implantação bem-sucedida exibe a configuração da função:
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 -
Teste a função:
sudo s invokeUma invocação bem-sucedida retorna:
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