すべてのプロダクト
Search
ドキュメントセンター

Function Compute:コードパッケージのコンパイルとデプロイ

最終更新日:Apr 01, 2026

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.1netcoreapp3.1
.NET Core 2.1netcoreapp2.1

デプロイ方法の選択

メソッド最適な用途
.NET Core CLI + コンソール1 回限りのデプロイ、プラットフォームの学習
Serverless Devs反復可能なデプロイ、CI/CD パイプライン

.NET Core CLI を使用したデプロイ

.NET Core CLI を使用して、クロスプラットフォームの .NET アプリケーションをビルドし、Function Compute にデプロイします。インストール手順については、「.NET」をご参照ください。

ステップ 1: .NET プロジェクトの作成

  1. 新しいコンソールプロジェクトを作成します:

    パラメーター説明
    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                 # 中間ビルドファイル
  2. 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>
  3. 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: コンパイルとパッケージ化

  1. プロジェクトをコンパイルし、出力を target ディレクトリに書き込みます:

    cd HelloFcApp && dotnet publish -c Release -o ./target
  2. コンパイルされた出力を 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: デプロイと検証

  1. Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数] をクリックします。

  2. 上部のナビゲーションバーでリージョンを選択します。[関数] ページで、[関数の作成] をクリックします。

  3. [関数の作成] ページで [イベント関数] を選択し、次のパラメーターを設定して [作成] をクリックします。関数が作成されると、[関数の詳細] ページの [コード] タブが自動的に開きます。

    パラメーター
    Runtime.NET Core 3.1
    Code Upload MethodUpload ZIP — ステップ 2 で作成した HelloFcApp.zip ファイルを選択します
    HandlerHelloFcApp::Example.Hello::StreamHandler — ハンドラのフォーマットについては、「Handlers
  4. [コード] タブで、[関数のテスト] をクリックします。実行が成功すると、次が返されます:

    {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3"
    }

    実行ログを表示するには、[ログ出力] タブをクリックします。

Serverless Devs を使用したデプロイ

Serverless Devs はビルドとデプロイのステップを自動化するため、反復可能なワークフローや CI/CD パイプラインに適しています。

前提条件

開始する前に、次のものが揃っていることを確認してください:

デプロイと検証

  1. プロジェクトを初期化します:

    s init

    プロンプトが表示されたら、クラウドプロバイダーとして Alibaba Cloud を選択し、.NET テンプレートを選択して、ランタイム、リージョン、および関数名を指定します。

  2. プロジェクトディレクトリに移動します:

    cd start-fc3-dotnetcore

    プロジェクトには次の構造があります:

    start-fc3-dotnetcore
    ├── HelloFcApp
    │   ├── bin                    # コンパイル済みバイナリ
    │   ├── obj                    # 中間ビルドファイル
    │   ├── target                 # パブリッシュ出力
    │   ├── HelloWorldApp.csproj   # プロジェクト設定
    │   └── Program.cs             # ハンドラコード
    ├── readme
    └── s.yaml                     # Serverless Devs 設定
  3. プロジェクトをデプロイします:

    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
  4. 関数をテストします:

    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