/// <summary> /// Read the Endpoint Information and create DNS-Record /// </summary> public override Task <AwsAdapterResult> GetAdapterResultAsync(AWSCredentials awsCredentials, IEnumerable <Endpoint> endpoints, CancellationToken cancellationToken) { var result = new AwsAdapterResult(); // TODO: Change from S3 to Endpoint Type filter var listEndpoints = endpoints .Where(x => !x.VpcEndpoint.ServiceName.Contains(".s3", StringComparison.InvariantCulture)).ToList(); foreach (var endpoint in listEndpoints) { var net = endpoint.NetworkInterfaces.First(); var domainName = CreateDomainName(endpoint.VpcEndpoint.ServiceName); result.ProxyBypassList.Add(domainName); result.DnsRecords.Add(new ARecord( ARSoft.Tools.Net.DomainName.Parse(domainName), Ttl, IPAddress.Parse(net.PrivateIpAddress))); result.DnsRecords.Add(new ARecord( ARSoft.Tools.Net.DomainName.Parse(net.PrivateDnsName), Ttl, IPAddress.Parse(net.PrivateIpAddress))); } return(Task.FromResult(result)); }
/// <summary> /// Read the Apt-Gateway VpcEndpoint and map all ApiGateway Configurations/Urls to the IPAddress /// Create DNs-Records /// </summary> public override async Task <AwsAdapterResult> GetAdapterResultAsync( AWSCredentials awsCredentials, IEnumerable <Endpoint> endpoints, CancellationToken cancellationToken) { using (var amazonApiGatewayClient = new AmazonAPIGatewayClient(awsCredentials, AmazonApiGatewayConfig)) { var result = new AwsAdapterResult(); var apiGatewayNetworkInterfaces = endpoints.Where(x => x.VpcEndpoint.ServiceName.Contains(".execute-api", StringComparison.InvariantCulture)).ToList(); var apis = await amazonApiGatewayClient.GetRestApisAsync(new GetRestApisRequest(), cancellationToken) .ConfigureAwait(false); var orderedApis = apis.Items.Where(x => x.EndpointConfiguration.Types.SingleOrDefault(y => "PRIVATE".Equals(y, StringComparison.InvariantCulture)) != null).ToArray(); foreach (var endpoint in apiGatewayNetworkInterfaces) { for (var i = orderedApis.Length - 1; i >= 0; i--) { var item = orderedApis[i]; var net = endpoint.NetworkInterfaces.First(); var domainName = CreateApiGatewayDomainName(endpoint.VpcEndpoint.ServiceName, item.Id); result.ProxyBypassList.Add(domainName); result.DnsRecords.Add(new ARecord( ARSoft.Tools.Net.DomainName.Parse(domainName), Ttl, IPAddress.Parse(net.PrivateIpAddress))); result.DnsRecords.Add(new ARecord( DomainName.Parse(net.PrivateDnsName), Ttl, IPAddress.Parse(net.PrivateIpAddress))); } } return(result); } }