ecs.describe_cluster(cluster=args.cluster_name)
    success("Checking cluster '%s' succeeded" % args.cluster_name)

    # Step: Check ECS Service
    if serviceMode:
        h1("Step: Check ECS Service")
        response = ecs.describe_service(cluster=args.cluster_name,
                                        service=args.service_name)
        original_running_count = (
            response.get('services')[0]).get('runningCount')
        success("Checking service '%s' succeeded (%d tasks running)" %
                (args.service_name, original_running_count))

    # Step: Register New Task Definition
    h1("Step: Register New Task Definition")
    response = ecs.register_task_definition(family=args.task_definition_name,
                                            file=args.task_definition_file)
    task_definition_arn = response.get('taskDefinition').get(
        'taskDefinitionArn')
    success("Registering task definition '%s' succeeded" % task_definition_arn)

    if serviceMode:

        # Step: Update ECS Service
        h1("Step: Update ECS Service")

        # test code
        h1("%s" % args.cluster_name)
        h1("%s" % args.service_name)
        h1("%s" % task_definition_arn)

        response = ecs.update_service(cluster=args.cluster_name,
    success("Configuring AWS succeeded")

    # Step 2: Check ECS cluster
    h1("Step 2: Check ECS cluster")
    ecs.describe_cluster(cluster=args.cluster_name)
    success("Checking cluster '%s' succeeded" % args.cluster_name)

    # Step 3: Check ECS Service
    h1("Step 3: Check ECS Service")
    response = ecs.describe_service(cluster=args.cluster_name, service=args.service_name)
    original_running_count = (response.get('services')[0]).get('runningCount')
    success("Checking service '%s' succeeded (%d tasks running)" % (args.service_name, original_running_count))

    # Step 4: Register New Task Definition
    h1("Step 4: Register New Task Definition")
    response = ecs.register_task_definition(file=args.task_definition_file)
    task_definition_arn = response.get('taskDefinition').get('taskDefinitionArn')
    success("Registering task definition '%s' succeeded" % task_definition_arn)

    # Step 5: Downscale ECS Service if necessary
    if original_running_count >= args.minimum_running_tasks:
        h1("Step 5: Downscale ECS Service")
        response = ecs.downscale_service(cluster=args.cluster_name, service=args.service_name)
        downscale_running_count = (response.get('services')[0]).get('runningCount')
        success("Downscaling service '%s' (from %d to %d tasks) succeeded"
                % (args.service_name, original_running_count, downscale_running_count))
        delta = 1
    else:
        h1("Step 5: Downscale ECS Service")
        success("Downscaling service is not necessary (not enough tasks are running)")
        delta = args.minimum_running_tasks - original_running_count
Beispiel #3
0
args = parser.parse_args()

try:

    # Step: Configuring AWS
    h1("Step: Configuring AWS")
    ecs = ECSService(access_key=args.key,
                     secret_key=args.secret,
                     region=args.region)
    success("Configuring AWS succeeded")

    # Step: Register New Task Definition
    h1("Step: Register New Task Definition")
    response = ecs.register_task_definition(
        family=args.task_definition_name,
        file=args.task_definition_file,
        volumes=args.task_definition_volumes_file,
        execution_role_arn=args.execution_role_arn)
    task_definition_arn = response.get('taskDefinition').get(
        'taskDefinitionArn')
    success("Registering task definition '%s' succeeded" % task_definition_arn)

    if not args.cluster_name:
        sys.exit(0)

    serviceMode = args.service_name is not None

    if serviceMode:
        # Step: Check ECS cluster
        h1("Step: Check ECS cluster")
        ecs.describe_cluster(cluster=args.cluster_name)
Beispiel #4
0
    success("Configuring AWS succeeded")

    # Step 2: Check ECS cluster
    h1("Step 2: Check ECS cluster")
    ecs.describe_cluster(cluster=args.cluster_name)
    success("Checking cluster '%s' succeeded" % args.cluster_name)

    # Step 3: Check ECS Service
    h1("Step 3: Check ECS Service")
    response = ecs.describe_service(cluster=args.cluster_name, service=args.service_name)
    original_running_count = (response.get('services')[0]).get('runningCount')
    success("Checking service '%s' succeeded (%d tasks running)" % (args.service_name, original_running_count))

    # Step 4: Register New Task Definition
    h1("Step 4: Register New Task Definition")
    response = ecs.register_task_definition(family=args.task_definition_name, file=args.task_definition_file)
    task_definition_arn = response.get('taskDefinition').get('taskDefinitionArn')
    success("Registering task definition '%s' succeeded" % task_definition_arn)

    # Step 5: Downscale ECS Service if necessary
    if original_running_count >= args.minimum_running_tasks:
        h1("Step 5: Downscale ECS Service")
        response = ecs.downscale_service(cluster=args.cluster_name, service=args.service_name)
        downscale_running_count = (response.get('services')[0]).get('runningCount')
        success("Downscaling service '%s' (from %d to %d tasks) succeeded"
                % (args.service_name, original_running_count, downscale_running_count))
        delta = 1
    else:
        h1("Step 5: Downscale ECS Service")
        success("Downscaling service is not necessary (not enough tasks are running)")
        delta = args.minimum_running_tasks - original_running_count
Beispiel #5
0
class AwsProcess(Thread):
    def __init__(self, key, secret, region):
        super().__init__()
        self.ecs_service = ECSService(access_key=key, secret_key=secret, region=region)

    def run(self):
        while True:
            try:
                service, mode = task_queue.get_nowait()
            except Empty:
                time.sleep(1)
                continue
            try:
                self.process(service, mode)
            except:
                service.status = ProcessStatus.error
                error("Unexpected error. service: %s.\n%s" % (service.service_name, traceback.format_exc()))
            finally:
                task_queue.task_done()

    def process(self, service, mode):
        if service.status == ProcessStatus.error:
            error("service '%s' previous process error. skipping." % service.service_name)
            return

        if mode == ProcessMode.registerTask:
            response = self.ecs_service.register_task_definition(task_definition=service.task_definition)
            service.task_definition_arn = response.get('taskDefinition').get('taskDefinitionArn')
            success("Registering task definition '%s' succeeded (arn: '%s')" % (service.task_name, service.task_definition_arn))
            # for register task rate limit
            time.sleep(3)

        elif mode == ProcessMode.checkService:
            try:
                response = self.ecs_service.describe_service(service.task_environment.cluster_name, service.service_name)
            except ServiceNotFoundException:
                error("Service '%s' not Found." % (service.service_name))
                return
            if response['services'][0]['status'] == 'INACTIVE':
                error("Service '%s' status is INACTIVE." % (service.service_name))
                return
            service.original_task_definition = (response.get('services')[0]).get('taskDefinition')
            service.original_running_count = (response.get('services')[0]).get('runningCount')
            service.original_desired_count = (response.get('services')[0]).get('desiredCount')
            service.desired_count = service.original_desired_count
            service.service_exists = True
            success("Checking service '%s' succeeded (%d tasks running)" % (service.service_name, service.original_running_count))

        elif mode == ProcessMode.createService:
            response = self.ecs_service.create_service(cluster=service.task_environment.cluster_name, service=service.service_name, taskDefinition=service.task_definition_arn, desiredCount=service.task_environment.desired_count, maximumPercent=service.task_environment.maximum_percent, minimumHealthyPercent=service.task_environment.minimum_healthy_percent)
            service.original_running_count = (response.get('services')[0]).get('runningCount')
            service.original_desired_count = (response.get('services')[0]).get('desiredCount')
            service.desired_count = service.original_desired_count
            success("Create service '%s' succeeded (%d tasks running)" % (service.service_name, service.original_running_count))

        elif mode == ProcessMode.updateService:
            response = self.ecs_service.update_service(cluster=service.task_environment.cluster_name, service=service.service_name, taskDefinition=service.task_definition_arn, maximumPercent=service.task_environment.maximum_percent, minimumHealthyPercent=service.task_environment.minimum_healthy_percent, desiredCount=service.task_environment.desired_count)
            service.running_count = response.get('services')[0].get('runningCount')
            service.desired_count = response.get('services')[0].get('desiredCount')
            success("Update service '%s' with task definition '%s' succeeded" % (service.service_name, service.task_definition_arn))

        elif mode == ProcessMode.waitForStable:
            retryCount = 0
            while True:
                try:
                    response = self.ecs_service.wait_for_stable(cluster=service.task_environment.cluster_name, service=service.service_name)
                except WaiterError:
                    if retryCount > 2:
                        break
                    retryCount = retryCount + 1
                    continue
                break
            service.running_count = response.get('services')[0].get('runningCount')
            service.desired_count = response.get('services')[0].get('desiredCount')
            self.ecs_service.deregister_task_definition(service.original_task_definition)
            success("service '%s' (%d tasks) update completed"
                        % (service.service_name, service.running_count))
Beispiel #6
0
    # Step: Check ECS cluster
    h1("Step: Check ECS cluster")
    ecs.describe_cluster(cluster=args.cluster_name)
    success("Checking cluster '%s' succeeded" % args.cluster_name)

    # Step: Check ECS Service
    if serviceMode:
        h1("Step: Check ECS Service")
        response = ecs.describe_service(cluster=args.cluster_name, service=args.service_name)
        original_running_count = (response.get('services')[0]).get('runningCount')
        success("Checking service '%s' succeeded (%d tasks running)" % (args.service_name, original_running_count))

    # Step: Register New Task Definition
    h1("Step: Register New Task Definition")
    response = ecs.register_task_definition(family=args.task_definition_name, file=args.task_definition_file, 
        launch_type=args.launch_type, execution_role_arn=args.execution_role_arn, cpu=args.cpu, memory=args.memory)
    task_definition_arn = response.get('taskDefinition').get('taskDefinitionArn')
    success("Registering task definition '%s' succeeded" % task_definition_arn)

    if serviceMode:

        # Step: Downscale ECS Service if necessary
        if original_running_count > args.minimum_running_tasks:
            h1("Step: Downscale ECS Service")
            response = ecs.downscale_service(cluster=args.cluster_name, service=args.service_name)
            downscale_running_count = (response.get('services')[0]).get('runningCount')
            success("Downscaling service '%s' (from %d to %d tasks) succeeded"
                    % (args.service_name, original_running_count, downscale_running_count))
            delta = 1
        else:
            h1("Step 5: Downscale ECS Service")