in neptune-export/src/main/java/com/amazonaws/services/neptune/cluster/NeptuneClusterMetadata.java [37:119]
public static NeptuneClusterMetadata createFromClusterId(String clusterId, Supplier<AmazonNeptune> amazonNeptuneClientSupplier) {
AmazonNeptune neptune = amazonNeptuneClientSupplier.get();
DescribeDBClustersResult describeDBClustersResult = neptune
.describeDBClusters(new DescribeDBClustersRequest().withDBClusterIdentifier(clusterId));
if (describeDBClustersResult.getDBClusters().isEmpty()) {
throw new IllegalArgumentException(String.format("Unable to find cluster %s", clusterId));
}
DBCluster dbCluster = describeDBClustersResult.getDBClusters().get(0);
List<Tag> tags = neptune.listTagsForResource(
new ListTagsForResourceRequest()
.withResourceName(dbCluster.getDBClusterArn())).getTagList();
Map<String, String> clusterTags = new HashMap<>();
tags.forEach(t -> clusterTags.put(t.getKey(), t.getValue()));
boolean isIAMDatabaseAuthenticationEnabled = dbCluster.isIAMDatabaseAuthenticationEnabled();
Integer port = dbCluster.getPort();
String dbClusterParameterGroup = dbCluster.getDBClusterParameterGroup();
DescribeDBClusterParametersResult describeDBClusterParametersResult = neptune.describeDBClusterParameters(
new DescribeDBClusterParametersRequest()
.withDBClusterParameterGroupName(dbClusterParameterGroup));
Optional<Parameter> neptuneStreamsParameter = describeDBClusterParametersResult.getParameters().stream()
.filter(parameter -> parameter.getParameterName().equals("neptune_streams"))
.findFirst();
boolean isStreamEnabled = neptuneStreamsParameter.isPresent() &&
neptuneStreamsParameter.get().getParameterValue().equals("1");
String dbSubnetGroup = dbCluster.getDBSubnetGroup();
List<VpcSecurityGroupMembership> vpcSecurityGroups = dbCluster.getVpcSecurityGroups();
List<String> vpcSecurityGroupIds = vpcSecurityGroups.stream()
.map(VpcSecurityGroupMembership::getVpcSecurityGroupId)
.collect(Collectors.toList());
List<DBClusterMember> dbClusterMembers = dbCluster.getDBClusterMembers();
Optional<DBClusterMember> clusterWriter = dbClusterMembers.stream()
.filter(DBClusterMember::isClusterWriter)
.findFirst();
String primary = clusterWriter.map(DBClusterMember::getDBInstanceIdentifier).orElse("");
List<String> replicas = dbClusterMembers.stream()
.filter(dbClusterMember -> !dbClusterMember.isClusterWriter())
.map(DBClusterMember::getDBInstanceIdentifier)
.collect(Collectors.toList());
DescribeDBInstancesRequest describeDBInstancesRequest = new DescribeDBInstancesRequest()
.withFilters(Collections.singletonList(
new Filter()
.withName("db-cluster-id")
.withValues(dbCluster.getDBClusterIdentifier())));
DescribeDBInstancesResult describeDBInstancesResult = neptune
.describeDBInstances(describeDBInstancesRequest);
Map<String, NeptuneInstanceMetadata> instanceTypes = new HashMap<>();
describeDBInstancesResult.getDBInstances()
.forEach(c -> instanceTypes.put(
c.getDBInstanceIdentifier(),
new NeptuneInstanceMetadata(
c.getDBInstanceClass(),
c.getDBParameterGroups().get(0).getDBParameterGroupName(),
c.getEndpoint())
));
neptune.shutdown();
return new NeptuneClusterMetadata(clusterId,
port,
dbClusterParameterGroup,
isIAMDatabaseAuthenticationEnabled,
isStreamEnabled,
dbSubnetGroup,
vpcSecurityGroupIds,
primary,
replicas,
instanceTypes,
clusterTags);
}