public void run() throws IOException
	{
		Route53Driver driver = new Route53Driver(awsAccessKey, awsPrivateKey);

		Zone zone = driver.zoneDetails(route53ZoneId);

		if (cleanZone)
		{
			List<ZoneUpdateAction> deletes = new ArrayList<ZoneUpdateAction>();

			for (ZoneResource resource : driver.listZoneRecords(zone))
			{
				if (!Arrays.asList(RecordType.NS, RecordType.SOA).contains(resource.getRecordType()))
				{
					ZoneUpdateAction zua = new ZoneUpdateAction.Builder().fromZoneResource(resource).buildDeleteAction();
					deletes.add(zua);
				}
			}

			for (List<ZoneUpdateAction> deleteChunk : ListUtil.split(deletes, 100))
			{
				ZoneChangeStatus status = driver.updateZone(zone, "Clean all zone records before re-import", deleteChunk);

				driver.waitForSync(status);
			}
		}

		if ("route53rrs".equals(nameServer))
		{
			queryService = new NameQueryByRoute53APIService(driver, zone);
		}
		else
		{
			queryService = new NameQueryServiceImpl(nameServer);
		}

		final List<ZoneUpdateAction> actions = createZoneUpdateActions(zone);

		log.info("Zone Update Actions Created:\n{}", StringUtils.join(actions, "\n"));

		if (dryRun)
		{
			log.info("Dry run complete.");
			return;
		}

		int batch = 0;

		final int MAX_CHANGE_RECORDS_ALLOWED = 100;

		for (List<ZoneUpdateAction> processingList : ListUtil.split(actions, MAX_CHANGE_RECORDS_ALLOWED))
		{
			batch++;

			ZoneChangeStatus sync = driver.updateZone(zone, "Sync zone records from file" + importFile + " batch " + batch, processingList);

			driver.waitForSync(sync);
		}

		log.info("Zone import complete and INSYNC!");
	}