@Bean public Map<String, AmazonCloudSearchDomainAsyncClient> cloudSearchDomainAsyncClients( AmazonCloudSearchClient cloudSearchClient, AWSCredentialsProvider awsCredentialsProvider) { DescribeDomainsResult describeDomainsResult = cloudSearchClient.describeDomains(); List<DomainStatus> domainStatusList = describeDomainsResult.getDomainStatusList(); Map<String, AmazonCloudSearchDomainAsyncClient> domainClients = new HashMap<>(domainStatusList.size()); for (DomainStatus domainStatus : domainStatusList) { log.debug("domainStatus: {}", domainStatus); String domainName = domainStatus.getDomainName(); if (domainStatus.isCreated() && !domainStatus.isDeleted()) { log.info("creating AmazonCloudSearchDomainClient for {} domain", domainName); ServiceEndpoint serviceEndpoint = domainStatus.getDocService(); AmazonCloudSearchDomainAsyncClient domainClient = new AmazonCloudSearchDomainAsyncClient( awsCredentialsProvider, client) .withEndpoint(serviceEndpoint.getEndpoint()); domainClients.put(domainName, domainClient); } else { log.info("skipping domain {}: created = {}, deleted = {}", domainName, domainStatus.isCreated(), domainStatus.isDeleted()); } } return domainClients; }
public CloudSearchIndexer(AWSCredentialsProvider creds, String index) { // Find the Cloud Search Domain endpoint AmazonCloudSearchClient cloudsearch = new AmazonCloudSearchClient(creds); for (DomainStatus domain : cloudsearch.describeDomains().getDomainStatusList()) { Logger.Info(domain.getDomainName()); if (domain.getDomainName().equals(index)) searchClient = new AmazonCloudSearchDomainClient(creds) .withEndpoint(domain.getDocService().getEndpoint()); } if (searchClient == null) { Logger.Info("Could not find Cloud Search index %s, aborting.", index); throw new IllegalArgumentException("Unrecognized index."); } }
/** * Collect data for CloudSearch. * * @param stats * current statistics object. * @param account * currently used credentials object. * @param region * currently used aws region. */ public static void scanCloudSearch(AwsStats stats, AwsAccount account, Regions region) { LOG.debug("Scan for CloudSearch in region " + region.getName() + " in account " + account.getAccountId()); try { AmazonCloudSearchClient cs = new AmazonCloudSearchClient(account.getCredentials()); cs.setRegion(Region.getRegion(region)); int totalDomains = 0; for (DomainStatus ds : cs.describeDomains().getDomainStatusList()) { AwsResource res = new AwsResource(ds.getDomainName(), account.getAccountId(), AwsResourceType.CloudSearch, region); res.addInfo("Endpoint", ds.getSearchService().getEndpoint()); res.addInfo("SearchInstanceType", ds.getSearchInstanceType()); res.addInfo("SearchInstanceCount", ds.getSearchInstanceCount()); res.addInfo("ARN", ds.getARN()); stats.add(res); totalDomains++; } LOG.info(totalDomains + " CloudSearch domains in region " + region.getName() + " in account " + account.getAccountId()); } catch (AmazonServiceException ase) { if (ase.getErrorCode().contains("AccessDenied")) { LOG.info("Access denied for CloudSearch in region " + region.getName() + " in account " + account.getAccountId()); } else { LOG.error("Exception of CloudSearch: " + ase.getMessage()); } } catch (Exception ex) { LOG.error("Exception of CloudSearch: " + ex.getMessage()); } }
@Override public void open(JobConf job, String name) throws IOException { LOG.debug("CloudSearchIndexWriter.open() name={} ", name); maxDocsInBatch = job.getInt(CloudSearchConstants.MAX_DOCS_BATCH, -1); buffer = new StringBuffer(MAX_SIZE_BATCH_BYTES).append('['); dumpBatchFilesToTemp = job.getBoolean(CloudSearchConstants.BATCH_DUMP, false); if (dumpBatchFilesToTemp) { // only dumping to local file // no more config required return; } String endpoint = job.get(CloudSearchConstants.ENDPOINT); if (StringUtils.isBlank(endpoint)) { throw new RuntimeException("endpoint not set for CloudSearch"); } AmazonCloudSearchClient cl = new AmazonCloudSearchClient(); if (StringUtils.isNotBlank(regionName)) { cl.setRegion(RegionUtils.getRegion(regionName)); } String domainName = null; // retrieve the domain name DescribeDomainsResult domains = cl .describeDomains(new DescribeDomainsRequest()); Iterator<DomainStatus> dsiter = domains.getDomainStatusList().iterator(); while (dsiter.hasNext()) { DomainStatus ds = dsiter.next(); if (ds.getDocService().getEndpoint().equals(endpoint)) { domainName = ds.getDomainName(); break; } } // check domain name if (StringUtils.isBlank(domainName)) { throw new RuntimeException( "No domain name found for CloudSearch endpoint"); } DescribeIndexFieldsResult indexDescription = cl.describeIndexFields( new DescribeIndexFieldsRequest().withDomainName(domainName)); for (IndexFieldStatus ifs : indexDescription.getIndexFields()) { String indexname = ifs.getOptions().getIndexFieldName(); String indextype = ifs.getOptions().getIndexFieldType(); LOG.info("CloudSearch index name {} of type {}", indexname, indextype); csfields.put(indexname, indextype); } client = new AmazonCloudSearchDomainClient(); client.setEndpoint(endpoint); }
public AmazonCloudSearchFactory() { client = new AmazonCloudSearchClient(); }
@SuppressWarnings({ "rawtypes", "unchecked" }) @Override public void prepare(Map conf, TopologyContext context, OutputCollector collector) { super.prepare(conf, context, collector); _collector = collector; this.eventCounter = context.registerMetric("CloudSearchIndexer", new MultiCountMetric(), 10); maxTimeBuffered = ConfUtils.getInt(conf, CloudSearchConstants.MAX_TIME_BUFFERED, 10); maxDocsInBatch = ConfUtils.getInt(conf, CloudSearchConstants.MAX_DOCS_BATCH, -1); buffer = new StringBuffer(MAX_SIZE_BATCH_BYTES).append('['); dumpBatchFilesToTemp = ConfUtils.getBoolean(conf, "cloudsearch.batch.dump", false); if (dumpBatchFilesToTemp) { // only dumping to local file // no more config required return; } String endpoint = ConfUtils.getString(conf, "cloudsearch.endpoint"); if (StringUtils.isBlank(endpoint)) { String message = "Missing CloudSearch endpoint"; LOG.error(message); throw new RuntimeException(message); } String regionName = ConfUtils.getString(conf, CloudSearchConstants.REGION); AmazonCloudSearchClient cl = new AmazonCloudSearchClient(); if (StringUtils.isNotBlank(regionName)) { cl.setRegion(RegionUtils.getRegion(regionName)); } String domainName = null; // retrieve the domain name DescribeDomainsResult domains = cl .describeDomains(new DescribeDomainsRequest()); Iterator<DomainStatus> dsiter = domains.getDomainStatusList() .iterator(); while (dsiter.hasNext()) { DomainStatus ds = dsiter.next(); if (ds.getDocService().getEndpoint().equals(endpoint)) { domainName = ds.getDomainName(); break; } } // check domain name if (StringUtils.isBlank(domainName)) { throw new RuntimeException( "No domain name found for CloudSearch endpoint"); } DescribeIndexFieldsResult indexDescription = cl .describeIndexFields(new DescribeIndexFieldsRequest() .withDomainName(domainName)); for (IndexFieldStatus ifs : indexDescription.getIndexFields()) { String indexname = ifs.getOptions().getIndexFieldName(); String indextype = ifs.getOptions().getIndexFieldType(); LOG.info("CloudSearch index name {} of type {}", indexname, indextype); csfields.put(indexname, indextype); } client = new AmazonCloudSearchDomainClient(); client.setEndpoint(endpoint); }