C#/.NET プロジェクトをローカルでコンパイルし、ZIP ファイルにパッケージ化して、コンソールまたは Serverless Devs を使用して Function Compute にデプロイします。
依存関係ライブラリ
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 バージョン | -f フラグの値 |
|---|---|
| .NET Core 3.1 | netcoreapp3.1 |
| .NET Core 2.1 | netcoreapp2.1 |
デプロイ方法の選択
| メソッド | 最適な用途 |
|---|---|
| .NET Core CLI + コンソール | 1 回限りのデプロイ、プラットフォームの学習 |
| Serverless Devs | 反復可能なデプロイ、CI/CD パイプライン |
.NET Core CLI を使用したデプロイ
.NET Core CLI を使用して、クロスプラットフォームの .NET アプリケーションをビルドし、Function Compute にデプロイします。インストール手順については、「.NET」をご参照ください。
ステップ 1: .NET プロジェクトの作成
新しいコンソールプロジェクトを作成します:
パラメーター 説明 new consoleコンソールアプリケーションテンプレートを使用します -o HelloFcAppプロジェクト用に HelloFcAppディレクトリを作成します-f netcoreapp3.1.NET Core 3.1 をターゲットとします。.NET Core 2.1 の場合は netcoreapp2.1を使用しますdotnet new console -o HelloFcApp -f netcoreapp3.1このコマンドは、次の構造を作成します:
HelloFcApp ├── HelloFcApp.csproj # プロジェクト設定:ターゲットフレームワークと依存関係 ├── Program.cs # ハンドラコード └── obj # 中間ビルドファイルFunction Compute の依存関係ライブラリを含めるように
HelloFcApp.csprojを更新します:<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の内容をハンドラコードに置き換えます。次の例では、ストリームタイプのイベントハンドラを使用しています。他のハンドラタイプについては、「ハンドラ」をご参照ください。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: コンパイルとパッケージ化
プロジェクトをコンパイルし、出力を
targetディレクトリに書き込みます:cd HelloFcApp && dotnet publish -c Release -o ./targetコンパイルされた出力を ZIP ファイルにパッケージ化します:
重要zip -r HelloFcApp.zip *は、親ディレクトリからではなく、targetディレクトリ内から実行してください。targetフォルダ自体をその内容ではなく zip 化すると、Function Compute は期待されるルートパスでHelloFcApp.dllを見つけられず、関数の起動に失敗します。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
ステップ 3: デプロイと検証
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数] をクリックします。
上部のナビゲーションバーでリージョンを選択します。[関数] ページで、[関数の作成] をクリックします。
[関数の作成] ページで [イベント関数] を選択し、次のパラメーターを設定して [作成] をクリックします。関数が作成されると、[関数の詳細] ページの [コード] タブが自動的に開きます。
パラメーター 値 Runtime .NET Core 3.1 Code Upload Method Upload ZIP — ステップ 2 で作成した HelloFcApp.zipファイルを選択しますHandler HelloFcApp::Example.Hello::StreamHandler— ハンドラのフォーマットについては、「Handlers[コード] タブで、[関数のテスト] をクリックします。実行が成功すると、次が返されます:
{ "key1": "value1", "key2": "value2", "key3": "value3" }実行ログを表示するには、[ログ出力] タブをクリックします。
Serverless Devs を使用したデプロイ
Serverless Devs はビルドとデプロイのステップを自動化するため、反復可能なワークフローや CI/CD パイプラインに適しています。
前提条件
開始する前に、次のものが揃っていることを確認してください:
デプロイと検証
プロジェクトを初期化します:
s initプロンプトが表示されたら、クラウドプロバイダーとして Alibaba Cloud を選択し、.NET テンプレートを選択して、ランタイム、リージョン、および関数名を指定します。
プロジェクトディレクトリに移動します:
cd start-fc3-dotnetcoreプロジェクトには次の構造があります:
start-fc3-dotnetcore ├── HelloFcApp │ ├── bin # コンパイル済みバイナリ │ ├── obj # 中間ビルドファイル │ ├── target # パブリッシュ出力 │ ├── HelloWorldApp.csproj # プロジェクト設定 │ └── Program.cs # ハンドラコード ├── readme └── s.yaml # Serverless Devs 設定プロジェクトをデプロイします:
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関数をテストします:
sudo s 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