在雲端上部署應用程式
在設計和開發雲端應用程式之後,可將其移至部署階段以發行至用戶端。 部署可以是多重階段程序,每個階段都牽涉到一系列檢查,以確保達成應用程式的目標。
將雲端應用程式部署到生產環境之前,有一個檢查清單來協助根據基本和建議最佳做法清單評估應用程式會很有幫助。 範例包括來自 AWS 和 Azure 的部署檢查清單。 許多雲端提供者會提供完整的工具和服務清單來協助進行部署,例如來自 Azure 的這份文件。
部署程序
雲端應用程式部署是一個反覆程序,從開發結束時開始,並繼續直到應用程式在生產資源上發行為止:
圖 1:程式碼部署程序
雲端開發人員通常會維護多個同時執行的應用程式版本,以將其應用程式的部署傳輸到不同階段:
- 測試
- 預備
- 生產環境
在理想的情況下,這三個階段應該具有相同的資源和設定,讓開發人員能夠測試和部署應用程式,並將因環境和設定變更所造成的不一致機率降到最低。
傳輸應用程式變更
在典型的敏捷應用程式開發案例中 (如上圖所示),應用程式是由一組工程師和開發人員來維護,這些人員會使用某種問題追蹤機制來處理問題和 Bug。 程式碼的變更是透過程式碼存放庫系統 (例如 svn
、mercurial
或 git
) 來維護,其中會針對程式碼版本維護個別的分支。 當程式碼通過變更、檢閱與核准之後,即可將其傳輸到測試、預備和生產階段。 這可透過多種方式來完成:
自訂指令碼:開發人員可使用自訂指令碼來提取最新版的程式碼,並執行特定命令來建置應用程式,使其進入生產狀態。
預建虛擬機器映像:開發人員也可以佈建和設定虛擬機器的所有必要環境和軟體,以部署其應用程式。 一旦完成設定,就可以建立虛擬機器的快照集,並將其匯出至虛擬機器映像。 此映像可提供給各種雲端協調流程系統,以便針對生產部署自動進行部署和設定。
持續整合系統:為了簡化部署中牽涉到的各種工作,您可使用持續整合 (CI) 工具,將必須在組成生產基礎結構的各種電腦上所完成工作自動化 (例如從存放庫擷取最新版本、建置應用程式二進位檔,以及執行測試案例)。 熱門 CI 工具的範例包括 Jenkins、Bamboo 和 Travis。 Azure Pipelines 是專為進行 Azure 部署所設計的 Azure 特定 CI 工具。
管理停機
應用程式的特定變更可能需要部分或完全終止應用程式服務,才能在應用程式的後端納入變更。 開發人員通常必須排程一天中的特定時間,以將對應用程式客戶的干擾降到最低。 專為持續整合所設計的應用程式,可在生產系統上即時執行這些變更,因此很少或完全不會干擾應用程式的用戶端。
備援與容錯
應用程式部署的最佳做法通常會假設雲端基礎結構為暫時性,且隨時可能無法使用或隨時可能變更。 例如,部署在 IaaS 服務中的虛擬機器,可能會排程為由雲端提供者根據 SLA 的類型自行決定何時終止。
應用程式必須避免針對各種元件進行硬式編碼或假設靜態端點 (例如資料庫和儲存體端點)。 在理想的情況下,設計良好的應用程式應該會使用服務 API 來查詢和探索資源,並以動態方式連線到這些資源。
資源或連線的重大失敗可能會在未預警情況下發生。 重大應用程式必須設計成可預期這類失敗,且必須設計成具備容錯備援能力。
許多雲端提供者會分地區和區域來設計其資料中心。 地區是設置完整資料中心的特定地理位置,而區域則是資料中心內已針對容錯進行隔離的個別區段。 例如,資料中心內的兩個或多個區域可能會有不同的電源、冷卻和連線基礎結構,因此一個區域中錯誤不會影響另一個區域中的基礎結構。 地區和區域資訊通常是由雲端服務提供者提供給用戶端和開發人員,以設計和開發可利用此隔離屬性的應用程式。
因此,開發人員可將其應用程式設定為使用多個地區或區域中的資源,以改善其應用程式的可用性,並容許區域或地區內可能發生的失敗。 其必須設定可跨地區和區域路由傳送和平衡流量的系統。 DNS 伺服器也可以設定為根據要求來源來回覆每個區域中特定 IP 位址的網域查閱要求。 這會提供以用戶端地理近接為依據的負載平衡方法。
生產環境中的安全性和強化
您必須謹慎執行公用雲端上的網際網路應用程式。 由於雲端 IP 範圍是高價值目標的已知位置,因此請務必確保雲端上部署的所有應用程式都遵循最佳做法來保護和強化端點和介面。 一些應遵循的最基本原則包括:
- 所有軟體都應該切換到生產模式。 大部分軟體都支援本機測試的「偵錯模式」和實際部署的「生產模式」。 偵錯模式應用程式通常會將大量資訊洩漏給傳送格式錯誤輸入的攻擊者,因而為駭客提供容易偵察的來源。 無論您使用的是 Django 和 Rails 之類的 Web 架構,或 Oracle 等資料庫,都請務必遵循部署生產應用程式的相關指導方針。
- 對非公用服務的存取應該僅限於特定內部 IP 位址,以取得系統管理員存取權。 確定系統管理員無法在未瀏覽內部啟動控制板的情況下,直接從網際網路登入重大資源。 使用以 IP 位址和連接埠為基礎的規則來設定防火牆,以允許一組基本的必要存取權,特別是透過 SSH 及其他遠端連線工具。
- 遵循最低權限原則。 以可執行必要角色的最低權限使用者身分來執行所有服務。 限制只有需要對系統中一些重大問題進行偵錯或設定的系統管理員,才能使用根認證進行特定手動登入。 這也適用於對資料庫和系統管理面板進行存取。 通常應該使用很長的隨機公開-私密金鑰組來保護存取,且此金鑰組應該安全地儲存在受限制和加密的位置。 所有密碼都應該具有嚴格的強度需求。
- 針對入侵偵測和預防系統 (IDS/IPS)、安全性資訊和事件管理 (SIEM)、應用程式層防火牆,以及反惡意程式碼系統,使用已知的防禦技術和工具。
- 設定與您所使用系統廠商其修補程式發行日期一致的修補排程。 通常,Microsoft 之類廠商的修補程式發行週期為固定。