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

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

最終更新日:Aug 28, 2024

オンプレミスでプログラムをコンパイルできます。. 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プロジェクト

  1. 次のコマンドを実行して、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
  2. プロジェクトディレクトリで、実際の状況に基づいてファイルのパラメーター設定を変更します。

    • 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プロジェクト

  1. 次のコマンドを実行してプロジェクトディレクトリに移動し、プロジェクトをコンパイルして結果をtargetディレクトリに出力します。

    cd HelloFcApp && dotnet publish -c Release -o ./target
  2. 次のコマンドを実行して、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: プロジェクトコードをデプロイして検証を実行する

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

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

  3. On the関数の作成ページを選択します。イベント関数パラメーターを設定し、作成.

    次の項目は、[関数の作成] ページで設定する必要があるパラメーターについて説明します。 他のパラメーターにはデフォルト値を使用します。

    • ランタイム: を選択. NET Core 3.1.

    • コードのアップロード方法: [ZIPのアップロード] を選択し、ステップ2でパッケージ化されたZIPファイルをアップロードします。

    • Handler: HelloFcApp::Example.Hello::StreamHandlerと入力します。 ハンドラーの形式については、「ハンドラー」をご参照ください。

    関数の作成後、[関数の詳細] ページの [コード] タブにリダイレクトされます。

  4. 機能の詳細] ページのコード[タブで、テスト機能 をクリックします。

    関数が正常に実行されると、次の結果が返されます。

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

    [ログ出力] タブをクリックして、ログに関する情報を表示することもできます。

Serverless Devsを使用したコードパッケージのコンパイルとデプロイ

あなたが始める前に

手順

  1. 次のコマンドを実行して、プロジェクトを初期化します。

    s init 

    Alibaba Cloudをクラウドベンダー、テンプレート、ランタイム、アプリケーションがデプロイされているリージョン、および関数名として設定します。

  2. 次のコマンドを実行して、プロジェクトのディレクトリに移動します。

    cd start-fc3-dotnetcore

    次のコードスニペットは、ディレクトリ構造を示しています。

    start-fc3-dotnetcore
    ├── HelloFcApp
    │   ├── bin
    │   ├── obj
    │   ├── target
    │   ├── HelloWorldApp.csproj
    │   └── Program.cs
    ├── readme
    └── s.yaml
  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. を実行します。Run thesudo 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