Created
August 26, 2022 15:29
-
-
Save bogdangaliceanu/b9bf3cc60bc01c4a7e972f0ddecbd813 to your computer and use it in GitHub Desktop.
Amazon Neptune Autoscaling - NeptuneInstanceDescriber
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public interface INeptuneInstanceDescriber : IDisposable | |
{ | |
Task<(DBInstance Writer, ImmutableArray<DBInstance> Readers)> GetInstances(string clusterIdentifier); | |
} | |
// provides the current cluster topology (i.e. the instances that exist and their availability) | |
// see https://docs.aws.amazon.com/neptune/latest/userguide/api-instances.html#DBInstance and related pages | |
public class NeptuneInstanceDescriber : INeptuneInstanceDescriber | |
{ | |
private readonly IAmazonNeptune neptune; | |
public NeptuneInstanceDescriber(IAmazonNeptune neptune) | |
{ | |
this.neptune = neptune; | |
} | |
public async Task<(DBInstance Writer, ImmutableArray<DBInstance> Readers)> GetInstances(string clusterIdentifier) | |
{ | |
var describeClusterRequest = new DescribeDBClustersRequest { DBClusterIdentifier = clusterIdentifier }; | |
var cluster = (await neptune.DescribeDBClustersAsync(describeClusterRequest)).DBClusters.Single(); | |
var writerMember = cluster.DBClusterMembers.Single(m => m.IsClusterWriter); | |
var readerMembers = cluster.DBClusterMembers.Where(m => !m.IsClusterWriter).ToImmutableArray(); | |
var describeInstancesRequest = new DescribeDBInstancesRequest | |
{ | |
Filters = new List<Filter> {new() {Name = "db-cluster-id", Values = new List<string> {clusterIdentifier}}} | |
}; | |
var instances = (await neptune.DescribeDBInstancesAsync(describeInstancesRequest)).DBInstances; | |
var writer = instances.Single(i => i.DBInstanceIdentifier == writerMember.DBInstanceIdentifier); | |
var readers = instances | |
.Where(i => readerMembers.Any(r => r.DBInstanceIdentifier == i.DBInstanceIdentifier)) | |
.ToImmutableArray(); | |
return (writer, readers); | |
} | |
public void Dispose() | |
{ | |
neptune.Dispose(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment