🚫 Ad Blocker Detected

Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker

請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面

0%

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
18
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 許可協議。轉載請註明出處!

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