オンプレミスでプログラムをコンパイルできます。. NET環境でプログラムをZIPパッケージにパッケージ化し、Function ComputeコンソールまたはServerless Devsを使用してコードパッケージをアップロードします。 次に、関数をテストして、コードが期待どおりに実行されることを確認できます。
C# ランタイム環境の依存関係ライブラリ
Function Computeは、C# ランタイム用のAliyun.Serverless.Core依存関係ライブラリを提供します。 ライブラリを使用して、ハンドラーインターフェイスやコンテキストオブジェクトなどの情報を定義できます。
上記の依存関係ライブラリをNuGetパッケージから取得し、コードディレクトリの <YourProjectName>.csprojファイルに追加します。 次のサンプルコードに例を示します。
<ItemGroup>
<PackageReference Include="Aliyun.Serverless.Core" Version="1.0.1" />
<PackageReference Include="Aliyun.Serverless.Core.Http" Version="1.0.3" />
</ItemGroup>
を使用します。NET Core CLIを使用してプログラムをコンパイルおよびデプロイする
A. NET Core展開パッケージには、関数を使用してコンパイルされるアセンブリと、すべてのアセンブリの依存関係が含まれている必要があります。 使用できます。. NET Core CLIを使用してプログラムをコンパイルおよびデプロイします。 を使用する場合。. NET Core CLIを作成できます。プラットフォーム間でのNETベースのFunction Computeアプリケーション。 詳細については、「. NET.」をご参照ください。
ステップ1: 作成します。NETプロジェクト
次のコマンドを実行して、NETプロジェクト:
dotnet new console -o HelloFcApp -f netcoreapp3.1
次の項目は、上記のコマンドのパラメーターを示しています。
new console: コンソール内のアプリケーションテンプレート。
-o | -- output: プロジェクトの出力パス。 この例では、プロジェクトコンテンツを格納するためにHelloFcAppディレクトリが作成されています。
-f | -- framework: . NETバージョン 実行時のバージョンが NET Core 3.1で、パラメーターをnetcoreapp3.1に設定します。 実行時のバージョンが . NET Core 2.1で、パラメーターをnetcoreapp2.1に設定します。
次のサンプルコードは、プロジェクトディレクトリ構造の例を示します。
HelloFcApp ├── HelloFcApp.csproj ├── Program.cs └── obj
プロジェクトディレクトリで、実際の状況に基づいてファイルのパラメーター設定を変更します。
HelloFcApp.csprojファイル
の構成ファイルです。. NETプロジェクト このファイルには、ターゲットフレームワークやアセンブリの依存関係ライブラリなど、プロジェクトに関する情報が記録されます。 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>
Program.csファイル
ハンドラーのコード。The code of the handler. 詳細は、「ハンドラ」をご参照ください。 このトピックでは、Stream型のイベントハンドラーを使用します。
System.IOを使用した
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){} } }
ステップ2: コンパイルします。NETプロジェクト
次のコマンドを実行してプロジェクトディレクトリに移動し、プロジェクトをコンパイルして結果をtargetディレクトリに出力します。
cd HelloFcApp && dotnet publish -c Release -o ./target
次のコマンドを実行して、targetディレクトリに移動し、プロジェクトをパッケージ化します。
cd target && zip -r HelloFcApp.zip *
次のサンプルコードは、ZIPパッケージの構造の例を示しています。
HelloFcApp.zip ├── Aliyun.Serverless.Core.dll ├── HelloFcApp.deps.json ├── HelloFcApp.dll ├── HelloFcApp.pdb ├── HelloFcApp.runtimeconfig.json └── Microsoft.Extensions.Logging.Abstractions.dll
重要HelloFcApp.dllファイルとその他のファイルがZIPファイルのルートディレクトリにパッケージ化されていることを確認します。
手順3: プロジェクトコードをデプロイして検証を実行する
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[関数] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、[関数の作成] をクリックします。
On the関数の作成ページを選択します。イベント関数パラメーターを設定し、作成.
次の項目は、[関数の作成] ページで設定する必要があるパラメーターについて説明します。 他のパラメーターにはデフォルト値を使用します。
関数の作成後、[関数の詳細] ページの [コード] タブにリダイレクトされます。
機能の詳細] ページのコード[タブで、テスト機能 をクリックします。
関数が正常に実行されると、次の結果が返されます。
{ "key1": "value1", "key2": "value2", "key3": "value3" }
[ログ出力] タブをクリックして、ログに関する情報を表示することもできます。
Serverless Devsを使用したコードパッケージのコンパイルとデプロイ
あなたが始める前に
手順
次のコマンドを実行して、プロジェクトを初期化します。
s init
Alibaba Cloudをクラウドベンダー、テンプレート、ランタイム、アプリケーションがデプロイされているリージョン、および関数名として設定します。
次のコマンドを実行して、プロジェクトのディレクトリに移動します。
cd start-fc3-dotnetcore
次のコードスニペットは、ディレクトリ構造を示しています。
start-fc3-dotnetcore ├── HelloFcApp │ ├── bin │ ├── obj │ ├── target │ ├── HelloWorldApp.csproj │ └── Program.cs ├── readme └── s.yaml
次のコマンドを実行して、プロジェクトをデプロイします。
s deploy
サンプルコマンド出力:
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
を実行します。Run the
sudo s invoke
コマンドを実行して、関数をテストします。サンプルコマンド出力:
[hello-world-app] の [invoke] の
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