全部產品
Search
文件中心

Function Compute:Serverless Devs工具使用FAQ

更新時間:Jan 03, 2025

本文介紹使用Serverless Devs工具過程中可能遇到的問題,並提供對應的解決方案。

如何配置s.yaml檔案?

關於YAML規範的詳細資料,請參見YAML規範

使用Serverless Devs偶然出現異常,但未提示錯誤資訊怎麼辦?

您可以按照以下步驟排查問題。

  1. 執行命令npm install @serverless-devs/s3 -g升級工具。

  2. 執行命令s clean --all刪除所有組件及冗餘檔案。

  3. 執行s -v查看工具版本。

    如果執行命令後無任何響應,可能是本地Node.js環境異常,需重新安裝Node.js 14或以上的版本。

如果問題還未解決,請加入DingTalk使用者群(DingTalk群號64970014484),並提供記錄檔和s.yaml檔案,聯絡Function Compute開發工程師幫您解決。

關於記錄檔的擷取方式,請參見下圖。

image.png

新專案部署完成後,在控制台找不到函數如何處理?

如果s deploy命令完成後,在控制台找不到函數,您可以嘗試以下方法。

  1. 通過首碼匹配搜尋,尋找您部署的函數。有些專案會建立多個函數,您可以編輯s.yaml,使專案內所有functionName的首碼相同,以便尋找。

  2. 單擊image按鈕,重新整理函數列表。

image

說明

如果您想使用應用中心管理Serverless Devs專案,您可以在s init後,將專案提交至線上倉庫,然後在應用中心匯入應用,具體操作,請參見管理應用。匯入應用後,在提交更改至倉庫後,流水線將自動部署專案,您不再需要使用s deploy命令部署專案。

部署專案時,本地配置和線上配置有衝突,如何處理?

  • 當本地配置(即s.yaml中的配置)和線上配置有衝突時,Serverless Devs將詢問您是否使用本地配置部署,您可以選擇使用本地配置,或保留線上配置。

    image

  • 如果您希望預設使用本地配置,可以使用-y選項,即s deploy -y

Serverless Devs工具支援多Region部署嗎?

支援。具體操作,請參見以下樣本。

Shell指令碼

```bash
#!/bin/bash
regions=("cn-hangzhou" "ap-southeast-1")
for r in ${regions[@]}
do
  export REGION=$r
  s deploy -y
done
```

s.yaml樣本

```yaml
edition: 3.0.0
name: hello-world-app
access: "default"
resources:
  hello_world:
    component: fc3
    props:
      region: ${env('REGION')}
      functionName: "start-nodejs-im1g"
      description: 'hello world by serverless devs'
      runtime: "nodejs14"
      code: ./code
      handler: index.handler
      memorySize: 128
      timeout: 30
```

如何本地調試函數?

  • 如果您的運行時不是自訂運行時或自訂鏡像,而是Function Compute內建語言,例如Node.js、Python等,推薦使用Serverless Devs工具的本地調用方式進行調試。具體操作,請參見Local命令

  • 如果您的運行時是自訂運行時或自訂鏡像,可以按照正常的開發習慣啟動一個Server代碼調試流程。

    說明

    針對自訂運行時,s local invoke命令能正常發起函數本地執行,但不支援斷點調試。

怎樣使用.fcignore檔案?

您可以在代碼指定目錄下配置一個.fcignore檔案,.fcignore檔案用於定義忽略相關檔案或者將檔案夾打包到函數代碼的ZIP包。更多資訊,請參見.fcignore使用方法

s.yaml檔案中定義了多個函數時如何指定部署和調用某個函數?

s.yaml檔案中,可能存在一個服務對應多個函數的情況,如果只想部署或調用其中某一個函數,可以在執行命令s deploys infos local invoke時,指定資源名稱。例如,s.yaml檔案樣本如下,包含多個函數,部署函數時可以執行s helloworld1 deploy只部署helloworld1函數。

```yaml
edition: 3.0.0
name: hello-world-app
access: "default"

resources:
  hello_world1:
    component: fc3
    props:
      region: cn-huhehaote       
      functionName: "hello_world1"
      description: 'hello world1 by serverless devs'
      runtime: "nodejs14"
      code: ./code
      handler: index.handler

  hello_world2:
    component: fc3
    props:
      region: cn-huhehaote       
      functionName: "hello_world2"
      description: 'hello world2 by serverless devs'
      runtime: "nodejs14"
      code: ./code
      handler: index.handler
```

如何基於Podman,使用Serverless Devs工具進行構建與本地調試?

使用Serverless Devs工具執行構建或本地調試函數時,如果基於Podman工具,會提示報錯Failed to start docker, xxx,此時,您可以建立一個Docker目錄軟連結指向Podman的目錄,然後再執行構建或本地調試。建立軟連結的具體操作如下所示。

  1. 查詢Podman可執行檔路徑。

    which podman

    本文樣本中Podman可執行檔路徑為/usr/bin/podman

  2. 設定軟連結。

    ln -s /usr/bin/podman /usr/bin/docker
  3. 查詢軟連結是否已生效。

    ls -lh /usr/bin/docker

    預期輸出如下:

    lrwxrwxrwx 1 root root 15 Jan  5 09:30 /usr/bin/docker -> /usr/bin/podman