昨天介紹了『在 AWS Lambda 上寫 Go 語言』,無服務器的時代已經來臨,透過昨天的教學,開發者可以很快的用 Go 語言寫簡易的 Restful API 或 GraphQL 服務,直接無痛丟到 AWS Lambda,然而寫完編譯打包上傳整個流程,是非常枯燥乏味的,如何有效地透過自動化工具像是 Jenkins 或 Drone 來達到自動化上傳,減少工程師花時間手動上傳,省下的時間,可以讓工程師多寫個幾行程式碼呢。
上傳 AWS Lambda
要上傳更新 Lambda 服務,步驟很簡單 編譯
=> 打包
=> 上傳
,三個步驟就可以搞定,底下來看看如何執行指令
上傳部分則是可以透過 Web Console 或 AWS CLI,這些步驟可以很輕易的整合進 Jenkins 或其他 CI/CD 服務,但是我個人又開發了 drone-lambda,讓開發者可以不用裝任何套件,就可以跨平台執行 Lambda 上傳。
drone-lambda 功能
drone-lambda 是 Go 語言開發的跨平台 CLI 工具,目前支援 Windows, MacOS, Linux 三種系統環境,開發者可以透過此頁面來下載最新版本。此 CLI 功能如下
- 動態指定 AWS Secret 及 Access Key
- 動態指定 AWS Profile (多環境)
- 支援自動 zip 打包功能
- 支援 Rexp Path (打包多個檔案)
- 支援 zip 上傳
- 支援 s3 bucket 上傳
底下來看看如何使用此工具
透過 zip 檔案上傳
假設已經打包好 zip 檔案,就可以透過底指令上傳
透過 s3 bucket 上傳
前提是 zip 檔案已經在 s3 bucket 內
自動打包上傳
開發者可以指定需要打包的檔案,如果有多個檔案,這邊支援正規語法喔
其中的 main
就是 Go 語言產生的執行檔,使用 --source
好處就是直接幫忙打包成 zip 檔案直接上傳,這樣在 Deploy 流程就可以少一個 zip 步驟。
設定 AWS 權限
由於此工具使用到 AWS Lambda 上傳的功能,所以必須要在 AWS Role 打開底下權限:
注意務必加上 UpdateFunctionCode
。
整合 Drone CI/CD
在 Drone 的 Yaml 檔案設定方式非常容易,請直接參考底下:
其中 aws_access_key_id
及 aws_secret_access_key
可以透過 Web 或 CLI 方式設定。
後記
如果不用 Drone 而是 jenkins 或 GitLab CI,可以直接下載此工具,就可以使用了,也不需要寫任何 Plugin。