無伺服器架構不是真的沒有伺服器,而是將管理伺服器基礎架構的責任轉移到雲服務供應商(AWS、Azure等)身上,從而簡化軟體開發過程,使開發團隊更專注在實現商業邏輯和產品的開發。
基礎設施即代碼 (IaC)
基礎設施即代碼 (IaC)對於軟體開發來說很重要,也是常被忽略的一環。雖然雲服務有提供圖形化的網頁介面控制台來配置無伺服器架構,一開始功能少的時候手動操作還應付得來,但是當功能拆分變多、業務規模變大時,對於測試、部署和環境管理配置就很難達到可重複性和一致性的需求。因此一開始就學習所謂的「正確姿勢」,對於後續開發、維護上的效率就能有所提升。
無伺服器框架可以滿足自動化部署服務的需求,由於我們會將無伺服器搭建在AWS上,所以可以選擇的框架有 AWS SAM 和 Serverless Framework。兩個都是開源框架,但是前者是專門針對 AWS 服務所開發的,而後者則支援多個不同的雲端供應商,如果後續要轉換到其他雲端進行開發,則框架還可以繼續沿用。
本文選擇使用 Serverless Framework 作為本次搭建的工具。
安裝 Serverless Framework
使用 Node.js 套件管理器 NPM 來安裝 serverless CLI:
npm install -g serverless
官方也有提供 binary 執行檔的安裝方法 Installing Serverless Framework as a standalone binary
安裝完後輸入下方指令檢查一下,確認執行路徑有指向安裝框架的位置:
serverless --version
註冊 AWS 並創建 Programmatic access 帳號
如果你沒有 AWS 帳號,首先要去註冊(sign up)一個 Root user,需要填寫信用卡資訊才能註冊。註冊資料填寫過程在此不詳述。
註冊成功後用 Root user 登入。由於 Root user 具有完全控制的管理員權限,基於安全理由官方建議(AWS account root user credentials and IAM user credentials )應該建立一個 IAM user 來存取 AWS 資源。由於篇幅的關係在此不詳述,附上官方文件操作說明 Creating IAM users (console),希望大家都能遵照這個安全原則進行操作。
登入後,接下來建立要給無伺服器框架用的帳號。
和一般帳號的差別在於 AWS credential type 項目只會勾選 「Access key - Programmatic access」,供無伺服器框架存取 AWS 資源使用。
在網頁上方的搜尋列輸入 iam 並點選 IAM 服務。
網頁左側的側邊攔點選 Users ,然後右上角點選 Add users。
在 User name 欄位輸入一個好辨識的名稱,AWS credential type 項目勾選 「Access key - Programmatic access」,點選下一步。
這裡要附加 policy 來賦予帳號的存取權限。選擇 Attach existing policies directly 分頁並勾選 「AdministratorAccess」,點選下一步。
tags 這裡留白,點選下一步。
Review 頁面不進行任何操作,點選下一步。
最後一個步驟,可以看到無伺服器部署轉用帳號建立完成,下載 CSV 格式的 credentials 檔案並妥善保存,不要讓其他人輕易取得該檔案。
注意!! AWS僅提供一次 credentials 檔案下載,錯過的話需要重新創建一次帳號才能再次下載。
serverless CLI 設定 credentials
打開終端機輸入以下指令,把 credentials 檔案中的 Access key ID 和 Secret access key 對應到指令 --key
和 --secret
參數。
serverless config credentials --provider aws --key <access_key_id> --secret <secret_access_key>
AWS 憑證資訊會被寫入 ~/.aws
(Unix/Linux) 或 C:\Users\<username>\.aws
(Windows) 路徑下的 credentials
檔案,如下所示:
[default]
aws_access_key_id=AKIXXXXXXXXXXXXXXXXX
aws_secret_access_key=cxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
到這裡已經完成了無伺服框架的安裝以及雲端帳號的設定,下一篇我們會建立一個簡單的無伺服器服務。