快速部署一个基于 custom runtime 的 .NET6 Web API 应用到阿里云函数计算。本案例代码示例来源于 .NET6 官方 Web API 应用教程:创建最小 Web API
使用该项目,推荐您拥有以下的产品权限 / 策略:
服务/业务 | 函数计算 |
---|---|
权限/策略 | AliyunFCFullAccess |
通过 Serverless Devs Cli 进行部署:
- 安装 Serverless Devs Cli 开发者工具 ,并进行授权信息配置 ;
- 初始化项目:
s init start-fc-http-aspdotnetcore6 -d start-fc-http-aspdotnetcore6
- 进入项目,并进行项目部署:
cd start-fc-http-aspdotnetcore6 && s deploy -y
- 部署成功之后,可以看到
system_url
,执行curl ${system_url}
可看到Hello World!
输出
根据自定义运行时 custom runtime 要求,我们需要保证自己的服务监听端口与 custom runtime 运行时监听端口保持一致,在本案例中我们在 Program.cs 中将端口设置为 9000:
builder.WebHost.UseUrls("http://0.0.0.0:9000");
下面详细展开介绍执行 s deploy -y
都发生了什么
- 编译项目
pre-deploy: # 在deploy之前运行
- run: dotnet publish -c Release -o ./target # 要执行的系统命令,类似于一种钩子的形式
path: ./TodoApi # 执行系统命令/钩子的路径
- plugin: layer-fc # 与运行的插件 (可以通过s cli registry search --type Plugin 获取组件列表)
args: # 插件的参数信息
customRuntime: dotnet6
- 我们在部署项目之前通过
dotnet publish -c Release -o ./target
命令发布应用并将其输出到./target
目录下,其中 path字段的值是./TodoApi
表示执行命令所在的路径。当 pre-deploy 命令执行完毕后,你可以在代码目录结构./TodoApi/target/
看到编译之后的输出文件如TodoApi.dll
等 layer-fc
是插件的一种,我们通过此插件可以使用 .NET6 运行时层,作为我们函数执行运行时。可以登陆函数计算控制台在函数配置中查看该层信息。
- 项目部署
function:
name: dotnet6api
description: "hello world by serverless devs"
runtime: custom
codeUri: ./TodoApi # 代码位置,即 TodoApi/*
customRuntimeConfig: # 自定义运行时启动配置
command: # 启动指令,示例值: ["/code/myserver"]
- dotnet
args: # 启动参数,示例值: ["-arg1", "value1"]
- ./target/TodoApi.dll
- 当编译项目之后,可以在 function 字段下配置函数,
runtime: custom
表示函数运行时被设置为自定义运行时 custom,codeUri: ./TodoApi
表示代码目录所在位置,即 TodoApi/*,函数代码运行时和代码都指定后,我们还需要设置函数启动命令及参数,很显然我们的启动命令及参数为dotnet ./target/TodoApi.dll
- 配置函数触发器
triggers:
- name: httpTrigger
type: http
config:
authType: anonymous
methods:
- GET
- POST
- PUT
- DELETE
- HEAD
通过以上字段配置就可以创建一个 HTTP 函数触发器。
-
测试 POST 方法,请求路径为 /todoitems
请求 Body 中输入待办事项的 JSON 格式内容
{ "name":"walk dog", "isComplete":true }
-
测试 PUT 方法,请求路径为 /todoitems/{id} 更新 ID 为 1 的待办事项并将其名称设置为 "feed fish":
{ "id": 1, "name": "feed fish", "isComplete": false }
成功响应返回 204 (无内容)
-
其它路由感兴趣小伙伴可以自己测试
您如果有关于错误的反馈或者未来的期待,您可以在 Serverless Devs repo Issues 中进行反馈和交流。如果您想要加入我们的讨论组或者了解 FC 组件的最新动态,您可以通过以下渠道进行:
微信公众号:serverless |
微信小助手:xiaojiangwh |
钉钉交流群:33947367 |