利用騰訊雲函數部署.Net 5米游社原神每日簽到功能

自從GitHub批量禁止濫用Action功能後,項目不得不考慮另外方案執行應用。其中騰訊雲函數被大家作為不錯的選擇(雖然馬上也要收費了)。

 但對於.Net的部署目前資源很少,而且我也沒學過bash。在去年請教了大佬後,終於誤打誤撞的配置成功了。本篇部落格只是記錄過程,有什麼遺漏還需要各位大佬指出。

腳本步驟

 首先在新建,選擇 運行環境 Custom Runtime。

 boostrap配置

雖然在文檔有給出包需要包含 boostrap,但我並不知道boostrap具體實現方式,以下是我從文檔和大佬的指引下寫的執行程式碼,下圖是執行輸出日誌,說明下一步是調用index.sh。其他地方不變。

  • 函數引導載入 SCF 首先檢索部署包中的可執行引導文件 boostrap,根據檢索結果並進行如下操作: 檢索到 bootstrap 文件且可執行,載入執行 boostrap 程式,進入函數初始化階段。 未檢索到 bootstrap 文件或文件不可執行,返回 bootstrap 文件不存在,啟動失敗。
#! /bin/bash
set -euo pipefail

FuncFile="$(echo $_HANDLER | cut -d. -f1).sh"
echo "[step 1]初始化,開始載入函數文件 $FuncFile"
source ./$FuncFile
echo "=>完成"

echo "[step 2]初始化完成,開始發送ready訊號"
curl -d " " -X POST -s "//$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/init/ready"
echo "=>完成"

echo "[step 3]開始循環監聽處理事件調用"
while true
do
 HEADERS="$(mktemp)"
 echo "=>長輪詢獲取事件"
 EVENT_DATA=$(curl -sS -LD "$HEADERS" -X GET -s "//$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/invocation/next")
 echo "=>監聽到事件:$EVENT_DATA"
 echo "=>調用函數,開始處理事件"
 $(echo "$_HANDLER" | cut -d. -f2) "$EVENT_DATA"
 RESPONSE=$EVENT_DATA
 echo "=>返回 $RESPONSE"
 echo "=>推送函數處理結果"
 curl -X POST -s "//$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/invocation/response"  -d "$RESPONSE"
done

 

 

index.sh配置

參考 //github.com/RayWangQvQ/BiliBiliToolPro/blob/main/tencentScf/index.sh

只需要在合適位置把執行程式放進去即可。因為我沒有額外的參數配置,所以只需要執行 GenshinDailyHelper

echo "成功載入index.sh函數文件"

function main_handler () {
    echo "進入main_handler"
    EVENT_DATA=$1
    echo "$EVENT_DATA" 1>&2;
    echo "開始運行GenshinDailyHelper......"
    ./GenshinDailyHelper
    echo "函數結束"
}

 項目步驟

以上已經把雲函數需要的兩個文件配置好後,接下來該在項目配置怎麼再外部獲取參數了。

可以使用 Environment.GetEnvironmentVariables() 獲取變數。這裡就簡單粗暴一點。

var environmentVariables = Environment.GetEnvironmentVariables();

if (environmentVariables.Contains("scf_cookie"))
{
    cookies = environmentVariables["scf_cookie"]?.ToString()?.Split("#");
}

 然後打開虛擬機,將項目編譯好(dotnet-publish),打包成zip格式文件。

文件目錄如下

├ bootstrap
└ index.sh

參考資料

//github.com/RayWangQvQ/BiliBiliToolPro/tree/main/tencentScf

//cloud.tencent.com/document/product/583/47610

//docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish

項目鏈接

//github.com/yinghualuowu/GenshinDailyTools
//github.com/yinghualuowu/GenshinDailyHelper.Docs