本文介紹使用Serverless Devs工具過程中可能遇到的問題,並提供對應的解決方案。
如何配置s.yaml檔案?
關於YAML規範的詳細資料,請參見YAML規範。
使用Serverless Devs偶然出現異常,但未提示錯誤資訊怎麼辦?
您可以按照以下步驟排查問題。
執行命令
npm install @serverless-devs/s -g升級工具。執行命令
s clean --all刪除冗餘檔案。執行命令
rm -rf .s移除同級目錄下的.s檔案。執行
s -v查看工具版本。如果執行命令後無任何響應,可能是本地Node.js環境異常,需要重新安裝Node.js 12或更高版本。
如果問題還未解決,請加入DingTalk使用者群(DingTalk群號64970014484),並提供記錄檔{s-home}/logs/{TraceId}.log和s.yaml檔案,聯絡Function Compute開發工程師幫您解決。
關於{s-home}和{TraceId}的擷取方式,請參見下圖。
部署代碼時,希望以本地配置為準如何處理?
您可以在執行命令s deploy時,選擇use-local或執行命令時指定參數,即s deploy -y --use-local。
Serverless Devs工具支援多Region部署嗎?
支援。具體操作,請參見Serverless Devs工具多Region部署。
如何本地調試函數?
如果您的Runtime不是Custom Runtime,而是Function Compute內建語言,例如Node.js、Python等,推薦使用Serverless Devs工具的本地調用方式進行調試。具體操作,請參見Local命令。
如果您的Runtime是Custom Runtime,可以按照正常的開發習慣發起一個Server代碼調試流程。
說明針對Custom Runtime,
s local invoke命令能正常發起函數本地執行,但不支援斷點調試。
怎樣使用.fcignore檔案?
部署較大的程式碼封裝時,將專案中的依賴上傳到NAS檔案系統後,可以通過.fcignore忽略上傳到NAS的檔案,然後將專案部署到線上。更多資訊,請參見fcignore使用方法。
s.yaml檔案中定義了多個函數時如何指定部署和調用某個函數?
s.yaml檔案中,可能存在一個服務對應多個函數的情況,如果只想部署或調用其中某一個函數,可以在執行命令s deploy、s local start或s local invoke時,指定函數名稱。例如,下圖s.yaml檔案樣本中,執行s helloworld deploy只部署helloworld函數。

執行s local或者s build命令時出現“connect ENOENT /var/run/docker.sock”錯誤,如何處理?
報錯資訊
報錯資訊類似如下內容:
Project xxx failed to execute:
ERROR:
connect ENOENT /var/run/docker.sock解決方案
如果本地執行Docker命令是正常的,但是通過Serverless Devs執行s local或者s build命令異常,可以通過以下步驟解決該問題。
查看
/var/run/docker.sock檔案是否存在。運行以下命令查看檔案是否存在。如果存在該檔案,則跳過以下步驟。如果不存在該檔案,則執行以下步驟。
ll /var/run/docker.sock設定軟鏈到
/var/run目錄。ll ~/.docker/run/docker.sock ln -s ~/.docker/run/docker.sock /var/run/docker.sock
查看Docker用戶端是否啟動。
通過Serverless Devs執行
s local或者s build命令,需要先啟動Docker用戶端,請確保已啟動Docker用戶端。
在應用中心或者Serverless Devs工具中如何使用Node.js 18?
在Function Compute的Web情境下,使用者大多使用的運行時為自訂運行時,但是自訂運行時的內建Node、Python、PHP的版本可能無法滿足使用者的需求。例如,您需要使用Node.js 18的版本,使用方法如下:
建議您在控制台先建立一個自訂運行時函數,運行環境選擇Node.js 18,然後在函數詳情頁面中匯出函數的配置。YAML中的layers用來掛載Node.js 18公用層,PATH變數可以將Node.js 18設定為預設版本。
service:
internetAccess: true
name: test-service
function:
handler: index.handler
timeout: 60
diskSize: 512
caPort: 3000
layers:
- acs:fc:cn-hangzhou:official:layers/Nodejs18/versions/1
customRuntimeConfig:
command:
- node
- server.js
runtime: custom.debian10
environmentVariables:
PATH: /opt/nodejs18/bin:/usr/local/bin/...
NODE_PATH: /opt/nodejs/node_modules
...如果您在使用應用中心的功能,由於目前構建的過程中無法使層的配置生效。您需要通過export PATH的方式使構建過程中使用Node.js 18來進行npm install和npm run build。具體請參見升級流水線構建環境運行時。
通過Serverless Devs工具部署的應用怎麼無法訪問了?網域名稱被刪除了?
***.devsapp.net網域名稱是CNCF SandBox專案Serverless Devs社區所提供,僅供學習和測試使用,不可用於任何生產使用。社區會對該網域名稱進行不定期撥測,並在網域名稱下發1天后進行回收,建議您及時為應用綁定自訂網域名,以獲得更好的使用體驗。
如果應用未綁定自訂網域名,且部署的時間超過1天,應用將無法正常訪問,此時需要重新部署一次應用,應用網域名稱即可正常訪問。