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

Function Compute:Serverless Devsを使用した関数リソースの管理

最終更新日:Sep 10, 2024

Serverless Devsは、オープンソースのサーバーレス開発者ツールです。 Serverless Devsを使用すると、プロジェクトを効率的に開発、作成、テスト、デプロイし、ライフサイクル全体でプロジェクトを管理できます。 このトピックでは、Serverless Devsを使用してFunction Computeアプリケーションテンプレートをダウンロードし、そのテンプレートを使用して関数アプリケーションを開発およびデプロイする方法について説明します。 このトピックでは、Node.js 14の関数を使用します。

背景

このトピックでは、Serverless Devsでプロジェクトを初期化する2つの方法について説明します。 Serverless Devsを初めて使用する場合は、方法1を使用することを推奨します。 Serverless Devsでローカルデバッグ、リモート呼び出し、リソース削除などの操作を実行する方法について詳しく知りたい場合は、方法2を使用することをお勧めします。

始める前に

  1. Function Computeを有効にします。 詳細については、「Function Computeの有効化」をご参照ください。

  2. Serverless DevsとDockerのインストール

  3. Serverless Devsの設定

方法1: sコマンドを使用してリソースを管理する

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

sudo s

コマンド出力に基づいてプロジェクトを初期化します。 次の出力が返されます。

 No Serverless-Devs project is currently detected. Do you want to create a new project? Yes// No Serverless-Devs projects are found in the project file. Specify whether to create a project. 

 Serverless Awesome: https://github.com/Serverless-Devs/Serverless-Devs/blob/master/docs/zh/awesome.md

 Hello Serverless for Cloud Vendors Alibaba Cloud Serverless// Specify a cloud service provider. In this example, Alibaba Cloud is used. 
 Hello, serverlesser. Which template do you like? Quick start [Deploy a Hello World function to FaaS]// Specify the template that you want to use. In this example, a template is used to deploy an event function in Node.js 14. 
 Which template do you like? [Event] Node.js 14

 Create application command: [s init devsapp/start-fc-event-nodejs14]

 Please input your project name (init dir) start-fc-event-nodejs14// By default, Serverless Devs generates a project name. You can also specify a custom project name. 
 file decompression completed

     ____  _     _ ___  _ _     _        _____ ____
    /  _ \/ \   / \\  \/// \ /\/ \  /|  /    //   _\
    | / \|| |   | | \  / | | ||| |\ ||  |  __\|  /
    | |-||| |_/\| | / /  | \_/|| | \||  | |   |  \__
    \_/ \|\____/\_//_/   \____/\_/  \|  \_/   \____/
 please select credential alias default// Specify an alias that is configured in Serverless Devs. 

    Welcome to the Aliyun FC start application
     This application requires to open these services:
         FC : https://fc.console.aliyun.com/

     * The project is initialized. You can go to the project directory and run the s deploy command to deploy the project. 

 Thanks for using Serverless-Devs
 You could [cd /test/start-fc-event-nodejs14] and enjoy your serverless journey!
 If you need help for this example, you can use [s -h] after you enter folder.
 Document Star: https://github.com/Serverless-Devs/Serverless-Devs

 Do you want to deploy the project immediately? Yes// Specify whether to deploy the project. In this example, the project is deployed. 
 ......
helloworld:
  region:   cn-hangzhou
  service:
    name: hello-world-service
  function:
    name:       event-nodejs14
    runtime:    nodejs14
    handler:    index.handler
    memorySize: 128
    timeout:    60

