/// <summary> /// This method is called for every Lambda invocation. /// This method responds to EC2 state change events to apply /// various operations based on the target EC2 state and the /// various tags applied. /// </summary> /// <param name="ev"></param> /// <param name="context"></param> /// <returns></returns> public async Task <string> FunctionHandler(EC2StateChangeEvent ev, ILambdaContext context) { _logger.LogInformation("Got EC2 state change:"); _logger.LogInformation(JsonSerializer.Serialize(ev)); using (_logger.BeginScope(context.AwsRequestId)) { switch (ev.Detail.State) { case EC2StateChangeStates.Pending: case EC2StateChangeStates.Running: await HandleInstInit(ev.Detail.InstanceId); break; case EC2StateChangeStates.Stopping: case EC2StateChangeStates.Stopped: case EC2StateChangeStates.ShuttingDown: case EC2StateChangeStates.Terminated: await HandleInstTerm(ev.Detail.InstanceId); break; } } return(string.Empty); }
//[Fact] public async Task TestS3EventLambdaFunction() { var reg = RegionEndpoint.USEast1; IAmazonEC2 ec2 = new AmazonEC2Client(reg); IAmazonRoute53 r53 = new AmazonRoute53Client(reg); IAmazonS3 s3 = new AmazonS3Client(reg); var bucketName = "lambda-VMBot-".ToLower() + DateTime.Now.Ticks; var key = "text.txt"; // Create a bucket an object to setup a test data. await s3.PutBucketAsync(bucketName); try { await s3.PutObjectAsync(new PutObjectRequest { BucketName = bucketName, Key = key, ContentBody = "sample data" }); // Setup the S3 event object that S3 notifications would create with the fields used by the Lambda function. var s3Event = new S3Event { Records = new List <S3EventNotification.S3EventNotificationRecord> { new S3EventNotification.S3EventNotificationRecord { S3 = new S3EventNotification.S3Entity { Bucket = new S3EventNotification.S3BucketEntity { Name = bucketName }, Object = new S3EventNotification.S3ObjectEntity { Key = key } } } } }; var ec2StateChange = new EC2StateChangeEvent { }; // Invoke the lambda function and confirm the content type was returned. var function = new Function(ec2, r53, s3); // var contentType = await function.FunctionHandler(s3Event, null); var contentType = await function.FunctionHandler(ec2StateChange, null); Assert.Equal("text/plain", contentType); } finally { // Clean up the test data await AmazonS3Util.DeleteS3BucketWithObjectsAsync(s3, bucketName); } }