C#/.NET プロジェクトをローカルでコンパイルし、ZIP ファイルにパッケージ化して、コンソールまたは Serverless Devs を使用して Function Compute (FC) にデプロイします。
依存ライブラリ
FC は、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 バージョン |
|
|
.NET Core 3.1 |
|
|
.NET Core 2.1 |
|
デプロイ方法の選択
|
方法 |
最適な用途 |
|
1 回限りのデプロイ、プラットフォームの学習 |
|
|
反復可能なデプロイ、CI/CD パイプライン |
.NET Core CLI を使用したデプロイ
.NET Core CLI を使用して、クロスプラットフォームの .NET アプリケーションをビルドし、FC にデプロイします。インストール手順については、「.NET」をご参照ください。
ステップ 1: .NET プロジェクトの作成
-
新しいコンソールプロジェクトを作成します。
パラメーター
説明
新しいコンソールコンソールアプリケーションテンプレートを使用します
-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 # 中間ビルドファイル -
HelloFcApp.csprojを更新して、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の内容をハンドラーコードに置き換えます。 次の例では、Stream タイプのイベントハンドラーを使用します。 他のハンドラータイプについては、「ハンドラー」をご参照ください。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: デプロイと検証
-
FC コンソールにログインします。左側メニューで、[Functions] をクリックします。
-
上部メニューで、リージョンを選択します。[Functions] ページで、[Create Function] をクリックします。
-
[Create Function] ページで [Event Function] を選択し、次のパラメーターを設定して [Create] をクリックします。関数が作成されると、[Function Details] ページの [Code] タブが自動的に開きます。
パラメーター
値
[Runtime]
[.NET Core 3.1]
[Code Upload Method]
[ZIP のアップロード] ー ステップ 2 の
HelloFcApp.zipファイルを選択します[Handler]
HelloFcApp::Example.Hello::StreamHandler— ハンドラーの形式については、「ハンドラー」をご参照ください。 -
[Code] タブで、[Test Function] をクリックします。実行が成功すると、次の結果が返されます:
{ "key1": "value1", "key2": "value2", "key3": "value3" }実行ログを表示するには、[Log Output] タブをクリックします。
Serverless Devs を使用したデプロイ
Serverless Devs はビルドとデプロイのステップを自動化するため、反復可能なワークフローや CI/CD パイプラインに適しています。
前提条件
開始する前に、以下が完了していることを確認してください。
デプロイと検証
-
プロジェクトを初期化します。
s initプロンプトが表示されたら、クラウドプロバイダーとして Alibaba Cloud を選択し、.NET テンプレートを選択して、ランタイム、リージョン、および関数名を指定します。
-
プロジェクトディレクトリに移動します。
cd start-fc3-dotnetcoreプロジェクトは次の構造になっています:
start-fc3-dotnetcore ├── HelloFcApp │ ├── bin # コンパイル済みバイナリ │ ├── obj # 中間ビルドファイル │ ├── target # パブリッシュ出力 │ ├── HelloFcApp.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-fc-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/HelloFcApp/HelloFcApp.csproj (in 154 ms). HelloFcApp -> /root/start-fc3-dotnetcore/HelloFcApp/bin/Release/netcoreapp3.1/HelloFcApp.dll HelloFcApp -> /root/start-fc3-dotnetcore/HelloFcApp/target/ [hello_fc_app] completed (2.66s) Result for [deploy] of [hello-fc-app] ==================== region: cn-hangzhou description: hello world by serverless devs functionName: start-dotnetcore-xxxx handler: HelloFcApp::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 -
関数をテストします。
s invoke呼び出しが成功すると、次の結果が返されます:
Steps for [invoke] of [hello-fc-app] ==================== ========= FC invoke Logs begin ========= FunctionCompute dotnetcore3.1 runtime inited. FC Invoke Start RequestId: 1-6603951e-157f3f32-7fe6f248d7d0 {"key1":"value1","key2":"value2","key3":"value3"} 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: { "key1": "value1", "key2": "value2", "key3": "value3" } ✔ [hello_fc_app] completed (0.72s) A complete log of this run can be found in: /root/.s/logs/0327114013