コード例 #1
0
        private static async Task <List <EcsTask> > DescribeTasks(
            AmazonECSClient ecsClient,
            string cluster,
            List <string> taskArns,
            CancellationToken token)
        {
            var include = new List <string> {
                TaskField.TAGS
            };
            var accumulator = new List <EcsTask>();
            // split batch into chunks of 100 requests
            var lists = taskArns
                        .Select((value, index) => new { value, index })
                        .GroupBy(x => x.index / 100)
                        .Select(x => x.Select(v => v.value).ToList());

            foreach (var arns in lists)
            {
                var response = await ecsClient.DescribeTasksAsync(new DescribeTasksRequest
                {
                    Cluster = cluster,
                    Tasks   = arns,
                    Include = include
                }, token);

                accumulator.AddRange(response.Tasks);
            }

            return(accumulator);
        }
コード例 #2
0
        public void ECSRegisterTaskDefinition()
        {
            #region to-register-a-task-definition-1470764550877

            var client   = new AmazonECSClient();
            var response = client.RegisterTaskDefinition(new RegisterTaskDefinitionRequest
            {
                ContainerDefinitions = new List <ContainerDefinition> {
                    new ContainerDefinition {
                        Name    = "sleep",
                        Command = new List <string> {
                            "sleep",
                            "360"
                        },
                        Cpu       = 10,
                        Essential = true,
                        Image     = "busybox",
                        Memory    = 10
                    }
                },
                Family      = "sleep360",
                TaskRoleArn = "",
                Volumes     = new List <Volume> {
                }
            });

            TaskDefinition taskDefinition = response.TaskDefinition;

            #endregion
        }
コード例 #3
0
        private static async Task <List <EcsTask> > ResolveTasks(
            AmazonECSClient ecsClient,
            string cluster,
            string serviceName,
            List <Tag> tags,
            CancellationToken token)
        {
            var taskArns = await ListTaskArns(ecsClient, cluster, serviceName, token);

            var tasks = await DescribeTasks(ecsClient, cluster, taskArns, token);

            var tasksWithTags = tasks.Where(task =>
            {
                foreach (var tag in tags)
                {
                    if (task.Tags.Any(t => t.Key == tag.Key && t.Value == tag.Value))
                    {
                        return(false);
                    }
                }
                return(true);
            }
                                            ).ToList();

            return(tasksWithTags);
        }
コード例 #4
0
        private static async Task <List <string> > ListTaskArns(
            AmazonECSClient ecsClient,
            string cluster,
            string serviceName,
            CancellationToken token)
        {
            var listTaskRequest = new ListTasksRequest
            {
                Cluster       = cluster,
                ServiceName   = serviceName,
                DesiredStatus = DesiredStatus.RUNNING
            };

            var accumulator = new List <string>();

            do
            {
                var listTaskResult = await ecsClient.ListTasksAsync(listTaskRequest, token);

                accumulator.AddRange(listTaskResult.TaskArns);
                listTaskRequest.NextToken = listTaskResult.NextToken;
            } while (listTaskRequest.NextToken != null);

            return(accumulator);
        }
コード例 #5
0
        private string RunNewTask(string input)
        {
            string result = "Success - ";

            try
            {
                //Create task request
                RunTaskRequest taskRequest = CreateTaskRequest();
                taskRequest.Overrides.ContainerOverrides[0].Name = CONTAINER_NAME;// "BatchService";
                taskRequest.Overrides.ContainerOverrides[0].Environment.Add(new Amazon.ECS.Model.KeyValuePair()
                {
                    Name = "APP_PARAM", Value = input
                });

                //Run the task
                AmazonECSClient        ecsClient = new AmazonECSClient(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY);
                Task <RunTaskResponse> response  = ecsClient.RunTaskAsync(taskRequest);

                //Collect response data
                result += BuildResponseData(response);
            }
            catch (Exception ex)
            {
                result = "Fail - msg:" + ex.Message + " stack:" + ex.StackTrace + " source:" + ex.Source + " data:" + ex.ToString();
            }

            return(result);
        }
