Serverless + CloudFormation 撰寫 lambda

前言

AWS lambda 作為 serverless 服務,之前有介紹過 AWS Lambda 初體驗 by .net core,本次要介紹 serverless 框架搭配 AWS CloudFormation (IaC)

Serverless 預設使用 provider 是 AWS

AWS is the default cloud provider used by Serverless Framework.

建立第一個 serverless

本次案例我們利用 serverless cli 建立 dotnet template,利用 nqm 安裝

1
npm install -g serverless

安裝完後建立一個 dotnet core serverless project

1
serverless create -t aws-csharp -n dotnetServerless

本次使用參數說明

  • –template / -t :Template for the service
  • –name / -n: Name for the service. Overwrites the default name of the created service

跑完命令後會出現下圖專案結構

  • Build script: template 產生 build 專案腳本
    • build.cmd:window 使用
    • build.sh:linux 使用
  • Handler.cs:template 預設 lambda 呼叫點
  • serverless.yml:
    • provider:Serverless Infrastructure Providers AWS,Azure,GCP…
    • service:部署上 serverless 名稱(本次使用 lambda)
    • frameworkVersion:使用 Serverless 版本(建議使用)
    • runtime:運行環境
    • functions:
      • handler:運行執行 serverless entry point

長出來的 serverless.yml 會如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
service: dotnetServerless

frameworkVersion: '3'

provider:
name: aws
runtime: dotnet6

package:
individually: true

functions:
hello:
handler: CsharpHandlers::AwsDotnetCsharp.Handler::Hello

package:
artifact: bin/Release/net6.0/hello.zip

Deploy serverless package

執行 serverless deploy 命令我們會將

預設 Deploy Region : us-east-1 或是使用參數 --region / -r 指定上傳 Region

1
2
3
Deploying dotnetServerless to stage dev (us-east-1)

Service deployed to stack dotnetServerless-dev (113s)

上傳完畢後在 CloudFormation 應該可以看到我們建立資源如下

  • AWS::Lambda::Function
  • AWS::Lambda::Version
  • AWS::Logs::LogGroup
  • AWS::IAM::Role
  • AWS::S3::Bucket
  • AWS::S3::BucketPolicy

在 lambda 會自動建立 dotnetServerless-dev-hello

我們利用 UI 測試 lambda 會得到如下資訊

1
2
3
4
5
6
7
8
{
"Message": "Go Serverless v1.0! Your function executed successfully!",
"Request": {
"Key1": "value1",
"Key2": "value2",
"Key3": "value3"
}
}

lambda ReDeploy

我們稍微更新 lambda 回應資訊

1
2
3
4
public Response Hello(Request request)
{
return new Response("Lambda Upgrade !!", request);
}

再次執行 .\build.cmd & serverless deploy 後並測試 lambda 會得到更新後資訊,讓我們更新 lambda 變得很簡單,是不是很猛

1
2
3
4
5
6
7
8
{
"Message": "Lambda Upgrade !!",
"Request": {
"Key1": "value1",
"Key2": "value2",
"Key3": "value3"
}
}

小結

Serverless 框架搭配 CloudFormation 幫助我們把許多自動化細節封裝起來讓我們只需要關注開發,利用 Serverless cli 我們可以快速把一個 CI/CD lambda 流程建立起來

本次 Sample code 連結 DotNetServerless

此文作者:Daniel Shih(石頭)
此文地址https://isdaniel.github.io/aws-serverless/
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 3.0 TW 許可協議。轉載請註明出處!


如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^