Example usage for com.amazonaws.services.ecs AmazonECSClientBuilder standard

List of usage examples for com.amazonaws.services.ecs AmazonECSClientBuilder standard

Introduction

In this page you can find the example usage for com.amazonaws.services.ecs AmazonECSClientBuilder standard.

Prototype

public static AmazonECSClientBuilder standard() 

Source Link

Usage

From source file:com.remediatetheflag.global.utils.AWSHelper.java

License:Apache License

public void terminateTask(String taskArn) {
    String regionFromArn = taskArn.split(":")[3];
    AmazonECS client = AmazonECSClientBuilder.standard().withRegion(regionFromArn)
            .withCredentials(new DefaultAWSCredentialsProviderChain()).build();
    try {/*from   w  w w. j  a  v a2 s .  c  om*/
        StopTaskRequest stopTaskRequest = new StopTaskRequest();
        stopTaskRequest.withCluster(RTFConfig.getExercisesCluster()).withTask(taskArn);
        client.stopTask(stopTaskRequest);
    } catch (Exception e) {
        logger.error("Error terminating task " + e.getMessage());
    }
}

From source file:com.remediatetheflag.global.utils.AWSHelper.java

License:Apache License

public void terminateTask(RTFECSContainerTask ecsInstance) {
    AmazonECS client = AmazonECSClientBuilder.standard().withRegion(ecsInstance.getRegion())
            .withCredentials(new DefaultAWSCredentialsProviderChain()).build();
    try {//from   w  w w  .j a  va2s  .c  o m
        StopTaskRequest stopTaskRequest = new StopTaskRequest();
        stopTaskRequest.withCluster(RTFConfig.getExercisesCluster()).withTask(ecsInstance.getTaskArn());
        client.stopTask(stopTaskRequest);
    } catch (Exception e) {
        logger.error("Error terminating task " + e.getMessage());
    }
}

From source file:com.remediatetheflag.global.utils.AWSHelper.java

License:Apache License

public Integer getClusterContainerInstances(Region region) {
    AmazonECS client = AmazonECSClientBuilder.standard().withRegion(region.getName())
            .withCredentials(new DefaultAWSCredentialsProviderChain()).build();
    DescribeClustersRequest request = new DescribeClustersRequest();
    request.withClusters(RTFConfig.getExercisesCluster());
    logger.debug("Requesting number of cluster running instances for region " + region.getName() + " cluster "
            + RTFConfig.getExercisesCluster());
    try {//from w  w  w  .ja v  a 2  s .c  o m
        DescribeClustersResult response = client.describeClusters(request);
        return response.getClusters().get(0).getRegisteredContainerInstancesCount();
    } catch (Exception e) {
        logger.error("Error getClusterContainerInstances for region " + region.getName() + " due to:\n"
                + e.getMessage());
        return 0;
    }
}

From source file:com.remediatetheflag.global.utils.AWSHelper.java

License:Apache License

public String createECSTaskDefinition(RTFECSTaskDefinition taskDef, User user) {

    createExerciseLogGroup(taskDef.getRegion(), Constants.EXERCISE_LOG_GROUP);

    AmazonECS client = AmazonECSClientBuilder.standard().withRegion(taskDef.getRegion())
            .withCredentials(new DefaultAWSCredentialsProviderChain()).build();

    RegisterTaskDefinitionRequest request = new RegisterTaskDefinitionRequest();

    ArrayList<PortMapping> portMappings = new ArrayList<PortMapping>();
    portMappings.add(new PortMapping().withContainerPort(8080).withHostPort(0).withProtocol("tcp"));
    portMappings.add(new PortMapping().withContainerPort(3389).withHostPort(0).withProtocol("tcp"));

    LinuxParameters linuxParameters = new LinuxParameters();
    KernelCapabilities capabilities = new KernelCapabilities();
    capabilities.setAdd(Arrays.asList("NET_ADMIN"));
    linuxParameters.setCapabilities(capabilities);

    LogConfiguration logConfiguration = new LogConfiguration();
    logConfiguration.setLogDriver("awslogs");
    Map<String, String> options = new HashMap<String, String>();
    options.put("awslogs-group", Constants.EXERCISE_LOG_GROUP);
    options.put("awslogs-region", taskDef.getRegion().getName().toLowerCase());
    logConfiguration.setOptions(options);

    final ContainerDefinition def = new ContainerDefinition().withName(taskDef.getContainerName())
            .withImage(taskDef.getRepositoryImageUrl()).withMemoryReservation(taskDef.getSoftMemoryLimit())
            .withMemory(taskDef.getHardMemoryLimit()).withPortMappings(portMappings)
            .withLinuxParameters(linuxParameters).withLogConfiguration(logConfiguration).withEssential(true);

    request.setContainerDefinitions(Arrays.asList(def));
    request.setFamily(taskDef.getTaskDefinitionName());
    request.setNetworkMode("bridge");

    try {//from w w  w  .j  a  v a 2  s  . c o  m
        RegisterTaskDefinitionResult response = client.registerTaskDefinition(request);
        logger.debug("# ECS Task Definition " + taskDef.getTaskDefinitionName() + " created for user "
                + user.getIdUser() + " in region " + taskDef.getRegion());
        return response.getTaskDefinition().getTaskDefinitionArn();
    } catch (Exception e) {
        logger.debug(
                "# ECS Task Definition " + taskDef.getTaskDefinitionName() + " COULD NOT BE created for user "
                        + user.getIdUser() + " in region " + taskDef.getRegion() + "\n" + e.getMessage());
        return null;
    }
}

