十分钟上线-基于函数计算开发 Restful web api asp.net core web app
前言
這篇文章適合所有的 C# 開發(fā)新手、老鳥以及想準備學習開發(fā) C# 的程序猿。.NET Core是一個開源通用的開發(fā)框架,支持跨平臺, 阿里云函數(shù)計算推出了 dotnetcore2.1 runtime, 使用 C# 編寫 serverless 函數(shù), 詳情見官方文檔:C# 函數(shù)入口. 在官方文檔描述中,我們獲知阿里云函數(shù)計算可以很好支持 asp.net core 的 Applicaiton:
- ASP.NET Core Web API
- ASP.NET Core Web App
- ASP.NET Core Web App (Model-View-Controller)
在介紹 Serverless Web 開發(fā)新模式之前,我們先了解下將 C# WebApi/WebApp Serverless 化的好處:
本文以部署一個完善的 asp.net core 工程 Blogifier 為例,在函數(shù)計算環(huán)境中為例,向您講解如何使用阿里云函數(shù)計算快速構建或移植基于 asp.net core 開發(fā)的 WebApi/WebApp ,通過本文,您將會了解以下內容:
- 案例概覽
- 傳統(tǒng)服務器架構 VS Serverless架構
- Serverless架構詳解
- 函數(shù)計算運行 Asp.net core App 原理
- 案例開發(fā)配置步驟
- FC Web 設置自定義域名
案例概覽
在本教程中,我們講解如何利用函數(shù)計算一步一步來構建 Web 的 Server 端,該案例是把一個 asp.net core 工程Blogifier 部署到函數(shù)計算,本文旨在展示函數(shù)計算做 Web Backend 能力,具體表現(xiàn)為以下幾點:
- 完善的 ASP.NET Core Web 系統(tǒng)遷移到 FC 的成本不高
- FC 打通了專有網(wǎng)絡 VPC 功能,用戶的函數(shù)可以配置訪問專有網(wǎng)絡的云資源,比如本案例中 NAS
案例體驗入口:
http://dotnet.mofangdegisn.cn/
傳統(tǒng)服務器架構 VS Serverless架構
正常來說,用戶開發(fā) Server 端服務,常常面臨開發(fā)效率,運維成本高,機器資源彈性伸縮等痛點,而使用 Serverless 架構可以很好的解決上述問題。下面是傳統(tǒng)架構和 Serverless 架構的對比:
阿里云函數(shù)計算是一個事件驅動的全托管計算服務。通過函數(shù)計算,您無需管理服務器等基礎設施,只需編寫代碼并上傳。函數(shù)計算會為您準備好計算資源,以彈性、可靠的方式運行您的代碼,并提供日志查詢,性能監(jiān)控,報警等功能。借助于函數(shù)計算,您可以快速構建任何類型的應用和服務,無需管理和運維。
Serverless 架構詳解
從上面的示例圖中,整體架構十分簡單明了, 用 FC 替代了 Web 服務器,但是換來的是免運維,彈性擴容,按需付費等一系列優(yōu)點
函數(shù)計算運行 Asp.net Core App 原理
Asp.net Core App 運行在服務器上
A http request to your website will go through IIS/Nginx, then Kestrel, and finally will be passed on to ASP.NET Core
Asp.net Core App 運行在函數(shù)計算上
請求通過函數(shù)(with http trigger), 最后到達ASP.NET Core
tips: 基于函數(shù)計算環(huán)境運行新建 asp.net core app 可以參考[dotnet runtime HTTP 觸發(fā)器的函數(shù)入口示例]()
在本文中,我們展示把一個現(xiàn)有的成熟的 asp.net core 工程低成本無縫遷移到函數(shù)計算環(huán)境。
案例開發(fā)配置步驟
準備工作
1. 創(chuàng)建 NAS 掛接點,配置 VPC , 具體參考函數(shù)計算nas使用示例
注:在本示例中使用 sqlite3 數(shù)據(jù)庫,這種文件類型的數(shù)據(jù)庫直接放置在 nas 即可,如果使用mysql 等其他數(shù)據(jù)庫, 需要創(chuàng)建 RDS 數(shù)據(jù)庫, 配置 VPC , 具體參考通過 VPC 訪問 RDS 實例
2. 可選操作,在準備函數(shù)的 region 創(chuàng)建日志,用于函數(shù)的調試, 具體參考函數(shù)計算配置日志服務
創(chuàng)建函數(shù)
1. 創(chuàng)建 Service (假設是 csharp-web ), 配置準備 vpc config , nas config 和日志服務,比如案例體驗的 Service 配置如下圖:
2. 下載 asp.net core 工程,Blogifier, 用 vs 打開, debug 本地可以正常運行。
注:本地安裝 dotnetcore2.1
3. 在工程中增加入口函數(shù),使得該工程可在函數(shù)計算執(zhí)行環(huán)境運行,diff
4. dotnet publish -c Release, 跳轉到publish目錄, 將相關的靜態(tài)資源/可寫/共享目錄移動到上述配置的 NAS 的某個目錄(這里假設是 www目錄, 對應步驟2中的diff)
# dotnet publish -c Release# cp -r plugins/Common/bin/Release/netcoreapp2.1/publish/* src/App/bin/Release/netcoreapp2.1/publish/# src/App/bin/Release/netcoreapp2.1/publish/# mkdir lib// 選擇函數(shù)計算執(zhí)行環(huán)境所需要的so, 其他的刪除即可 # cp runtimes/linux-x64/native/libe_sqlite3.so ./lib# // 這里是傳送對應的靜態(tài)文件和 app.db 到 nas 中, 詳情看下面的描述# rm -rf wwwroot app.db runtimes # zip -r code.zip *// 最后使用這個 code.zip 創(chuàng)建 handler 為 `App::App.FcRemoteEntrypoint::HandleRequest` 函數(shù)將 publish 目錄下的 wwwroot 和 app.db 傳送到 nas 的 www 目錄, 可以使用ecs 掛載nas 傳輸過去, 也可以采用如下簡單函數(shù)傳輸過去
|-- index.py |-- www注: www目錄下面有 wwwroot 和 app.db
index.py代碼:
# -*- coding: utf-8 -*- import logging import osdef handler(event, context):os.system("mkdir -p /mnt/share/www")os.system("cp -r /code/www/* /mnt/share/www/")os.system("chmod -R 777 /mnt/share/www")print( os.system("ls -ll /mnt/share/www") )return 'ok'基于上述代碼創(chuàng)一個函數(shù) move-res-nas , 執(zhí)行函數(shù),將相關靜態(tài)和共享資源移動到 NAS 的/mnt/share/www/ 目錄。
3. 創(chuàng)建入口函數(shù) blog (使用上一步驟中的 code.zip ), 給函數(shù)設置 http trigger ,類型為 anonymous , 類型都選上。
4. 給函數(shù)入口配置自定義域名(操作過程請參考:綁定自定義域名示例), 具體配置假設如下:
注意: 綁定自定義域名之后,不用使用控制臺來進行調試,就只能使用瀏覽器來觸發(fā)函數(shù),日志服務來進行調試。
總結
函數(shù)計算有如下優(yōu)勢:
- 無需采購和管理服務器等基礎設施
- 專注業(yè)務邏輯的開發(fā)
- 提供日志查詢、性能監(jiān)控、報警等功能快速排查故障
- 以事件驅動的方式觸發(fā)應用響應用戶請求
- 毫秒級別彈性伸縮,快速實現(xiàn)底層擴容以應對峰值壓力
- 按需付費。只需為實際使用的計算資源付費,適合有明顯波峰波谷的用戶訪問場景
除了上面所列的優(yōu)勢,FC 可以做為 Web Backend,只需要編寫一個函數(shù)實現(xiàn)傳統(tǒng) Web 服務器中的 conf 中的邏輯,就可以將一個完整的 Web 工程遷移到 FC ,從而從傳統(tǒng)的 Web 網(wǎng)站運維,監(jiān)控等繁瑣的事務中解放出來。
最后歡迎大家通過掃碼加入我們用戶群中,搭建過程中有問題或者有其他問題可以在群里提出來。
函數(shù)計算官網(wǎng)釘釘客戶群(11721331)。
總結
以上是生活随笔為你收集整理的十分钟上线-基于函数计算开发 Restful web api asp.net core web app的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记(4.8)
- 下一篇: gcd的二进制优化笔记