前言 AWS 在有眾多服務,其中我對於 Lambda 最有興趣 (因為 .net 有一個 Lambda 表達式 )
最近申辦帳號可以使用 12 個月部分免費服務(有條件限制),看我還不玩爆 AWS XD
經過了解得知 Lambda 是一個 EDA 架構並幫我們解決開發時需要煩惱硬體上配置(記憶體要多少,CPU,是否需要 load balance scale out…),做一個 serverless 服務
讓我們可以專心開發程式,本篇會針對 .net core 建立一個 sample 專案到上傳到 AWS Lambda 服務上說明
安裝aws cli & 設定 profile 首先我們需要先安裝 aws cli
,如果是 windows 我們可以透過 powershell,來完成
1 C:\> msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
1 2 $ aws --version aws-cli /2.2 .44 Python/3.8 .8 Windows/10 exe/AMD64 prompt/off
確定安裝完後我們可以執行 aws configure
設定我們 AWS 服務相關 IAM 資訊
設定完成後 %userprofile%\.aws
上會有兩個檔案
裡面就是你剛剛設定的檔案
AWS .net core Lambda 我們在開啟 powershell 並執行安裝 Amazon.Lambda.Tools
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 dotnet tool install -g Amazon.Lambda.Tools $ dotnet new --install Amazon.Lambda::5.2 .0 範本名稱 簡短名稱 語言 標記 ---------------------------------------------------- -------------------------------------------- ---------- ---------------------- Order Flowers Chatbot Tutorial lambda.OrderFlowersChatbot [C Lambda Custom Runtime Function (.NET 5 ) lambda.CustomRuntimeFunction [C Lambda Detect Image Labels lambda.DetectImageLabels [C Lambda Empty Function lambda.EmptyFunction [C Lambda Empty Function (.NET 5 Container Image ) lambda.image.EmptyFunction [C Lex Book Trip Sample lambda.LexBookTripSample [C Lambda Simple Application Load Balancer Function lambda.SimpleApplicationLoadBalancerFunction [C Lambda Simple DynamoDB Function lambda.DynamoDB [C Lambda Simple Kinesis Firehose Function lambda.KinesisFirehose [C Lambda Simple Kinesis Function lambda.Kinesis [C Lambda Simple S3 Function lambda.S3 [C Lambda Simple SNS Function lambda.SNS [C Lambda Simple SQS Function lambda.SQS [C Lambda ASP.NET Core Web API serverless.AspNetCoreWebAPI [C Lambda ASP.NET Core Web API (.NET 5 Container Image ) serverless.image.AspNetCoreWebAPI [C Lambda ASP.NET Core Web Application with Razor Pages serverless.AspNetCoreWebApp [C Serverless Detect Image Labels serverless.DetectImageLabels [C Lambda DynamoDB Blog API serverless.DynamoDBBlogAPI [C Lambda Empty Serverless serverless.EmptyServerless [C Lambda Empty Serverless (.NET 5 Container Image ) serverless.image.EmptyServerless [C Lambda Giraffe Web App serverless.Giraffe F Serverless Simple S3 Function serverless.S3 [C Step Functions Hello World serverless.StepFunctionsHelloWorld [C Serverless WebSocket API serverless.WebSocketAPI [C ..... Examples : dotnet new mvc --auth Individual dotnet new console dotnet new --help dotnet new serverless.AspNetCoreWebAPI --help
我們可以看到 AWS Lambda 有許多專案可以使用
接著我們新增一個 lambda.EmptyFunction
專案
1 dotnet new lambda.EmptyFunction --name LambdaDemo
資料夾結構如下
aws-lambda-tools-defaults.json
檔案掌管我們 deploy AWS Lambda 相關資訊
1 2 3 4 5 6 7 8 9 10 { "profile" : "default" , "region" : "ap-northeast-1" , "configuration" : "Release" , "framework" : "netcoreapp3.1" , "function-runtime" : "dotnetcore3.1" , "function-memory-size" : 256 , "function-timeout" : 30 , "function-handler" : "LambdaDemo::LambdaDemo.Function::FunctionHandler" }
profile:使用設定 IAM 哪組帳號
region:上傳到哪個 region
function-handler:執行 Lambda方法名稱 (因為 Lambda 使用 EDA 架構,所以核心概念在事件方法)
建立第一個 Lambda 程式 在專案中有一個 Function
類別裡面有一個 FunctionHandler
可以對應到 config 中 function-handler:LambdaDemo::LambdaDemo.Function::FunctionHandler
其中方法有兩個參數
string input
:呼叫 Lambda 實傳入參數
ILambdaContext context
:Lambda 當前相關資訊上下文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer)) ] namespace LambdaDemo { public class Function { public string FunctionHandler (string input, ILambdaContext context ) { context.Logger.Log($"AwsRequestId {context.AwsRequestId} " ); context.Logger.Log($"FunctionName {context.FunctionName} " ); context.Logger.Log($"LogStreamName {context.LogStreamName} " ); context.Logger.Log($"MemoryLimitInMB {context.MemoryLimitInMB} " ); return input?.ToUpper(); } } }
改完專案後我們就可以把程式碼上傳到 AWS 上面搂
上傳第一個 Lambda 程式 我們在專案跟目錄呼叫 dotnet lambda deploy-function mylambda
就會開始執行打包上傳到 Lambda 上
後面我們登入 AWS Lambda 服務可以看到我們第一個 Lambda 服務會自己建立起來
透過打測試,我們可以看到服務正常運作
查看日誌詳細內容可以看到輸出會把我們傳入參數全部轉成大寫(如程式碼邏輯運作)
小結 Lambda 除了上面我說的功能外它還可以跟其他 AWS 服務做串接連動,做到類似 pipeline 效果,有了 Lambda 我們開發人員可以更關注在邏輯開發,對於硬體上的考慮可以少很多交由 AWS 幫我們處理.
__此文作者__:Daniel Shih(石頭) __此文地址__: https://isdaniel.github.io/aws-first-lambda/ __版權聲明__:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 3.0 TW 許可協議。轉載請註明出處!