示例#1
0
        /// <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);
                }
            }
        }
示例#2
0
        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);
            }
        }