Untitled
unknown
plain_text
3 years ago
4.7 kB
10
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...