MCPcopy Create free account
hub / github.com/awsdocs/aws-lambda-developer-guide / Function

Class Function

sample-apps/ec2-spot/src/ec2spot/Function.cs:17–122  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15namespace ec2spot
16{
17 public class Function
18 {
19 private static AmazonEC2Client ec2Client;
20
21 static Function() {
22 AWSSDKHandler.RegisterXRayForAllServices();
23 ec2Client = new AmazonEC2Client();
24 }
25
26 public async Task<string> FunctionHandler(Dictionary<string, string> input, ILambdaContext context)
27 {
28 // More AMI IDs: aws.amazon.com/amazon-linux-2/release-notes/
29 // us-east-2 HVM EBS-Backed 64-bit Amazon Linux 2
30 string ami = "ami-09d9edae5eb90d556";
31 string sg = "default";
32 // docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TInstanceType.html
33 InstanceType type = InstanceType.T3aNano;
34 string price = "0.003";
35 int count = 1;
36 var requestSpotInstances = await RequestSpotInstance(ami, sg, type, price, count);
37 var spotRequestId = requestSpotInstances.SpotInstanceRequests[0].SpotInstanceRequestId;
38 Console.WriteLine(spotRequestId);
39
40 string instanceId;
41 while (true)
42 {
43 SpotInstanceRequest spotRequest = await GetSpotRequest(spotRequestId);
44 Console.WriteLine(spotRequest.State);
45 if (spotRequest.State == SpotInstanceState.Active) {
46 instanceId = spotRequest.InstanceId;
47 break;
48 }
49 }
50 var cancelRequest = CancelSpotRequest(spotRequestId);
51 var terminateRequest = TerminateSpotInstance(instanceId);
52
53 await Task.WhenAll(cancelRequest, terminateRequest);
54
55 Console.WriteLine("Complete");
56 return spotRequestId;
57 }
58
59 public async Task<RequestSpotInstancesResponse> RequestSpotInstance(
60 string amiId,
61 string securityGroupName,
62 InstanceType instanceType,
63 string spotPrice,
64 int instanceCount)
65 {
66 var request = new RequestSpotInstancesRequest();
67
68 // https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotLaunchSpecification.html
69 var launchSpecification = new LaunchSpecification();
70 launchSpecification.ImageId = amiId;
71 launchSpecification.InstanceType = instanceType;
72 launchSpecification.SecurityGroups.Add(securityGroupName);
73
74 request.SpotPrice = spotPrice;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected