GossNet.Discovery.Aws
0.10.0
dotnet add package GossNet.Discovery.Aws --version 0.10.0
NuGet\Install-Package GossNet.Discovery.Aws -Version 0.10.0
<PackageReference Include="GossNet.Discovery.Aws" Version="0.10.0" />
<PackageVersion Include="GossNet.Discovery.Aws" Version="0.10.0" />
<PackageReference Include="GossNet.Discovery.Aws" />
paket add GossNet.Discovery.Aws --version 0.10.0
#r "nuget: GossNet.Discovery.Aws, 0.10.0"
#:package GossNet.Discovery.Aws@0.10.0
#addin nuget:?package=GossNet.Discovery.Aws&version=0.10.0
#tool nuget:?package=GossNet.Discovery.Aws&version=0.10.0
GossNet.Discovery.Aws
AWS EC2 tag-based node discovery for GossNet.Protocol.
Instances are found by a tag they already carry, so nothing registers or deregisters itself.
This mirrors how Consul and Serf auto-join on AWS (retry_join provider=aws tag_key=…): an
instance that goes away simply stops matching.
Installation
dotnet add package GossNet.Discovery.Aws
Usage
Tag every cluster member, then point discovery at that tag:
using GossNet.Discovery.Aws;
using GossNet.Protocol;
var awsOptions = new AwsDiscoveryOptions
{
TagKey = "gossnet-cluster",
TagValue = "production",
Port = 9055
};
var configuration = new GossNetConfiguration
{
Hostname = "10.0.1.23",
Port = 9055,
DiscoveryProviderFactory = cfg => new Ec2TagNodeDiscovery(cfg, awsOptions)
};
await using var node = new GossNetNode<MyMessage>(configuration);
node.Start();
Hostname must be the address other nodes can reach this instance on — normally its private
IP, matching UsePrivateIp. Discovery excludes the node from its own results by comparing
against it, so a mismatch makes a node gossip to itself.
IAM
The instance profile (or whichever credentials the SDK picks up) needs one action:
{
"Effect": "Allow",
"Action": "ec2:DescribeInstances",
"Resource": "*"
}
ec2:DescribeInstances does not support resource-level permissions, so Resource must be
*. Scope it with a condition key if your policy requires narrowing.
Options
| Option | Default | Description |
|---|---|---|
TagKey |
required | Instance tag key identifying cluster members |
TagValue |
required | The value that tag must have |
Port |
9055 |
Gossip port, uniform across the cluster |
UsePrivateIp |
true |
Use the private address rather than the public one |
Region |
ambient | AWS region; falls back to the SDK's own configuration |
CacheDuration |
30 seconds | How long a resolved instance list is reused |
EC2 describes instances, not services, so the port cannot be discovered and must be the same on every node.
Only instances in the running state are returned. Stopped and terminated instances keep
their tags, and their addresses are either gone or reassigned. Instances with no address of
the requested kind are skipped rather than returned as unreachable neighbours. Results are
paginated through in full, so clusters larger than one page are not truncated.
A failed EC2 call — throttling, missing permissions, no credentials — throws
NodeDiscoveryException rather than returning an empty list, so an API problem is never
mistaken for a cluster of one.
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- AWSSDK.EC2 (>= 4.0.110.2)
- GossNet.Protocol (>= 0.10.0)
-
net10.0
- AWSSDK.EC2 (>= 4.0.110.2)
- GossNet.Protocol (>= 0.10.0)
-
net8.0
- AWSSDK.EC2 (>= 4.0.110.2)
- GossNet.Protocol (>= 0.10.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.