Drone Cloud 初體驗 — 自動化部屬 Nodejs Function 到 AWS Lambda

栏目: Node.js · 发布时间: 5年前

Drone Cloud 初體驗 — 自動化部屬 Nodejs Function 到 AWS Lambda

不知道各位有沒有聽說最近有一個新的 CI(持續整合)服務 Drone Cloud 上線了,因為他免費提供給 開源專案 使用,筆者我身為一個免費服務愛好者當然要趕快來用用看

考慮到可能有人不知道什麼是 CI,我這邊簡單說明一下:

CI 全名 Continuous Integration,可以在你每次 push 時幫你跑測試、壓縮、ssh 到機器、部屬新版本等等,如果中途出了差錯也可以在第一時間透過 slack 或是 email 通知開發人員

設定好 CI 後就可以專心在開發,不用每次開發完都手動做那些雜事,算一下如果這些雜事每天要花你 3分鐘,那你花一個小時把 CI 設定好一年下來就可以省下 18 個小時,夠划算吧!

到這邊我想大家對 CI 的應用都有些認識了,那 CI 服務那麼多,除了 Drone 之外還有TravisCI、CircleCI 等等,Drone 有什麼獨特之處嗎?

Drone 最厲害的地方在於 可以直接使用 Docker image 作為 plugin ,目前 Docker Hub 大平台上有將近四十萬個 image,因此 Drone 天生就有很多 plugin 可以用,不像 TravisCI 要測試哪個 Nodejs 版本還得等官方支援

接著就進入今天的主題吧,今天的重點在於講解怎麼串接 Drone Cloud,所以我想了一個簡單的題目: 自動化部屬 Nodejs Function 到 AWS Lambda ,完成後只要在本地端開發推上 Github 就會自動部屬到 Lambda,是不是很方便呢~

我猜大家應該都聽過 AWS Lambda,筆者我這邊就不再贅述,如果你完全不知道 Lambda 是什麼,建議先 Google 了解一下再繼續往下讀

這篇文章會分成以下幾個步驟:

  1. 在 AWS Lambda 上新增 function
  2. 在 AWS IAM 上新增使用者
  3. 整合 Drone Cloud
  4. 實作 handler
  5. 撰寫 .drone.yml

Step 1 — 在 AWS Lambda 上新增 function

到 AWS Lambda Management Console 上面點選「建立函式」,我是選在 us-west-1 (N. California) 區,如果你想部屬在其他區域也可以,建立一個 function 叫做 helloWorld

Drone Cloud 初體驗 — 自動化部屬 Nodejs Function 到 AWS Lambda

接著還要新增一個 API Gateway,讓外部可以透過 HTTP 觸發 function

Drone Cloud 初體驗 — 自動化部屬 Nodejs Function 到 AWS Lambda

新增完 API Gateway 會得到一個 API Endpoint,到那個網址看到 Hello from Lambda! 就是成功了~

Drone Cloud 初體驗 — 自動化部屬 Nodejs Function 到 AWS Lambda

Step 2 — 在 AWS IAM 上新增使用者

為了讓 Drone 有權限操作 AWS Lambda,必須先到 AWS IAM 上新增一個使用者,這樣 Drone 才有權部屬 function

Drone Cloud 初體驗 — 自動化部屬 Nodejs Function 到 AWS Lambda

新增一個 user 叫做 lambda-user 然後給他 Lambda 的 Full Access

Drone Cloud 初體驗 — 自動化部屬 Nodejs Function 到 AWS Lambda

新增完使用者會得到一組 Access key ID 跟 Secret access key,這組 key 有操作 Lambda 的權限,所以千萬千萬不要把 key 外洩出去

Drone Cloud 初體驗 — 自動化部屬 Nodejs Function 到 AWS Lambda

Step 3 — 整合 Drone Cloud

前面有提到 Drone Cloud 只免費提供給開源專案使用,所以你的專案必須在 Github 上開源,以下會用我自己的 nodejs-drone-lambda-example 做示範

Drone Cloud 登入後啟用自己的專案

Drone Cloud 初體驗 — 自動化部屬 Nodejs Function 到 AWS Lambda