コード例 #6
0
        public WebAppWithDockerFileTests()
        {
            _httpHelper = new HttpHelper();

            var cloudFormationClient = new AmazonCloudFormationClient();

            _cloudFormationHelper = new CloudFormationHelper(cloudFormationClient);

            var ecsClient = new AmazonECSClient();

            _ecsHelper = new ECSHelper(ecsClient);

            var serviceCollection = new ServiceCollection();

            serviceCollection.AddCustomServices();
            serviceCollection.AddTestServices();

            var serviceProvider = serviceCollection.BuildServiceProvider();

            _app = serviceProvider.GetService <App>();
            Assert.NotNull(_app);

            _interactiveService = serviceProvider.GetService <InMemoryInteractiveService>();
            Assert.NotNull(_interactiveService);

            _testAppManager = new TestAppManager();
        }
コード例 #7
0
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonECSConfig config = new AmazonECSConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonECSClient client = new AmazonECSClient(creds, config);

            ListServicesResponse resp = new ListServicesResponse();

            do
            {
                ListServicesRequest req = new ListServicesRequest
                {
                    NextToken = resp.NextToken
                    ,
                    MaxResults = maxItems
                };

                resp = client.ListServices(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.ServiceArns)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.NextToken));
        }
コード例 #8
0
 internal static void WriteContainers(DateTime captureTime, string accountId, RegionEndpoint regionEndPoint)
 {
     try
     {
         var ecsClient           = new AmazonECSClient(regionEndPoint);
         var listClusterResponse = ecsClient.ListClusters(new ListClustersRequest {
             MaxResults = 100
         });
         foreach (var cluster in listClusterResponse.ClusterArns)
         {
             var ecsResponse = ecsClient.DescribeContainerInstances(new DescribeContainerInstancesRequest {
                 Cluster = cluster
             });
             foreach (var ecs in ecsResponse.ContainerInstances)
             {
                 string ecsJson = JsonConvert.SerializeObject(ecs);
                 Common.UpdateTopology(captureTime, accountId, regionEndPoint.SystemName, "ecs", ecs.Ec2InstanceId, ecsJson, "UPDATE");
             }
         }
     }
     catch (Exception ex)
     {
         //Log.Error("Exception occured while reading containers", ex);
         Log.InfoFormat("Error reading containers: {0}", ex.Message);
     }
 }
コード例 #9
0
        /// <summary>
        /// Gets cluster instances AWS arns
        /// </summary>
        /// <returns></returns>
        private async Task <List <string> > GetAwsClusterInstancesArns()
        {
            string          awsRegion  = context.AppSettings.SettingsConfig.AwsRegion;
            string          awsCluster = context.AppSettings.SettingsConfig.AwsClusterName;
            AmazonECSClient ecs        = new AmazonECSClient(Amazon.RegionEndpoint.GetBySystemName(awsRegion));

            ecsModel.ListContainerInstancesRequest clusterRequest = new ecsModel.ListContainerInstancesRequest();
            clusterRequest.Cluster = awsCluster;
            var items = await ecs.ListContainerInstancesAsync(clusterRequest);

            return(items.ContainerInstanceArns);
        }
コード例 #10
0
        public void ECSListTaskDefinitions()
        {
            #region b381ebaf-7eba-4d60-b99b-7f6ae49d3d60

            var client   = new AmazonECSClient();
            var response = client.ListTaskDefinitions(new ListTaskDefinitionsRequest
            {
            });

            List <string> taskDefinitionArns = response.TaskDefinitionArns;

            #endregion
        }
コード例 #11
0
        public void ECSListTaskDefinitionFamilies()
        {
            #region b5c89769-1d94-4ca2-a79e-8069103c7f75

            var client   = new AmazonECSClient();
            var response = client.ListTaskDefinitionFamilies(new ListTaskDefinitionFamiliesRequest
            {
            });

            List <string> families = response.Families;

            #endregion
        }
