c# & aws lambda
TRANSCRIPT
![Page 1: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/1.jpg)
C# on AWS Lambda
1 @phermens
![Page 2: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/2.jpg)
About me
Pat Hermens
● Father of two
● Based in Rotterdam
● Lead Developer at Coolblue
● Still have a soft-spot for VB6
https://hermens.com.au/ 2
@phermens
![Page 3: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/3.jpg)
Every day a little more Dutch
3
![Page 4: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/4.jpg)
A little bit of history
4 @phermens
![Page 5: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/5.jpg)
Launched in Nov 2014.5
@phermens
![Page 6: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/6.jpg)
C# support in Dec 2016.6
@phermens
![Page 7: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/7.jpg)
Officially only supports .NET Core.7
@phermens
![Page 8: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/8.jpg)
AWS was first of the “major providers”.8
@phermens
![Page 9: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/9.jpg)
They have an open-source SDKhttps://github.com/aws/aws-sdk-net/ 9
@phermens
![Page 10: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/10.jpg)
They also have a great ‘dotnet’ repo…https://github.com/aws/aws-lambda-dotnet/ 10
@phermens
![Page 11: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/11.jpg)
… & most of my tooling is from here11
@phermens
![Page 12: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/12.jpg)
It’s “Hello world” time!
12 @phermens
![Page 13: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/13.jpg)
13 @phermens
Hello World! (including ILambdaContext)
![Page 14: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/14.jpg)
“Relatively simple” configuration14
@phermens
![Page 15: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/15.jpg)
Wait, we need more than code!
15 @phermens
![Page 16: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/16.jpg)
16 @phermens
Set up an account
![Page 17: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/17.jpg)
Install the CLI
17 @phermens
![Page 18: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/18.jpg)
18 @phermens
![Page 19: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/19.jpg)
19 @phermens
Regions? AZ’s?
![Page 20: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/20.jpg)
20 @phermens
IAM?
![Page 21: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/21.jpg)
21 @phermens
Required values can be set in code!
![Page 22: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/22.jpg)
22 @phermens
… or on the command line!
![Page 23: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/23.jpg)
NOW it’s “Hello world” time!
23 @phermens
![Page 24: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/24.jpg)
24 @phermens
Hello World! (including ILambdaContext)
![Page 25: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/25.jpg)
Deploying “Hello-World”
25 @phermens
![Page 26: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/26.jpg)
26 @phermens
Running deploy-function & invoke-function
![Page 27: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/27.jpg)
Calling our “Hello” function
27 @phermens
![Page 28: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/28.jpg)
28 @phermens
We can use the ‘Amazon’ NuGet package(s)
![Page 29: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/29.jpg)
We can use AWS SNS29
@phermens
![Page 30: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/30.jpg)
We can use any ‘webhook’-type integration30
@phermens
![Page 31: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/31.jpg)
Creating a “Hello-World-Caller”
31 @phermens
![Page 32: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/32.jpg)
32 @phermens
Pretty straightforward using the SDK
![Page 33: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/33.jpg)
Just F5 in VS Code!33
@phermens
![Page 34: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/34.jpg)
Larger architectures?
34 @phermens
![Page 35: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/35.jpg)
Our “infra team” had a fun exercise...35
@phermens
![Page 36: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/36.jpg)
CloudFormation - scripted infrastructure36
@phermens
![Page 37: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/37.jpg)
Normally looks like this...37
@phermens
![Page 38: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/38.jpg)
… but can also look like this!38
@phermens
![Page 39: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/39.jpg)
“Add trigger” to your Lambda39
@phermens
![Page 40: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/40.jpg)
Pick your integration - whatever you want!40
@phermens
![Page 41: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/41.jpg)
Or just, “deploy-serverless” with the CLI41
@phermens
![Page 42: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/42.jpg)
AWS Serverless Application Modelhttp://github.com/awslabs/ 42
@phermens
![Page 43: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/43.jpg)
http://serverless.com/framework/docs/ 43
@phermens
![Page 44: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/44.jpg)
So, what does this mean for Coolblue?44
@phermens
![Page 45: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/45.jpg)
This makes it look simple!45
@phermens
![Page 46: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/46.jpg)
Let’s recap some “gotchas”
46 @phermens
![Page 47: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/47.jpg)
47 @phermens
Timings can vary wildly!
![Page 48: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/48.jpg)
Default values can bite you!48
@phermens
![Page 49: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/49.jpg)
Know your costs! 800,000 sec = 9.25 dayshttps://aws.amazon.com/lambda/pricing/ 49
@phermens
![Page 50: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/50.jpg)
Almost everything is case-sensitive!50
@phermens
PS> dotnet lambda deploy-function HelloWorld-EUWest# New Lambda function created
PS> dotnet lambda invoke-function helloworld-euwest -p "Pat"# Error invoking Lambda function: Function not found: arn:aws:lambda:eu-west-1:955206359773:function:helloworld-euwest
![Page 51: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/51.jpg)
‘ILambdaContext’ should ALWAYS be last51
@phermens
public string SayHi(ILambdaContext context, string name = "World"){
// … do something}
RESPONSE: (only on invocation, after deployment){ "errorType": "LambdaException", "errorMessage":
"Method 'SayHi' of type 'MyFirstLambdaFunction.HelloWorld' is not supported:the method has 2 parameters, but the second parameter is not of type'Amazon.Lambda.Core.ILambdaContext'."
}
![Page 52: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/52.jpg)
Read the FAQ’s! https://aws.amazon.com/lambda/faqs/ 52
@phermens
Q: How are compute resources assigned to an AWS Lambda function?In the AWS Lambda resource model, you choose the amount of memory you want for your function, and are allocated proportional CPU power and other resources.
For example, choosing 256MB of memory allocates approximately twice as much CPU power to your Lambda function as requesting 128MB of memory and half as much CPU power as choosing 512MB of memory. You can set your memory in 64MB increments from 128MB to 1.5GB.
![Page 53: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/53.jpg)
Containers can be reused!https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/ 53
@phermens
![Page 54: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/54.jpg)
Handy links
54 @phermens
Tooling● https://github.com/aws/aws-sdk-net/● https://github.com/aws/aws-lambda-dotnet/
Documentation● http://github.com/awslabs/● http://serverless.com/framework/docs/● https://aws.amazon.com/lambda/faqs/
![Page 55: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/55.jpg)
https://aws.amazon.com/documentation/ 55
@phermens
![Page 56: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/56.jpg)
56 @phermens
![Page 57: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/57.jpg)
Thanks!
57 @phermens
Tonight’s demos are on GitHub (but they’re really nothing special!)
● https://github.com/pheonix25/lambda-helloworld
● https://github.com/pheonix25/lambda-helloworldcaller
![Page 58: C# & AWS Lambda](https://reader031.vdocuments.net/reader031/viewer/2022021419/58e97f871a28aba6498b4e6d/html5/thumbnails/58.jpg)
Thanks!
58 @phermens