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!"); }
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."); }