如何保證 Serverless 業務部署更新的一致性?

簡介:每個工具的誕生,都要有一個成長的過程,Serverless Devs 正在不斷的成長。

從我作 Serverless 工具開始,就常常會遇到有人問這樣一個問題:如何保證Serverless業務部署更新的一致性。瀏覽器

所謂的一致性在這裏指的是:咱們經過工具在本地進行項目部署,此時再有人經過其餘途徑(例如控制檯等),對項目進行過更新等操做,此時我再在本地進行項目部署,是否是會直接覆蓋?安全

例如,當用戶 A 在本地更新了業務,由於一些特殊狀況,致使出現了一個線上異常狀況「x」,此時用戶 B 從新更新,將這個內容修復了,可是 B 沒有及時同步給 A 這個事情,A 又更新了新的功能,直接覆蓋了 B的內容,這個時候以前的異常 x 又出現了,若是此時在 A 更新的時候,能夠感知到線上資源已經變更,那麼這種事情就不會再次發生。less

目前基於 Serverless Devs 的阿里雲函數計算組件,已經支持了線上「異動」的感知能力,包括瞭如下幾個狀況:函數

  1. 本地新建並部署一個線上沒有的資源
  2. 本地部署完成,線上更新,本地再次部署
  3. 本地新建並部署一個線上已經有的資源

實驗準備

經過s init建立一個函數(選擇Alibaba Cloud Serverless, 選擇HTTP Function - Python3 Example):工具

 title=

此時咱們查看一下s.yaml:阿里雲

 title=

該項目部署到線上以後的表現就是在cn-hangzhou區建立一個fc-deploy-service服務,以及http-trigger-function函數spa

本地新建並部署一個線上沒有的資源

此時,咱們肯定一下線上並無對應資源,因此咱們部署一下:資源

 title=

部署完成,很順利:開發

 title=

打開瀏覽器,查看反饋給咱們的自定義地址:rem

 title=

此時,咱們能夠在本地,更新一下這個函數代碼:

 title=

保存部署:

 title=

完成以後,再查看線上資源:

 title=

整個過程,仍是比較貼近傳統的基本流程,也沒有觸發線上異動,算是中規中矩的理想過程。

本地部署完成,線上更新,本地再次部署

此時,咱們對線上資源進行變動,首先在控制檯找到函數:

 title=

修改代碼,並部署。

 title=

部署完成以後,咱們刷新一下剛纔的地址:

 title=

能夠看到已經更新。此時,咱們再從本地進行部署:

 title=

能夠看到,系統已經感知到咱們的代碼變化,此時,咱們選擇yes,完成以後在查看線上資源:

 title=

此處須要額外說明的是,只要是函數計算的服務,函數,觸發器發生變化,此處均可以進行感知,不論是配置仍是代碼。

本地新建並部署一個線上已經有的資源

此時,咱們再進行最後的實驗,咱們將本地項目刪除,從新建設。而後執行部署,因爲剛剛實驗過的緣由,咱們已經在線上存在了這些資源,因此此時算是部署一個線上的資源。

 title=

此時能夠看到,系統感知到這個資源本地沒部署過,線上而且已經存在,因此此時須要肯定是否覆蓋。

總結

代碼在其餘場景被更新,須要咱們在當前獲得感知,這個事情實際上是很是重要的,和代碼的安全發佈密不可少。而此時,經過Serverless Devs是能夠作到的。

那麼問題來了,若是我已經有了一個項目,我想集成到cd流程,我不想出現交互式操做,應該如何處理呢?

此時咱們提供一個--use-local參數,用來強行覆蓋線上配置,經過這樣的指令就能夠實現無交互的,本地優先。

每個工具的誕生,都要有一個成長的過程,Serverless Devs正在不斷的成長。期待更多更好的功能出現。

本文內容由阿里雲實名註冊用戶自發貢獻,版權歸原做者全部,阿里雲開發者社區不擁有其著做權,亦不承擔相應法律責任。具體規則請查看《阿里雲開發者社區用戶服務協議》和《阿里雲開發者社區知識產權保護指引》。若是您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將馬上刪除涉嫌侵權內容。
相關文章
相關標籤/搜索