為了讓 Drone 可以存取 AWS,要把剛剛的 key 新增到 Secrets 裡面,之後就可以直接指定變數名稱,不會因為開源了導致 key 被看光光

Drone Cloud 初體驗 — 自動化部屬 Nodejs Function 到 AWS Lambda

Step 4 — 實作 handler

handler 非常簡單,就只是一個 function 而已,這邊什麼都不做就只回覆 Hello World

// index.js
exports.handler = async function(event, context) {
  const response = {
    statusCode: 200,
    body: JSON.stringify('Hello World'),
  }
  return response
}

Step 5 — 撰寫 .drone.yml

接下來就是最重要的 .drone.yml ,為了讓 Drone Cloud 完成自動部屬,要把部屬的流程寫在這個檔案裡面,寫完之後 Drone 就會照著流程跑

以 AWS Lambda 來說部屬分成兩個步驟,第一步是要把程式碼壓縮變成一個 zip 檔,這一步我用的是 Docker Hub 上的 alpine Linux ,在 alpine 裡面把所以檔案包裝成一個 handler.zip

kind: pipeline
name: default
steps:
  - name: zip
    image: alpine
    commands:
      - apk update && apk add zip
      - zip -r handler.zip *

第二步要把 zip 檔部屬到 AWS Lambda,這邊會用到 mesosphere/aws-cli 這個 image,搭配剛剛寫在 Secret 內的 access_key 就可以把 handler.zip 部屬到 Lambda 上,簡單吧!

steps:
  ...
- name: deploy-lambda
    image: mesosphere/aws-cli
    environment:
      AWS_ACCESS_KEY_ID:
        from_secret: aws_access_key_id
      AWS_SECRET_ACCESS_KEY:
        from_secret: aws_secret_access_key
      AWS_DEFAULT_REGION: us-west-1
    commands:
      - aws lambda update-function-code --function-name helloWorld --zip-file fileb://./handler.zip

接著只要你有新的 commit 被 push 到 Github 上, Drone Cloud 就會自動 clone 最新的進度 -> 壓縮成 handler.zip -> 部屬到 Lambda,如果哪個步驟出錯了也可以看 log 找到錯誤

Drone Cloud 初體驗 — 自動化部屬 Nodejs Function 到 AWS Lambda

部屬完到 AWS Lambda 上看確實已經變成剛剛寫上去的 Hello World ,這樣以後就可以在本地端開發了,寫完 push 上去 Drone 就會自動部屬上去

Drone Cloud 初體驗 — 自動化部屬 Nodejs Function 到 AWS Lambda

另外如果想要做到部屬完通知的功能,可以參考 EmailSlack 這兩個 plugin, 若是想部屬到 GCP 的 Cloud Function 或是 App Engine 之類的也可以使用 google/cloud-sdk 這個 image

總結

這次用 Drone 搭配 AWS Lambda 做了一個小 Demo,筆者我自己很看好 Drone 的發展,因為他直接支援 Docker image 而且 pipeline 可以一直串,能做的事真的非常多, Drone 自己就用了 14 個 step 來進行測試、build、發佈新版本,設定寫起來也簡單明瞭

雖然 Drone Cloud 只支援開源專案,但因為 Drone 是開源的,如果私人專案想要用的話也可以 自己架一個 Drone server ,很適合公司內部或個人使用

如果對文中哪個步驟有疑問的話歡迎在底下留言, 我會盡量回答,如果覺得文章實用的話也可以幫我拍拍手, 一個人最多可以拍五十次所以請不要吝嗇你的掌聲XD,謝謝大家

參考資料


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

颠覆营销

颠覆营销

陈杰豪、车品觉 / 中信出版社 / 2016-2 / 49.00元

对于大数据未来趋势的判断 车品觉 光阴荏苒,2015年在跌跌荡荡中成了过去式,对于大数据的产业来说过去这一年冒出了很多新的名词。但在我看来,真正的大数据应用和市场才刚刚开始萌芽,所以我希望大家先认清一个关键,那就是所有的数据都是基于应用而产生,而数据经过釆集及整合后又再落实到自身或其他应用情境中,大数据的创新价值可以来自新连接的数据、算法或者产品本身。 过去两年大数据的成长和智能......一起来看看 《颠覆营销》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具