コード例 #12
0
        public void ECSListServices()
        {
            #region 1d9a8037-4e0e-4234-a528-609656809a3a

            var client   = new AmazonECSClient();
            var response = client.ListServices(new ListServicesRequest
            {
            });

            List <string> serviceArns = response.ServiceArns;

            #endregion
        }
コード例 #13
0
        public void ECSListClusters()
        {
            #region e337d059-134f-4125-ba8e-4f499139facf

            var client   = new AmazonECSClient();
            var response = client.ListClusters(new ListClustersRequest
            {
            });

            List <string> clusterArns = response.ClusterArns;

            #endregion
        }
コード例 #14
0
        /// <summary>
        /// Gets a list of instance ids from a cluster and instance arns
        /// </summary>
        /// <param name="arns"></param>
        /// <returns></returns>
        private async Task <List <string> > GetAwsClusterInstancesIds(List <string> arns)
        {
            string          awsRegion  = context.AppSettings.SettingsConfig.AwsRegion;
            string          awsCluster = context.AppSettings.SettingsConfig.AwsClusterName;
            AmazonECSClient ecs        = new AmazonECSClient(Amazon.RegionEndpoint.GetBySystemName(awsRegion));

            ecsModel.DescribeContainerInstancesRequest clusterRequest = new ecsModel.DescribeContainerInstancesRequest();
            clusterRequest.Cluster            = awsCluster;
            clusterRequest.ContainerInstances = arns;
            var items = await ecs.DescribeContainerInstancesAsync(clusterRequest);

            return(items.ContainerInstances.Where(t => t.RunningTasksCount > 0).Select(t => t.Ec2InstanceId).ToList());
        }
コード例 #15
0
        public void ECSDeleteService()
        {
            #region e8183e38-f86e-4390-b811-f74f30a6007d

            var client   = new AmazonECSClient();
            var response = client.DeleteService(new DeleteServiceRequest
            {
                Service = "my-http-service"
            });


            #endregion
        }
コード例 #16
0
        public void ECSListTasks()
        {
            #region 9a6ec707-1a77-45d0-b2eb-516b5dd9e924

            var client   = new AmazonECSClient();
            var response = client.ListTasks(new ListTasksRequest
            {
                Cluster = "default"
            });

            List <string> taskArns = response.TaskArns;

            #endregion
        }
コード例 #17
0
        public void ECSCreateCluster()
        {
            #region to-create-a-new-cluster-1472514079365

            var client   = new AmazonECSClient();
            var response = client.CreateCluster(new CreateClusterRequest
            {
                ClusterName = "my_cluster"
            });

            Cluster cluster = response.Cluster;

            #endregion
        }
コード例 #18
0
        protected IAmazonECS CreateClient(AWSCredentials credentials, RegionEndpoint region)
        {
            var config = new AmazonECSConfig {
                RegionEndpoint = region
            };

            Amazon.PowerShell.Utils.Common.PopulateConfig(this, config);
            this.CustomizeClientConfig(config);
            var client = new AmazonECSClient(credentials, config);

            client.BeforeRequestEvent += RequestEventHandler;
            client.AfterResponseEvent += ResponseEventHandler;
            return(client);
        }
コード例 #19
0
        public void ECSDescribeTaskDefinition()
        {
            #region 4c21eeb1-f1da-4a08-8c44-297fc8d0ea88

            var client   = new AmazonECSClient();
            var response = client.DescribeTaskDefinition(new DescribeTaskDefinitionRequest
            {
                TaskDefinition = "hello_world:8"
            });

            TaskDefinition taskDefinition = response.TaskDefinition;

            #endregion
        }
コード例 #20
0
        public void ECSListAccountSettings()
        {
            #region to-view-your-account-settings-1549524118170

            var client   = new AmazonECSClient();
            var response = client.ListAccountSettings(new ListAccountSettingsRequest
            {
                EffectiveSettings = true
            });

            List <Setting> settings = response.Settings;

            #endregion
        }