方法2: s initコマンドを使用してリソースを管理する

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

    プロジェクトディレクトリで次のコマンドを実行して、プロジェクトを初期化します。

    sudo s init devsapp/start-fc-http-nodejs14
    説明

    この例では、Node.js 14のHTTP関数を展開して、プロジェクトを初期化する方法を説明します。 別のランタイム環境に他の種類の関数をデプロイする場合は、start-fc-http-nodejs14httpを、使用するトリガーの種類 (eventなど) に置き換えます。 nodejs14を別のランタイム環境に置き換えることもできます。

    コマンド出力の例:

     Serverless Awesome: https://github.com/Serverless-Devs/Serverless-Devs/blob/master/docs/zh/awesome.md
     Please input your project name (init dir) start-fc-http-nodejs14// By default, Serverless Devs automatically generates a project name. You can also specify a custom project name. 
     file decompression completed
    
         ____  _     _ ___  _ _     _        _____ ____
        /  _ \/ \   / \\  \/// \ /\/ \  /|  /    //   _\
        | / \|| |   | | \  / | | ||| |\ ||  |  __\|  /
        | |-||| |_/\| | / /  | \_/|| | \||  | |   |  \__
        \_/ \|\____/\_//_/   \____/\_/  \|  \_/   \____/
     please select credential alias default// Specify an alias that is configured in Serverless Devs. 
    
        Welcome to the Aliyun FC start application
         This application requires to open these services:
             FC : https://fc.console.aliyun.com/
    
         * The project is initialized. You can go to the project directory and run the s deploy command to deploy the project. 
    
     Thanks for using Serverless-Devs
     You could [cd /test/start-fc-http-nodejs14] and enjoy your serverless journey!
     If you need help for this example, you can use [s -h] after you enter folder.
     Document Star: https://github.com/Serverless-Devs/Serverless-Devs
    
     Do you want to deploy the project immediately? No// Specify whether to deploy the project. 

    プロジェクトが初期化されると、ディレクトリにstart-fc-http-nodejs14という名前のファイルフォルダが生成されます。 start-fc-http-nodejs14ファイルフォルダには、次のファイルが含まれます。

    • s.yaml: Function Computeリソースを定義するYAMLファイル。 YAML形式の詳細については、「YAML構文と権限管理」をご参照ください。

    • s_en.yaml: YAMLファイル。 s_en.yamlはs.yamlと同じです。 デフォルトでは、システムはs.yamlファイルを使用します。 s_en.yamlファイルを使用するには、コマンドでファイルを明示的に指定します。 たとえば、アプリケーションをデプロイするときに、コマンドに -tパラメーター (s deploy -t s_en.yaml -y) を追加します。

    • code: codeフォルダーには、関数のコードロジックを編集できるindex.jsファイルが含まれています。

    • readme.md: 依存モジュールやプロジェクトの設定など、依存関係を定義するファイル。

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

    cd start-fc-http-nodejs14
  3. オプション: アプリケーションを作成します。

    プロジェクトディレクトリで次のコマンドを実行して、アプリケーションを作成します。

    sudo s build

    この手順を実行した後、. sファイルが現在のディレクトリに生成され、出力が格納されます。 このファイルを使用して、コンピューターにアプリケーションをデバッグおよび展開できます。

  4. オプション: コンピューターでアプリケーションをデバッグします。

    アプリケーションをビルドした後、コンピューターでアプリケーションをデバッグして、アプリケーションが期待どおりに実行されるかどうかを確認できます。 関数の種類に基づいて、次のいずれかのコマンドを実行します。

    • sudo s local start

      HTTP関数サンプルコマンド出力:

      [2021-12-16 07:17:05] [INFO] [FC-LOCAL-INVOKE] - Using trigger for start: name: httpTrigger
      type: http
      config:
        authType: anonymous
        methods:
          - GET
      
      [2021-12-16 07:17:05] [INFO] [FC-LOCAL-INVOKE] - HttpTrigger httpTrigger of hello-world-service/http-trigger-nodejs14 was registered
              url: http://localhost:7013/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
              methods: GET
              authType: anonymous
      
      Tips: You can also use these commands to run or debug custom domain resources:
      
      Start with customDomain:
      * s local start auto
      
      Debug with customDomain:
      * s local start -d 3000 auto
      
      
      Tips for next step
      ======================
      * Deploy Resources: s deploy
      helloworld:
        status: succeed
      function compute app listening on port 7013!
    • イベント関数

      sudo s local invoke

    実行結果は関数の種類によって異なります。

    • HTTP 関数

      HTTP関数をデバッグする場合、デバッグコマンドの実行後にURLが返され、デバッグが停止します。 次のいずれかの方法を使用して、関数の実行をトリガーできます。

      • cURLを使用してHTTP関数をトリガーします。

        curl http://localhost:7013/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
      • ブラウザを使用してHTTP機能をトリガーします。

        http://localhost:7013/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
    • イベント機能

      イベント関数をデバッグする場合、デバッグコマンドの実行後にデバッグ結果が返されます。

  5. アプリケーションをデプロイします。

    次のコマンドを実行して、アプリケーションをFunction Computeにデプロイします。

    sudo s deploy -y

    サンプルコマンドの出力:

     Checking Service, Function, Triggers (0.82s)
     Creating Service, Function, Triggers (0.6s)
     Creating custom domain (0.31s)
    
    Tips for next step
    ======================
    * Display information of the deployed resource: s info
    * Display metrics: s metrics
    * Display logs: s logs
    * Invoke remote function: s invoke
    * Remove Service: s remove service
    * Remove Function: s remove function
    * Remove Trigger: s remove trigger
    * Remove CustomDomain: s remove domain
    
    helloworld:
      region:   cn-hangzhou
      service:
        name: hello-world-service
      function:
        name:       http-trigger-nodejs14
        runtime:    nodejs14
        handler:    index.handler
        memorySize: 128
        timeout:    60
      url:
        custom_domain:
          -
            domain: http://http-trigger-nodejs14.hello-world-service.188077086902****.cn-hangzhou.fc.devsapp.net
      triggers:
        -
          type: http
          name: httpTrigger

    実行が成功すると、アプリケーションはFunction Computeにデプロイされます。

  6. オプション: アプリケーションをリモートでデバッグします。

    次のコマンドを実行して、アプリケーションをリモートでデバッグします。

    sudo s invoke -e '{"body": "","method":"GET","headers":{"header_1":"v1"},"queries":{"key":"value"},"path":"/"}'

    コマンドのリクエストurlのサンプル:

    Request url: https://188077086902****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
    ========= FC invoke Logs begin =========
    FC Invoke Start RequestId: 6a3adedb-5d5d-4ac5-aa0b-2d43f4ace65c
    load code for handler:index.handler
    2022-03-04T08:39:14.770Z 6a3adedb-5d5d-4ac5-aa0b-2d43f4ace65c [verbose] hello world
    FC Invoke End RequestId: 6a3adedb-5d5d-4ac5-aa0b-2d43f4ace65c
    
    Duration: 66.23 ms, Billed Duration: 67 ms, Memory Size: 128 MB, Max Memory Used: 42.48 MB
    ========= FC invoke Logs end =========
    
    FC Invoke Result[Code: 200]:
    {
      path: '//',
      queries: { key: 'value' },
      headers: {
        accept: 'application/json',
        authorization: 'FC LTAI4G4cwJkK4Rza6xd9****:KZsoanKle4SoRO8EjyOjY3duLlVlR1mp78hjV9WG****',
        date: 'Fri, 04 Mar 2022 08:39:14 GMT',
        header_1: 'v1',
        host: '188077086902****.cn-hangzhou.fc.aliyuncs.com',
        'user-agent': 'Node.js(v14.17.4) OS(linux/x64) SDK(@alicloud/fc2@v2.5.0)',
        'x-forwarded-proto': 'http'
      },
      method: 'GET',
      requestURI: '/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14//?key=value',
      clientIP: '47.97.XX.XX',
      body: ''
    }
    
    End of method: invoke

    この例では、HTTP関数がデプロイされています。 リモートデバッグコマンドを実行すると、URLが返されます。 cURLを使用して、function ComputeでHTTP関数をトリガーできます。

    curl https://188077086902****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
  7. オプション: アプリケーションを削除します。

    次のコマンドを実行して、アプリケーションを削除します。

    sudo s remove service

    サンプルコマンド出力:

    Need to delete the resource in the cn-hangzhou area, the operation service is hello-world-service:
     ......
     Delete trigger hello-world-service/http-trigger-nodejs14/httpTrigger success.
     Delete function hello-world-service/http-trigger-nodejs14 success.
     Delete service hello-world-service success.
    [2022-03-04 08:40:26] [INFO] [FC] - Getting list on-demand: _FC_NAS_hello-world-service-ensure-nas-dir-exist-service
    [2022-03-04 08:40:26] [INFO] [FC] - Getting list provision: _FC_NAS_hello-world-service-ensure-nas-dir-exist-service
    [2022-03-04 08:40:26] [INFO] [FC] - Getting listAliases: _FC_NAS_hello-world-service-ensure-nas-dir-exist-service
    [2022-03-04 08:40:26] [INFO] [FC] - Getting list on-demand: _FC_NAS_hello-world-service
    [2022-03-04 08:40:26] [INFO] [FC] - Getting list provision: _FC_NAS_hello-world-service
    [2022-03-04 08:40:26] [INFO] [FC] - Getting listAliases: _FC_NAS_hello-world-service
    End of method: remove

    実行が成功すると、アプリケーションは削除されます。