From source file:com.remediatetheflag.global.utils.AWSHelper.java

License:Apache License

public Boolean removeTaskDefinitionInRegion(String taskDefinitionArn, Regions region) {
    AmazonECS client = AmazonECSClientBuilder.standard().withRegion(region)
            .withCredentials(new DefaultAWSCredentialsProviderChain()).build();
    try {/*from ww w.j  a v a2 s  .  c o m*/
        DeregisterTaskDefinitionRequest request = new DeregisterTaskDefinitionRequest()
                .withTaskDefinition(taskDefinitionArn);
        DeregisterTaskDefinitionResult result = client.deregisterTaskDefinition(request);
        return result.getSdkHttpMetadata().getHttpStatusCode() == 200;
    } catch (Exception e) {
        logger.warn(
                "# ECS TaskDefinition " + taskDefinitionArn + " could not be deregistered " + e.getMessage());
        return false;
    }
}

From source file:com.remediatetheflag.global.utils.AWSHelper.java

License:Apache License

protected RTFECSContainerTask createInstance(String clusterName, String instanceName, String password,
        RTFECSTaskDefinition taskDef, Integer duration, User user) {

    AmazonECS client = AmazonECSClientBuilder.standard().withRegion(taskDef.getRegion())
            .withCredentials(new DefaultAWSCredentialsProviderChain()).build();
    TaskOverride overrides = new TaskOverride();
    List<ContainerOverride> containerOverrides = new LinkedList<ContainerOverride>();
    ContainerOverride co = new ContainerOverride();
    List<KeyValuePair> environment = new LinkedList<KeyValuePair>();
    KeyValuePair kv = new KeyValuePair();
    kv.setName(Constants.ENV_USR_PWD);/*from w w  w. j ava 2  s  . c  o  m*/
    kv.setValue(password);
    environment.add(kv);
    co.setEnvironment(environment);
    co.setName(taskDef.getContainerName());
    containerOverrides.add(co);
    overrides.setContainerOverrides(containerOverrides);
    RunTaskRequest request = new RunTaskRequest().withCluster(clusterName)
            .withTaskDefinition(taskDef.getTaskDefinitionArn()).withOverrides(overrides);
    logger.debug("# ECS Requesting Task " + instanceName + " for user " + user.getIdUser()
            + " with task definition: " + taskDef.getTaskDefinitionArn() + " on cluster: " + clusterName
            + " on region " + taskDef.getRegion().getName());
    try {
        RunTaskResult response = client.runTask(request);
        String failureReason = "";
        if (response.getTasks().isEmpty()) {
            for (Failure failure : response.getFailures()) {
                failureReason += "\n" + failure.getReason();
            }
            logger.error("Task creation failed due to: \n" + failureReason);
            return null;
        }
        Task task = response.getTasks().get(0);
        RTFECSContainerTask rtfInstance = new RTFECSContainerTask();
        rtfInstance.setCluster(task.getClusterArn());
        rtfInstance.setTaskArn(task.getTaskArn());
        rtfInstance.setIdContainerInstance(task.getContainerInstanceArn());
        rtfInstance.setName(instanceName);
        rtfInstance.setRegion(taskDef.getRegion());
        rtfInstance.setUser(user);
        rtfInstance.setCreateTime(task.getCreatedAt());
        rtfInstance.setStatus(Constants.STATUS_PENDING);
        logger.debug("# ECS Task " + instanceName + " created for user " + user.getIdUser()
                + " with task definition: " + taskDef.getTaskDefinitionName() + " start: "
                + rtfInstance.getCreateTime());
        return rtfInstance;
    } catch (Exception e) {
        logger.warn("# ECS Task " + instanceName + " could not be created for user " + user.getIdUser() + " "
                + e.getMessage());
        return null;
    }
}

From source file:com.remediatetheflag.global.utils.AWSHelper.java

License:Apache License

public List<String> getRunningECSTasks(List<Region> activeRegions) {
    LinkedList<String> list = new LinkedList<String>();
    for (Region region : activeRegions) {
        logger.debug("Enumerating running tasks on cluster " + RTFConfig.getExercisesCluster() + " for region "
                + region.getName());/*from  ww w . ja  va 2  s . c o  m*/
        AmazonECS client = AmazonECSClientBuilder.standard().withRegion(Regions.fromName(region.getName()))
                .withCredentials(new DefaultAWSCredentialsProviderChain()).build();
        ListTasksRequest request = new ListTasksRequest().withCluster(RTFConfig.getExercisesCluster());
        try {
            ListTasksResult response = client.listTasks(request);
            list.addAll(response.getTaskArns());
        } catch (Exception e) {
            logger.error("Error getRunningECSTasks for region " + region + " due to:\n" + e.getMessage());
        }
    }
    return list;
}

