Example #1
0
        private async Task SetShutdownTime(EC2InstanceStateChangeEvent cloudWatchEvent, ILambdaContext context)
        {
            Instance instance = await GetInstanceDetails(cloudWatchEvent.Detail.InstanceId, context);

            var tag = instance.Tags.FirstOrDefault(x => x.Key == "StopAfterMinutes");

            if (tag == null)
            {
                context.Logger.LogLine($"Instance {instance.InstanceId} does not have a 'StopAfterMinutes' tag. Ignoring");
                return;
            }

            if (!int.TryParse(tag.Value, out var minutes))
            {
                context.Logger.LogLine($"Instance {instance.InstanceId} has invalid time for 'StopAfterMinutes' tag. Ignoring");
                return;
            }

            SetInstanceShutdownDto shutdownDto = new SetInstanceShutdownDto {
                InstanceId = instance.InstanceId, StopAfterMinutes = minutes
            };
            string message = Newtonsoft.Json.JsonConvert.SerializeObject(shutdownDto);

            var snsTopic = GetSnsTopic();

            context.Logger.LogLine($"Publishing SetInstanceShutdown message to topic {snsTopic}. Message: {message}");

            PublishRequest request = new PublishRequest(snsTopic, message);
            await _snsClient.PublishAsync(request);

            context.Logger.LogLine($"Published!");
        }
Example #2
0
        private async Task UpdateInstanceTags(SetInstanceShutdownDto instanceShutdownDto, ILambdaContext context)
        {
            var shutdownTime = DateTime.UtcNow.AddMinutes(instanceShutdownDto.StopAfterMinutes);

            CreateTagsRequest request = new CreateTagsRequest
            {
                Resources = new List <string> {
                    instanceShutdownDto.InstanceId
                },
                Tags = new List <Tag>
                {
                    new Tag("ShutdownAfter", shutdownTime.ToString("O"))
                }
            };

            context.Logger.LogLine($"Setting shutdown time for instance: {instanceShutdownDto.InstanceId} as {shutdownTime.ToString("O")}");

            await _client.CreateTagsAsync(request);

            context.Logger.LogLine($"ShutdownAfter tag set.");
        }