public static NeptuneClusterMetadata createFromClusterId()

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);
    }