/// <summary> /// This function will shutdown instances that are tagged with "ShutdownAfter" and a (UTC) date/time. /// </summary> /// <param name="input"></param> /// <param name="context"></param> /// <returns></returns> public async Task FunctionHandler(Amazon.Lambda.CloudWatchEvents.ScheduledEvents.ScheduledEvent scheduledEvent, ILambdaContext context) { // We don't actually care about the scheduled event, it's just here to trigger the function // Note: This only works for the first 1000 instances... DescribeInstancesRequest request = new DescribeInstancesRequest() { MaxResults = 1000, // Filter for only those instances that are tagged and are running. Filters = new List <Filter> { new Filter("tag:ShutdownAfter", new List <string> { "*" }), new Filter("instance-state-name", new List <string> { "running" }) } }; DescribeInstancesResponse response = await _client.DescribeInstancesAsync(request); context.Logger.LogLine($"Found {response.Reservations.Count} tagged instances"); foreach (var reservation in response.Reservations) { foreach (var instance in reservation.Instances) { await TryShutdownInstance(instance, context); } } }
public async Task FunctionHandler(Amazon.Lambda.CloudWatchEvents.ScheduledEvents.ScheduledEvent cwe, ILambdaContext context) { //var envs = Newtonsoft.Json.JsonConvert.DeserializeObject<EnvsList>(cwe.Detail.ToString()); const string FUNCTION_NAME = "VilcapDateAssignTask"; var saasafrasClient = new SaasafrasClient( System.Environment.GetEnvironmentVariable("BBC_SERVICE_URL"), System.Environment.GetEnvironmentVariable("BBC_SERVICE_API_KEY") ); var vilcapEnvar = System.Environment.GetEnvironmentVariable("VILCAP_ENVS"); var vilcapEnvs = JsonConvert.DeserializeObject <JsonHolder>(vilcapEnvar).Values; var lockValue = await saasafrasClient.LockFunction(FUNCTION_NAME, cwe.Time.Ticks.ToString()); try { if (string.IsNullOrEmpty(lockValue)) { context.Logger.LogLine($"Failed to acquire lock for {FUNCTION_NAME} at time {cwe.Time.Ticks.ToString()}"); return; } foreach (var e in vilcapEnvs) { context.Logger.LogLine($"--- Created events : {e.clientId}/{e.clientId}/{e.solutionId}/{e.version}"); var function = new Function(); await function.FunctionHandler(e, context); } return; } catch (System.Exception ex) { throw ex; } finally { await saasafrasClient.UnlockFunction(FUNCTION_NAME, cwe.Time.Ticks.ToString(), lockValue); } }