From source file:com.remediatetheflag.global.utils.AWSHelper.java

License:Apache License

public Date getRunningECSTaskStartTime(String taskArn) {
    String regionFromArn = taskArn.split(":")[3];
    AmazonECS client = AmazonECSClientBuilder.standard().withRegion(regionFromArn)
            .withCredentials(new DefaultAWSCredentialsProviderChain()).build();
    DescribeTasksRequest request = new DescribeTasksRequest().withCluster(RTFConfig.getExercisesCluster())
            .withTasks(taskArn);//w w w. ja  v  a  2s  .  c o m
    try {
        DescribeTasksResult response = client.describeTasks(request);
        return response.getTasks().get(0).getCreatedAt();
    } catch (Exception e) {
        logger.error("Could not get creation time for task arn " + taskArn);
        return null;
    }
}

From source file:com.remediatetheflag.global.utils.AWSHelper.java

License:Apache License

public RTFInstanceReservation pollReservation(RTFInstanceReservation reservation) {

    if (null == reservation.getEcs()) {
        reservation.setError(true);/*www  .  ja v a2s .co m*/
        reservation.setFulfilled(false);
        reservation.setWaitSeconds(0);
        return reservation;
    }
    AmazonECS client = AmazonECSClientBuilder.standard().withRegion(reservation.getEcs().getRegion())
            .withCredentials(new DefaultAWSCredentialsProviderChain()).build();

    DescribeTasksRequest request = new DescribeTasksRequest().withCluster(RTFConfig.getExercisesCluster())
            .withTasks(reservation.getEcs().getTaskArn());
    try {
        DescribeTasksResult response = client.describeTasks(request);

        if (response.getTasks().isEmpty()) {
            reservation.setError(true);
            reservation.setFulfilled(true);
            reservation.setWaitSeconds(0);
            return reservation;
        }

        Integer rdpPort = -1;
        Integer httpPort = -1;

        Task task = response.getTasks().get(0);

        if (task.getLastStatus().equalsIgnoreCase(Constants.AWS_ECS_STATUS_STOPPED)) {
            reservation.setError(true);
            reservation.setFulfilled(true);
            reservation.setWaitSeconds(0);
            return reservation;
        }

        List<NetworkBinding> nb = task.getContainers().get(0).getNetworkBindings();
        if (nb.size() > 2) {
            logger.warn("More than two port bindings, only RDP 3389 and HTTP 8080 will be mapped");
        }
        for (NetworkBinding b : nb) {
            if (b.getContainerPort().equals(3389)) {
                rdpPort = b.getHostPort();
            } else if (b.getContainerPort().equals(8080)) {
                httpPort = b.getHostPort();
            }
        }
        if (rdpPort == -1 || httpPort == -1) {
            reservation.setFulfilled(false);
            reservation.setError(false);
            reservation.setWaitSeconds(10);
            return reservation;
        }
        reservation.getEcs().setHttpPort(httpPort);
        reservation.getEcs().setRdpPort(rdpPort);

        String containerInstanceId = task.getContainerInstanceArn();
        DescribeContainerInstancesRequest containerRequest = new DescribeContainerInstancesRequest()
                .withCluster(RTFConfig.getExercisesCluster()).withContainerInstances(containerInstanceId);
        DescribeContainerInstancesResult containerResponse = client
                .describeContainerInstances(containerRequest);

        if (containerResponse.getContainerInstances().isEmpty()) {
            reservation.setFulfilled(false);
            reservation.setError(true);
            reservation.setWaitSeconds(0);
            return reservation;
        }
        String ec2InstanceId = containerResponse.getContainerInstances().get(0).getEc2InstanceId();

        AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard().withRegion(reservation.getEcs().getRegion())
                .withCredentials(new DefaultAWSCredentialsProviderChain()).build();
        DescribeInstancesRequest instanceRequest = new DescribeInstancesRequest()
                .withInstanceIds(ec2InstanceId);
        DescribeInstancesResult instanceInstances = ec2.describeInstances(instanceRequest);

        if (instanceInstances.getReservations().isEmpty()
                || instanceInstances.getReservations().get(0).getInstances().isEmpty()) {
            reservation.setFulfilled(false);
            reservation.setError(true);
            reservation.setWaitSeconds(0);
            return reservation;
        }

        String ipAddress = instanceInstances.getReservations().get(0).getInstances().get(0)
                .getPrivateIpAddress();
        reservation.getEcs().setIpAddress(ipAddress);
        reservation.setFulfilled(true);
        reservation.setError(false);
        reservation.setWaitSeconds(0);
        return reservation;

    } catch (Exception e) {
        logger.error("Error pollReservation " + e.getMessage());
        reservation.setError(true);
        reservation.setFulfilled(false);
        reservation.setWaitSeconds(0);
        return reservation;
    }
}