![Screen Shot 2018-10-24 at 9.37.49 AM]()
看到這標題也許非常聳動,也可能覺得不可思議,今天來探討如何將專案直接部署到
AWS Lambda 並且自動化將
API Gateway 設定完成。當然要做到完全自動化,必須要使用一些工具才能完成,本篇將介紹由
TJ 所開發的
apex/up 工具,如果您不熟悉 EC2 也不太懂 Command line 操作,本文非常適合您,不需要管理任何 EC2 機器,也不需要在熟悉任何 Linux Command 就可以完成簡單的專案部署。首先為什麼我選擇 apex/up 而不是選擇
apex/apex,原因是使用 up 工具,您的專案是不用更動任何程式碼,就可以將專案直接執行在 AWS Lambda,那 API Gateway 部分也會一並設定完成,將所有 Request 直接 Proxy 到該 Lambda function。如果您希望對於 AWS Lambda 有更多進階操作,我會建議您用
apex/apex 或
Serverless。您可以想像使用 up 就可以將 AWS Lambda 當作小型的 EC2 服務,但是不用自己管理 EC2,現在 up 支援
Golang,
Node.js,
Python 或 Java 程式語言,用一行 command 就可以將專案部署到雲端了。
影片教學
本系列影片不只有介紹 up 工具,還包含『設定 custom domain 在 API Gateway』及『用 drone 搭配 apex/up 自動化部署 AWS Lambda』。有興趣可以參考底下:
- 使用 apex/up 工具部署 Go 專案到 AWS Lambda Youtube, Udemy
- 設定 Custom Domain Names 在 API Gateway 上 Udemy
- 用 drone-apex-up 自動化更新 Go 專案到 AWS Lambda Udemy
買了結果沒興趣想退費怎麼辦?沒關係,在 Udemy 平台 30 天內都可以全額退費,所以不用擔心買了後悔。如果你對 Go 語言 (現在 $1800) 及 Drone 自動化部署 (現在 $1800) 都有興趣,想要一起購買,你可以直接匯款到底下帳戶,有合購優惠價
- 富邦銀行: 012
- 富邦帳號: 746168268370
- 匯款金額: 台幣 $3400 元
使用 up 工具
up 可以在幾秒鐘的時間將專案直接部署到 AWS Lambda,透過 up 可以快速將 Staging 及 Productoon 環境建置完成。底下直接用 GO 語言當例子。
package main
import (
"os"
"github.com/gin-gonic/gin"
)
func main() {
port := ":" + os.Getenv("PORT")
stage := os.Getenv("UP_STAGE")
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong " + stage,
})
})
r.GET("/v1", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong " + stage + " v1 ++ drone",
})
})
r.Run(port)
}
接著在專案內放置
up.json
檔案,內容如下:
{
"name": "demo",
"profile": "default",
"regions": [
"ap-southeast-1"
]
}
name
代表 aws lambda 函數名稱,
profile
會讀
~/.aws/credentials
底下的 profile 設定。接著執行
up -v
$ up -v
![up_json_—_training]()
從上圖可以看到預設編譯行為是
$ GOOS=linux GOARCH=amd64 go build -o server *.go
並且上傳完成後會將
server
移除。登入 AWS Lambda 入口,可以看到 up 幫忙建立了兩個環境,一個是
staging
另一個是
production
,假設要部署專案到 production 環境可以下
$ up deploy production -v
部署完成後,可以直接透過 up 拿到 API Gateway 給的測試 URL,可以在瀏覽器瀏覽
$ up url
https://xxxxxxx.execute-api.ap-southeast-1.amazonaws.com/staging/
當然也可以到 API Gateway 那邊設定好 Custom Domain 就可以直接用自己的 Domain,而不會有
/staging/
字眼在 URL 路徑上。
搭配 Drone 自動化部署
在自己電腦測試完成後,接著要設定 CI/CD 來達到自動化部署,本文直接拿
Drone 來串接。底下是 .drone.yml 設定檔
pipeline:
build:
image: golang:1.11
pull: true
environment:
TAGS: sqlite
GO111MODULE: "on"
commands:
- cd example23-deploy-go-application-with-up && GOOS=linux GOARCH=amd64 go build -o server *.go
up:
image: appleboy/drone-apex-up
pull: true
secrets: [aws_secret_access_key, aws_access_key_id]
stage:
- staging
directory: ./example23-deploy-go-application-with-up
when:
event: push
branch: master
up:
image: appleboy/drone-apex-up
pull: true
secrets: [aws_secret_access_key, aws_access_key_id]
stage:
- production
directory: ./example23-deploy-go-application-with-up
when:
event: tag
上面可以很清楚看到,只要是 push 到 master branch 就會觸發 staging 環境部署。而下 Tag 則是部署到 Production。要注意的是由於 up 會有預設編譯行為,但是專案複雜的話就需要透過其他指令去執行。只要去蓋掉預設行為就可以。
{
"name": "demo",
"profile": "default",
"regions": [
"ap-southeast-1"
],
"hooks": {
"build": [
"up version"
],
"clean": [
]
}
}
看到
hooks
階段,其中 build 部分需要填寫,不可以是空白。
心得
如果您想快速的架設好 API 後端,或者是靜態網站,我相信 up 是一套不錯的工具,可以快速架設好開發或測試環境。而且可以省下不少開 EC2 費用,如果有興趣的話大家可以參考看看 up 工具。