Untitled
unknown
plain_text
2 years ago
4.7 kB
6
Indexable
using Amazon.Lambda.Core; using Amazon.EC2; using Amazon.EC2.Model; using Amazon.CloudWatch; using Amazon.CloudWatch.Model; using System.Collections; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace AwsShutDown; public class LambdaFunction { private readonly IAmazonEC2 _amazonEC2; private readonly IAmazonCloudWatch _amazonCloudWatch; public LambdaFunction() { _amazonEC2 = new AmazonEC2Client(); _amazonCloudWatch = new AmazonCloudWatchClient(); } public static class Globals { public static awsinstances = new List<string>(); //List<string> awsinstances = new List<string>(); } public string FunctionStarter(string input, ILambdaContext context) { List<string> awsinstances = new List<string>(); var awsinstances2 = new List<string>(); /// StopInstances("i-0ba48b5640b66b3ce"); /// var output = DescribeAlarms(); /// LambdaLogger.Log(string.Concat(output.Result.Select(x => x.AlarmName))); DescribeInstances(); return "Done"; } public async Task StopInstances(string ec2InstanceId) { var request = new StopInstancesRequest { InstanceIds = new List<string> { ec2InstanceId }, }; var response = await _amazonEC2.StopInstancesAsync(request); if (response.StoppingInstances.Count > 0) { var instances = response.StoppingInstances; instances.ForEach(i => { LambdaLogger.Log($"Successfully stopped the EC2 Instance " + $"with InstanceID: {i.InstanceId}."); }); } } /// <summary> /// Describe the current alarms, optionally filtered by state. /// </summary> /// <param name="stateValue">Optional filter for alarm state.</param> /// <returns>The list of alarm data.</returns> public async Task<List<MetricAlarm>> DescribeAlarms(StateValue? stateValue = null) { List<MetricAlarm> alarms = new List<MetricAlarm>(); var paginatedDescribeAlarms = _amazonCloudWatch.Paginators.DescribeAlarms( new DescribeAlarmsRequest() { StateValue = stateValue }); await foreach (var data in paginatedDescribeAlarms.MetricAlarms) { alarms.Add(data); } return alarms; } /// <summary> /// Get information about existing EC2 images. /// </summary> /// <returns>Async task.</returns> public async Task DescribeInstances() { string tagName = "Environment"; string tagValue = "orc01"; await GetInstanceDescriptionsFiltered(tagName, tagValue); } /// <summary> /// Get information about EC2 instances filtered by a tag name and value. /// </summary> /// <param name="tagName">The name of the tag to filter on.</param> /// <param name="tagValue">The value of the tag to look for.</param> /// <returns>Async task.</returns> public async Task GetInstanceDescriptionsFiltered(string tagName, string tagValue) { // This tag filters the results of the instance list. var filters = new List<Filter> { new Filter { Name = $"tag:{tagName}", Values = new List<string> { tagValue, }, }, }; var request = new DescribeInstancesRequest { Filters = filters, }; Console.WriteLine("\nShowing instances with tag: \"IncludeInList\" set to \"Yes\"."); var paginator = _amazonEC2.Paginators.DescribeInstances(request); await foreach (var response in paginator.Responses) { foreach (var reservation in response.Reservations) { foreach (var instance in reservation.Instances) { Console.Write($"Instance ID: {instance.InstanceId} "); Console.WriteLine($"\tCurrent State: {instance.State.Name}"); LambdaLogger.Log(instance.InstanceId); LambdaLogger.Log(instance.State.Name); names.Add(instance.InstanceId); } } } } }
Editor is loading...