コード例 #21
0
        public void ECSListContainerInstances()
        {
            #region 62a82a94-713c-4e18-8420-1d2b2ba9d484

            var client   = new AmazonECSClient();
            var response = client.ListContainerInstances(new ListContainerInstancesRequest
            {
                Cluster = "default"
            });

            List <string> containerInstanceArns = response.ContainerInstanceArns;

            #endregion
        }
コード例 #22
0
        public void ECSListTagsForResource()
        {
            #region to-list-the-tags-for-a-cluster-1540582700259

            var client   = new AmazonECSClient();
            var response = client.ListTagsForResource(new ListTagsForResourceRequest
            {
                ResourceArn = "arn:aws:ecs:region:aws_account_id:cluster/dev"
            });

            List <Tag> tags = response.Tags;

            #endregion
        }
コード例 #23
0
        public void ECSListTaskDefinitionFamilies()
        {
            #region 8a4cf9a6-42c1-4fe3-852d-99ac8968e11b

            var client   = new AmazonECSClient();
            var response = client.ListTaskDefinitionFamilies(new ListTaskDefinitionFamiliesRequest
            {
                FamilyPrefix = "hpcc"
            });

            List <string> families = response.Families;

            #endregion
        }
コード例 #24
0
        public void ECSDeleteAccountSetting()
        {
            #region to-delete-the-account-setting-for-your-user-account-1549524548115

            var client   = new AmazonECSClient();
            var response = client.DeleteAccountSetting(new DeleteAccountSettingRequest
            {
                Name = "serviceLongArnFormat"
            });

            Setting setting = response.Setting;

            #endregion
        }
コード例 #25
0
        public void ECSUpdateService()
        {
            #region 9581d6c5-02e3-4140-8cc1-5a4301586633

            var client   = new AmazonECSClient();
            var response = client.UpdateService(new UpdateServiceRequest
            {
                DesiredCount = 10,
                Service      = "my-http-service"
            });


            #endregion
        }
コード例 #26
0
        public void ECSUpdateService()
        {
            #region cc9e8900-0cc2-44d2-8491-64d1d3d37887

            var client   = new AmazonECSClient();
            var response = client.UpdateService(new UpdateServiceRequest
            {
                Service        = "my-http-service",
                TaskDefinition = "amazon-ecs-sample"
            });


            #endregion
        }
コード例 #27
0
        public void ECSListTaskDefinitions()
        {
            #region 734e7afd-753a-4bc2-85d0-badddce10910

            var client   = new AmazonECSClient();
            var response = client.ListTaskDefinitions(new ListTaskDefinitionsRequest
            {
                FamilyPrefix = "wordpress"
            });

            List <string> taskDefinitionArns = response.TaskDefinitionArns;

            #endregion
        }
コード例 #28
0
        public void ECSDeleteCluster()
        {
            #region to-delete-an-empty-cluster-1472512705352

            var client   = new AmazonECSClient();
            var response = client.DeleteCluster(new DeleteClusterRequest
            {
                Cluster = "my_cluster"
            });

            Cluster cluster = response.Cluster;

            #endregion
        }
コード例 #29
0
        public void ECSRunTask()
        {
            #region 6f238c83-a133-42cd-ab3d-abeca0560445

            var client   = new AmazonECSClient();
            var response = client.RunTask(new RunTaskRequest
            {
                Cluster        = "default",
                TaskDefinition = "sleep360:1"
            });

            List <Task> tasks = response.Tasks;

            #endregion
        }
コード例 #30
0
        public void ECSDeleteAccountSetting()
        {
            #region to-delete-the-account-setting-for-a-specific-iam-user-or-iam-role-1549524612917

            var client   = new AmazonECSClient();
            var response = client.DeleteAccountSetting(new DeleteAccountSettingRequest
            {
                Name         = "containerInstanceLongArnFormat",
                PrincipalArn = "arn:aws:iam::<aws_account_id>:user/principalName"
            });

            Setting setting = response.Setting;

            #endregion
        }