作者 | Anycodes
眾所周知,隨著(zhù)時(shí)間的發(fā)展,Serverless 命令行工具也逐漸的玩出了更多的花樣,就目前來(lái)看,常見(jiàn)的形態(tài)有兩種,一種是通
過(guò) Yaml 來(lái)進(jìn)行資源的描述,另外一種是純粹的命令行操作,而不依賴(lài)這些內容。
第一種通過(guò) Yaml 來(lái)進(jìn)行資源描述,其好處不言而喻,目前主流的 Serverless 開(kāi)發(fā)者工具均是類(lèi)似的模式,例如阿里云的
Funcraft,著(zhù)名的開(kāi)源項目 Serverless Framework 等,通過(guò) Yaml,使用者可以通過(guò)簡(jiǎn)單的命令,進(jìn)行復雜的操作,例如開(kāi)發(fā)
者在 Yaml 中描述好服務(wù)、函數等配置,描述好代碼位置,只需要 deploy 就可以將本地項目部署到線(xiàn)上,非常方便。但是這
有一個(gè)非常明顯的劣勢,在很多時(shí)候我們的企業(yè)管理者,給每個(gè)人分配的權限是固定的,例如運維人員只能更新某些內容,開(kāi)
發(fā)人員只能更新某些代碼,某些負責可以發(fā)布版本等,那么這個(gè)時(shí)候”一把梭”的行為就顯得非常尷尬,想為開(kāi)發(fā)者做更多,
但是有些開(kāi)發(fā)者不需要你做更多,那么”高階能力”和”原子能力”的平衡就顯得至關(guān)重要的。
第二種模式,雖然是不需要依賴(lài) Yaml,在很多時(shí)候使用起來(lái)可能會(huì )稍微復雜一些,例如我們創(chuàng )建一個(gè)函數可能涉及到很多流
程:創(chuàng )建服務(wù),創(chuàng )建函數,創(chuàng )建觸發(fā)器…,相對比上面所說(shuō)的一條指令而言,確實(shí)復雜很多,但是這種無(wú) Yaml 的模式,更適
合做原子操作,可以最大程度解決上述問(wèn)題,同時(shí)這種做法也可以在一定程度上進(jìn)行更多的拓展,例如某些本不需要依賴(lài)
Yaml 的行為:查詢(xún)服務(wù)列表,查詢(xún)函數列表……
所以這兩種模式各有優(yōu)缺點(diǎn),我們在使用的時(shí)候完全可以組合來(lái)使用,達到最大的一個(gè)生產(chǎn)效能。那么一個(gè)新問(wèn)題來(lái)了,以
阿里云函數計算為例,如何同時(shí)擁有這兩種模式的使用方法呢?
其實(shí) Serverless Devs 天然支持 Yaml 描述和非 Yaml 描述的能力,例如阿里云函數計算的 FC 組件就是一個(gè)可以依靠 Yaml
描述進(jìn)行資源操作的組件,而 FC-API 組件則是 API 相關(guān)的原子性操作。
本文將會(huì )以這樣一個(gè)案例/場(chǎng)景為例,為讀者介紹這兩者的使用方法:
1.通過(guò) Serverless Devs 快速創(chuàng )建一個(gè)服務(wù)/函數/觸發(fā)器
2.通過(guò)無(wú) Yaml 的模式對其中的代碼部分進(jìn)行單獨的更新
3.更新之后發(fā)布一個(gè)版本
4.通過(guò) Git+Github Action 實(shí)現一個(gè)代碼自動(dòng)化發(fā)布和版本自動(dòng)化發(fā)布的能力
我們只需要通過(guò)s init并且選擇阿里云函數計算的 Python3 Http 函數即可:
創(chuàng )建完成之后,我們只需要進(jìn)入到對應的文件夾,并且執行s deploy,即可將項目快速部署到線(xiàn)上。在進(jìn)入到項目后,我們
可以在項目下看到一個(gè)s.yaml的文件,這個(gè)文件就是資源描述文件:
其完整的描述:
https://github.com/devsapp/fc/blob/main/docs/Others/yaml.md
此時(shí)我們可以通過(guò)s deploy進(jìn)行項目的部署:
部署完成,我們可以打開(kāi)系統分配給我們的域名,我們可以看到內容:
我們可以編輯index.py,將Hello world!變?yōu)镠ello world Serverless Devs!
然后我們就要接觸一個(gè)新的組件 FC-API :
https://github.com/devsapp/fc-api
我們可以執行幫助文檔:s cli fc-api -h:
此時(shí)我們需要明確的是,當我們執行s cli的時(shí)候,系統就不去讀 Yaml,而直接進(jìn)行相關(guān)方法的調用。
如果我們對這個(gè)方法還是不清楚,我們可以:s cli fc-api updateFunction -h
此時(shí)我們只需要按照規范,填寫(xiě)好地區,服務(wù)名,函數名,以及要更新的字段即可:
```
s cli fc-api updateFunction --region cn-hangzhou --serviceName fc-deploy-service --functionName http-trigger-
function--code '{"zipFile": "./"}'
```
完成之后,我們可以再去看一下之前的頁(yè)面是否同步更新了:
此處可能有疑問(wèn),你的幫助文檔寫(xiě)的是:--code string [JSON String] The code of the function. The code must be
packaged into a ZIP file._你是怎么知道傳遞--code '{"zipFile": "./"}'的?
因為在我們看幫助文檔的時(shí)候,題已經(jīng)提醒了我們這是一個(gè) JSON String,同時(shí)在幫助文檔最上面是有鏈接地址:
```_Usage_
```
s cli fc-api updateFunction
API Document: https://help.aliyun.com/document_detail/189986.html
Options
--region stringThe region of fc endpoint.
--access stringSpecify the key name.
--props stringThe json string of props.
--serviceName stringThe name of the service.
--functionName stringThe description of the function.
--code string[JSON String]The code of the function.The code must be packaged into a ZIP file.
```
```
>此時(shí),我們可以打開(kāi) https://help.aliyun.com/document_detail/189986.html:


