Example #1
0
        /// <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));
        }
Example #2
0
        /// <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);
            }
        }