但对于.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 "http://$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 "http://$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 "http://$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/invocation/response" -d "$RESPONSE" done
index.sh配置
参考 https://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
参考资料
https://github.com/RayWangQvQ/BiliBiliToolPro/tree/main/tencentScf
https://cloud.tencent.com/document/product/583/47610
https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish
项目链接
https://github.com/yinghualuowu/GenshinDailyTools
https://github.com/yinghualuowu/GenshinDailyHelper.Docs