>此時(shí)為了方便,Serverless devs 支持本地路徑,會(huì )幫助你進(jìn)行打包等操作。
當然,我們還可以更刺激一些,修改其他內容,如單純修改一些 timeout:
```
s cli fc-api updateFunction —region cn-hangzhou —serviceName fc-deploy-service —functionName http-trigger-
function —timeout 70
```

和上面一樣,我們可以用`s cli fc-api -h `查看一下版本發(fā)布的方法:`s cli fc-api publishVersion -h`

嘗試拼接參數:
```
s cli fc-api publishVersion —region cn-hangzhou —serviceName fc-deploy-service —description “This is a test version”
```
得到結果:

當我們想要把上面只更新代碼,發(fā)布版本的能力集成到 CI/CD,或者某些自動(dòng)化流程中,如何操作呢?
以 GithubAction 為例,我們可以直接執行`s cli cicd`:

接下來(lái),我們對`./.github/workflow/serverless-devs.yml`進(jìn)行自定義編輯:
```yaml
name: Serverless Devs Project CI/CD
on:
push:
branches: [ master ]
jobs:
serverless-devs-cd:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 12
registry-url:
- run: npm install
- run: npm install -g @serverless-devs/s
# 默認密鑰配置指令是阿里云密鑰配置指令,更多可以參考:
# 如何通過(guò) Github Action使用Serverless Devs 做 CI/CD:http://short.devsapp.cn/cicd/github/action/usage
# Serverless Devs 的官網(wǎng)是通過(guò) Serverless Devs 部署的: http://short.devsapp.cn/cicd/github/action/practice
- run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID ${{secrets.AccessKeyID}} --AccessKeySecr
et ${{secrets.AccessKeySecret}} -a default
- run: s cli fc-api updateFunction --region cn-hangzhou --serviceName fc-deploy-service --functionName http-
trigger-function --code '{"zipFile":"./"}'
- run: s cli fc-api publishVersion --region cn-hangzhou --serviceName fc-deploy-service
```
我們只是在最后加了兩個(gè)人 run,一個(gè)是發(fā)布代碼,一個(gè)是發(fā)布版本,此時(shí)我們可以創(chuàng )建一個(gè) Github 倉庫,嘗試一下:
創(chuàng )建完成之后,我們可以按照案例提醒,進(jìn)行密鑰的配置:
# 默認密鑰配置指令是阿里云密鑰配置指令,更多可以參考:
# 如何通過(guò) Github Action 使用 Serverless Devs 做 CI/CD:http://short.devsapp.cn/cicd/github/action/usage
# Serverless Devs 的官網(wǎng)是通過(guò) Serverless Devs 部署的: http://short.devsapp.cn/cicd/github/action/practice
```
接下來(lái), 我們通過(guò) git init 等一系列指令,完成代碼推到倉庫:
此時(shí),我們再次修改代碼:
修改完成之后,我們將代碼 push 到測試倉庫,可以看到,我們在 Action 中可以看到一個(gè) workflow 在執行:
稍等片刻,當這個(gè)流程完成:
我們打開(kāi)之前的頁(yè)面,可以看到,網(wǎng)頁(yè)內容已經(jīng)順利被更新:
# 總結
本文以阿里云為例,通過(guò)在 Github 上使用 Servelress Devs 單純對代碼進(jìn)行更新,并進(jìn)行版本發(fā)布,該流程是比較常見(jiàn)的,
也是比較通用的,希望讀者可以發(fā)揮想象力,將這個(gè)流程應用到自己的項目中。
(文章轉載自 Go Serverless)
Serverless Devs 的開(kāi)源為國內外開(kāi)發(fā)者提供了 Serverless 工具的新選擇,讓開(kāi)發(fā)者可以以更短的路徑體驗到多云 Serverless
產(chǎn)品,以更快的速度創(chuàng )建和部署 Serverless 應用,以更簡(jiǎn)單和更自動(dòng)化的方法進(jìn)行項目管理/運維,未來(lái)期待更多開(kāi)發(fā)者參
與共建。
目前代碼已經(jīng)在 Gitee(碼云)和 GitHub 上正式開(kāi)放:
- Github 地址:https://github.com/serverless-devs
- Gitee 地址:https://gitee.com/organizations/serverless-devs/projects
- Serverless Devs 官網(wǎng):https://www.serverless-devs.com
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站