コード例 #1
0
        public async Task <ActionResult> ScheduleImageFixedRate([FromBody] ScheduledImageFixedRate scheduledImageFixedRate)
        {
            try
            {
                await _containerService.RunScheduledImageAsync(scheduledImageFixedRate);

                return(Ok(JsonConvert.SerializeObject("Started image schedule successfully")));
            }
            catch (InexistentTaskDefinition ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (InexistentCluster ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message));
            }
            catch (AmazonCloudWatchEventsException ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message));
            }
            catch (AmazonIdentityManagementServiceException ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message));
            }
        }
コード例 #2
0
        /// <summary>
        /// Schedules the image to run at fixed interval
        /// </summary>
        /// <param name="scheduledImageFixedRate"></param>
        /// <returns></returns>
        public async System.Threading.Tasks.Task RunScheduledImageAsync(ScheduledImageFixedRate scheduledImageFixedRate)
        {
            // get latest revision task definition ARN
            var taskDefinitionsResponse = await _ecsClient.ListTaskDefinitionsAsync(new ListTaskDefinitionsRequest
            {
                FamilyPrefix = scheduledImageFixedRate.ConfigName,
                Sort         = SortOrder.DESC
            });

            string taskDefinitionArn;

            try
            {
                taskDefinitionArn = taskDefinitionsResponse.TaskDefinitionArns.First();
            }
            catch (Exception)
            {
                throw new InexistentTaskDefinition($"Configuration does not exists: {scheduledImageFixedRate.ConfigName}");
            }

            // get ECS cluster ARN
            var clustersResponse = await _ecsClient.ListClustersAsync(new ListClustersRequest());

            string clusterArn;

            try
            {
                clusterArn = clustersResponse.ClusterArns.First();
            }
            catch (Exception)
            {
                throw new InexistentCluster("No ECS clusters have been found");
            }

            // get target role ARN
            string targetRoleArn;

            try
            {
                targetRoleArn = await _iamService.GetRoleArnFromNameAsync(_ecsRole);
            }
            catch (AmazonIdentityManagementServiceException)
            {
                throw;
            }

            try
            {
                // create event rule
                // rule name basically will be userId + ruleName
                await _cloudWatchService.CreateSchedulerRuleAsync(scheduledImageFixedRate.RuleName, scheduledImageFixedRate.ToString());

                // create target for rule
                await _cloudWatchService.CreateTargetForRuleAsync(scheduledImageFixedRate.RuleName, targetRoleArn, clusterArn, taskDefinitionArn, scheduledImageFixedRate.TasksGroupName);
            }
            catch (AmazonCloudWatchEventsException ex)
            {
                _logger.LogError(ex.Message);
                throw;
            }
        }