用 GitHub Actions, Drone CI 或 GitLab CI 部署 AWS Lambda
source link: https://blog.wu-boy.com/2020/10/deploy-lambda-github-actions-drone-ci-gitlab-ci/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
用 GitHub Actions, Drone CI 或 GitLab CI 部署 AWS Lambda
最近剛好把 drone-lambda 新增了一些新的功能,也就是可以透過 CI/CD 的方式來更新 AWS Lambda 基本設定,像是 Memory Size, Handler, Timeout, Runtime 或 Role 等 …,趁這機會寫篇教學紀錄如何透過 GitHub Actions, Drone CI 或 GitLab CI 部署 AWS Lambda。這三套部署方式都是透過 drone-lambda 包好的 Image 來進行。底下的程式碼都可以在這邊找到。
如果對於課程內容有興趣,可以參考底下課程。
如果需要搭配購買請直接透過 FB 聯絡我,直接匯款(價格再減 100)
GitHub Actions
此篇直接用 Go 語言的範例來進行線上部署,GitHub Actions 直接使用 lambda-action。
name: deploy to lambda
on: [push]
jobs:
deploy_zip:
name: deploy lambda function from zip
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [1.15.x]
steps:
- name: checkout source code
uses: actions/checkout@v1
- name: Install Go
uses: actions/setup-go@v1
with:
go-version: ${{ matrix.go-version }}
- name: Build binary
run: |
cd example && GOOS=linux go build -v -a -o main main.go && zip deployment.zip main
- name: deploy zip
uses: appleboy/[email protected]
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ${{ secrets.AWS_REGION }}
function_name: gorush
zip_file: example/deployment.zip
debug: true
首先第一個步驟就是編譯 Binary 接著打包成 zip 檔案後,才可以進行部署,接著在 Plugin 寫上 function name 跟 zip 檔案路徑就可以直接更新到 AWS Lambda 了。
Drone CI
---
kind: pipeline
name: testing
platform:
os: linux
arch: amd64
steps:
- name: build
image: golang:1.15
commands:
- apt-get update && apt-get -y install zip
- cd example && GOOS=linux go build -v -a -o main main.go && zip deployment.zip main
- name: deploy-lambda
image: appleboy/drone-lambda
settings:
pull: true
aws_access_key_id:
from_secret: AWS_ACCESS_KEY_ID
aws_secret_access_key:
from_secret: AWS_SECRET_ACCESS_KEY
aws_region:
from_secret: AWS_REGION
function_name: gorush
zip_file: example/deployment.zip
debug: true
寫法跟 GitHub Actions 非常類似,因為在同一個 Piepline,所以可以在第一個步驟產生出來的 zip 檔案,也可以在第二個步驟部署。
GitLab CI
其實 GitLab CI 已經有寫一篇完整的教學,裡面用的是 Server less 框架來部署程式碼,所以開發者還需要看一下怎麼使用此框架,相對來說比較難上手,那底下來介紹用 drone-lambda 方式來進行部署。
variables:
ARTIFACTS_DIR: artifacts
GIT_DEPTH: 1
before_script:
- mkdir -p ${CI_PROJECT_DIR}/${ARTIFACTS_DIR}
stages:
- build
- deploy
build:
image: golang:1.15
stage: build
script:
- apt-get update && apt-get -y install zip
- cd example && GOOS=linux go build -v -a -o main main.go && zip deployment.zip main
- mv deployment.zip ${CI_PROJECT_DIR}/${ARTIFACTS_DIR}/
artifacts:
paths:
- ${ARTIFACTS_DIR}
deploy:
image: appleboy/drone-lambda
variables:
FUNCTION_NAME: 'gorush'
DEBUG: 'true'
ZIP_FILE: '${CI_PROJECT_DIR}/${ARTIFACTS_DIR}/deployment.zip'
GIT_STRATEGY: none
stage: deploy
artifacts:
paths:
- ${ARTIFACTS_DIR}
script:
- /bin/drone-lambda
在 GitLab CI 比較不同的是,每個步驟都是需要重新 git clone 整個專案,步驟結束,就會把整個容器砍掉,包含整個 Project Data,這邊就需要透過 artifacts 來共享資料。詳細資料可以參考艦長寫的這篇『CI/CD Pipeline 之 stage: build』
目前使用起來 GitHub Action 跟 Drone CI 行為是一致的,反倒是使用 GitLab CI 之後,需要多了解 artifacts 這塊,才可以完成整個串接。
Author appleboyPosted on 2020/10/262020/11/24Categories DevOps, Drone CITags AWS Lambda, drone ci, GitHub Actions, GitLab CI
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK