無伺服器架構不是真的沒有伺服器,而是將管理伺服器基礎架構的責任轉移到雲服務供應商(AWS、Azure等)身上,從而簡化軟體開發過程,使開發團隊更專注在實現商業邏輯和產品的開發。

基礎設施即代碼 (IaC)

基礎設施即代碼 (IaC)對於軟體開發來說很重要,也是常被忽略的一環。雖然雲服務有提供圖形化的網頁介面控制台來配置無伺服器架構,一開始功能少的時候手動操作還應付得來,但是當功能拆分變多、業務規模變大時,對於測試、部署和環境管理配置就很難達到可重複性和一致性的需求。因此一開始就學習所謂的「正確姿勢」,對於後續開發、維護上的效率就能有所提升。

無伺服器框架可以滿足自動化部署服務的需求,由於我們會將無伺服器搭建在AWS上,所以可以選擇的框架有 AWS SAMServerless 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,需要填寫信用卡資訊才能註冊。註冊資料填寫過程在此不詳述。

aws_sign_up

註冊成功後用 Root user 登入。由於 Root user 具有完全控制的管理員權限,基於安全理由官方建議(AWS account root user credentials and IAM user credentials )應該建立一個 IAM user 來存取 AWS 資源。由於篇幅的關係在此不詳述,附上官方文件操作說明 Creating IAM users (console),希望大家都能遵照這個安全原則進行操作。

aws_sign_in

登入後,接下來建立要給無伺服器框架用的帳號。

和一般帳號的差別在於 AWS credential type 項目只會勾選 「Access key - Programmatic access」,供無伺服器框架存取 AWS 資源使用。

在網頁上方的搜尋列輸入 iam 並點選 IAM 服務。 aws_iam

網頁左側的側邊攔點選 Users ,然後右上角點選 Add users。 aws_iam_users

在 User name 欄位輸入一個好辨識的名稱,AWS credential type 項目勾選 「Access key - Programmatic access」,點選下一步。 aws_iam_add_user_1

這裡要附加 policy 來賦予帳號的存取權限。選擇 Attach existing policies directly 分頁並勾選 「AdministratorAccess」,點選下一步。 aws_iam_add_user_2

tags 這裡留白,點選下一步。 aws_iam_add_user_3

Review 頁面不進行任何操作,點選下一步。 aws_iam_add_user_4

最後一個步驟,可以看到無伺服器部署轉用帳號建立完成,下載 CSV 格式的 credentials 檔案並妥善保存,不要讓其他人輕易取得該檔案。

注意!! AWS僅提供一次 credentials 檔案下載,錯過的話需要重新創建一次帳號才能再次下載。

aws_iam_add_user_5

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


到這裡已經完成了無伺服框架的安裝以及雲端帳號的設定,下一篇我們會建立一個簡單的無伺服器服務。

Reference