コード例 #1
0
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonServiceDiscoveryConfig config = new AmazonServiceDiscoveryConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonServiceDiscoveryClient client = new AmazonServiceDiscoveryClient(creds, config);

            ListNamespacesResponse resp = new ListNamespacesResponse();

            do
            {
                ListNamespacesRequest req = new ListNamespacesRequest
                {
                    NextToken = resp.NextToken
                    ,
                    MaxResults = maxItems
                };

                resp = client.ListNamespaces(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.Namespaces)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.NextToken));
        }
コード例 #2
0
        private void DiscoverServiceUrl()
        {
            if (environment.IsDevelopment())
            {
                SetDefaultUrl();
            }
            else
            {
                var serviceDiscoveryClient = new AmazonServiceDiscoveryClient(Amazon.RegionEndpoint.EUWest2);

                var task = serviceDiscoveryClient.DiscoverInstancesAsync(new DiscoverInstancesRequest
                {
                    ServiceName   = "advertapi",
                    NamespaceName = "WebAdvertisement",
                });

                task.Wait();

                var instances = task.Result.Instances;
                if (instances.Any())
                {
                    var ipv4 = instances[0].Attributes["AWS_INSTANCE_IPV4"];
                    var port = instances[0].Attributes["AWS_INSTANCE_PORT"];
                    baseAddress = $"http://{ipv4}:{port}";
                }
                else
                {
                    SetDefaultUrl();
                }
            }
        }
コード例 #3
0
        public void ServiceDiscoveryCreateService()
        {
            #region example-create-service-1587235913584

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.CreateService(new CreateServiceRequest
            {
                CreatorRequestId = "567c1193-6b00-4308-bd57-ad38a8822d25",
                DnsConfig        = new DnsConfig {
                    DnsRecords = new List <DnsRecord> {
                        new DnsRecord {
                            TTL  = 60,
                            Type = "A"
                        }
                    },
                    NamespaceId   = "ns-ylexjili4cdxy3xm",
                    RoutingPolicy = "MULTIVALUE"
                },
                Name        = "myservice",
                NamespaceId = "ns-ylexjili4cdxy3xm"
            });

            Service service = response.Service;

            #endregion
        }
コード例 #4
0
        public void ServiceDiscoveryUpdateService()
        {
            #region updateservice-example-1590117830880

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.UpdateService(new UpdateServiceRequest
            {
                Id      = "srv-e4anhexample0004",
                Service = new ServiceChange {
                    DnsConfig = new DnsConfigChange {
                        DnsRecords = new List <DnsRecord> {
                            new DnsRecord {
                                TTL  = 60,
                                Type = "A"
                            }
                        }
                    },
                    HealthCheckConfig = new HealthCheckConfig {
                        FailureThreshold = 2,
                        ResourcePath     = "/",
                        Type             = "HTTP"
                    }
                }
            });

            string operationId = response.OperationId;

            #endregion
        }
コード例 #5
0
        public async Task <string> RegisterEc2Async(string serviceId, string instanceId, int port = 80)
        {
            const string ipv4Key = "AWS_INSTANCE_IPV4";
            const string portKey = "AWS_INSTANCE_PORT";

            if (string.IsNullOrEmpty(EC2InstanceMetadata.InstanceId))
            {
                throw new InvalidEnvironmentException();
            }

            var ipV4 = EC2InstanceMetadata.PrivateIpAddress;

            var serviceClient = new AmazonServiceDiscoveryClient
                                (
                new InstanceProfileAWSCredentials(),
                EC2InstanceMetadata.Region
                                );

            var registerResponse = await serviceClient.RegisterInstanceAsync(new RegisterInstanceRequest
            {
                InstanceId = instanceId,
                ServiceId  = serviceId,
                Attributes = new Dictionary <string, string> {
                    { ipv4Key, ipV4 }, { portKey, port.ToString() }
                }
            });

            return(registerResponse.OperationId);
        }
コード例 #6
0
ファイル: AdvertApiClient.cs プロジェクト: mshahrasbi/dotNet
        public AdvertApiClient(IConfiguration configuration, HttpClient client, IMapper mapper)
        {
            this._client = client;
            this._mapper = mapper;

            var discoveryClient = new AmazonServiceDiscoveryClient();
            var discoveryTask   = discoveryClient.DiscoverInstancesAsync(new DiscoverInstancesRequest {
                ServiceName   = "advertapi",
                NamespaceName = "WebAdvertisement"
            });

            discoveryTask.Wait();
            // This is just an example and it shouldnot be run from Constructor. best to have its own class

            /*
             * Service Discovery does not provide LB, so one thing you can do is to randomize
             *  this list, you can try to linq expiration to randomize and randomly pick up
             *  any instance just to scatter the load across all the instances
             */
            var instances = discoveryTask.Result.Instances;
            // how to get Ip
            var ipv4 = instances[0].Attributes["AWS_INSTANCE_IPV4"];
            var port = instances[0].Attributes["AWS_INSTANCE_PORT"];

            // then use ipv4 and port to create base url
            _baseAddress        = configuration.GetSection("AdvertApi").GetValue <string>("BaseUrl");
            _client.BaseAddress = new Uri(_baseAddress);
        }
コード例 #7
0
        public BaseAmazonDiscoveryHttpClient(string serviceNamespace,
                                             string serviceName,
                                             AmazonConfiguration amazonConfiguration,
                                             HttpClient client) : base(client)
        {
            var discoverClient = new AmazonServiceDiscoveryClient(amazonConfiguration.Credentials,
                                                                  amazonConfiguration.RegionEndpoint);

            var discoverInstanceRequest = new DiscoverInstancesRequest
            {
                ServiceName   = serviceName,
                NamespaceName = serviceNamespace,
                HealthStatus  = HealthStatus.HEALTHY.Value
            };

            var discoveryTask = discoverClient.DiscoverInstancesAsync(discoverInstanceRequest);

            discoveryTask.Wait();

            var instances = discoveryTask.Result.Instances;

            var instance = instances.FirstOrDefault();

            var ipv4 = instance.Attributes["AWS_INSTANCE_IPV4"];
            var port = instance.Attributes["AWS_INSTANCE_PORT"];

            _baseUrl = $"http://{ipv4}:{port}";
        }
コード例 #8
0
        public void ServiceDiscoveryDeleteService()
        {
            #region example-delete-service-1587416462902

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.DeleteService(new DeleteServiceRequest
            {
                Id = "srv-p5zdwlg5uvvzjita"
            });


            #endregion
        }
コード例 #9
0
        public void ServiceDiscoveryListServices()
        {
            #region example-list-services-1587236889840

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.ListServices(new ListServicesRequest
            {
            });

            List <ServiceSummary> services = response.Services;

            #endregion
        }
コード例 #10
0
        public void ServiceDiscoveryListNamespaces()
        {
            #region example-list-namespaces-1587401553154

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.ListNamespaces(new ListNamespacesRequest
            {
            });

            List <NamespaceSummary> namespaces = response.Namespaces;

            #endregion
        }
コード例 #11
0
        public void ServiceDiscoveryListTagsForResource()
        {
            #region listtagsforresource-example-1590093928416

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.ListTagsForResource(new ListTagsForResourceRequest
            {
                ResourceARN = "arn:aws:servicediscovery:us-east-1:123456789012:namespace/ns-ylexjili4cdxy3xm"
            });

            List <Tag> tags = response.Tags;

            #endregion
        }
コード例 #12
0
        public void ServiceDiscoveryGetNamespace()
        {
            #region getnamespace-example-1590115383708

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.GetNamespace(new GetNamespaceRequest
            {
                Id = "ns-e4anhexample0004"
            });

            Namespace awsNamespace = response.Namespace;

            #endregion
        }
        protected IAmazonServiceDiscovery CreateClient(AWSCredentials credentials, RegionEndpoint region)
        {
            var config = new AmazonServiceDiscoveryConfig {
                RegionEndpoint = region
            };

            Amazon.PowerShell.Utils.Common.PopulateConfig(this, config);
            this.CustomizeClientConfig(config);
            var client = new AmazonServiceDiscoveryClient(credentials, config);

            client.BeforeRequestEvent += RequestEventHandler;
            client.AfterResponseEvent += ResponseEventHandler;
            return(client);
        }
コード例 #14
0
        public void ServiceDiscoveryListInstances()
        {
            #region example-list-service-instances-1587236237008

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.ListInstances(new ListInstancesRequest
            {
                ServiceId = "srv-qzpwvt2tfqcegapy"
            });

            List <InstanceSummary> instances = response.Instances;

            #endregion
        }
コード例 #15
0
        public void ServiceDiscoveryGetService()
        {
            #region getservice-example-1590117234294

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.GetService(new GetServiceRequest
            {
                Id = "srv-e4anhexample0004"
            });

            Service service = response.Service;

            #endregion
        }
コード例 #16
0
        public void ServiceDiscoveryGetOperation()
        {
            #region example-get-operation-result-1587073807124

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.GetOperation(new GetOperationRequest
            {
                OperationId = "gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9302yzd"
            });

            Operation operation = response.Operation;

            #endregion
        }
コード例 #17
0
        public void ServiceDiscoveryDeleteNamespace()
        {
            #region example-delete-namespace-1587416093508

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.DeleteNamespace(new DeleteNamespaceRequest
            {
                Id = "ns-ylexjili4cdxy3xm"
            });

            string operationId = response.OperationId;

            #endregion
        }
コード例 #18
0
        public void ServiceDiscoveryGetInstancesHealthStatus()
        {
            #region getinstanceshealthstatus-example-1590115176146

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.GetInstancesHealthStatus(new GetInstancesHealthStatusRequest
            {
                ServiceId = "srv-e4anhexample0004"
            });

            Dictionary <string, string> status = response.Status;

            #endregion
        }
コード例 #19
0
        public void ServiceDiscoveryUpdateInstanceCustomHealthStatus()
        {
            #region updateinstancecustomhealthstatus-example-1590118408574

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.UpdateInstanceCustomHealthStatus(new UpdateInstanceCustomHealthStatusRequest
            {
                InstanceId = "i-abcd1234",
                ServiceId  = "srv-e4anhexample0004",
                Status     = "HEALTHY"
            });


            #endregion
        }
コード例 #20
0
        public void ServiceDiscoveryDeregisterInstance()
        {
            #region example-deregister-a-service-instance-1587416305738

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.DeregisterInstance(new DeregisterInstanceRequest
            {
                InstanceId = "myservice-53",
                ServiceId  = "srv-p5zdwlg5uvvzjita"
            });

            string operationId = response.OperationId;

            #endregion
        }
コード例 #21
0
        public void ServiceDiscoveryGetInstance()
        {
            #region getinstance-example-1590115065598

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.GetInstance(new GetInstanceRequest
            {
                InstanceId = "i-abcd1234",
                ServiceId  = "srv-e4anhexample0004"
            });

            Instance instance = response.Instance;

            #endregion
        }
コード例 #22
0
        public void ServiceDiscoveryCreateHttpNamespace()
        {
            #region createhttpnamespace-example-1590114811304

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.CreateHttpNamespace(new CreateHttpNamespaceRequest
            {
                CreatorRequestId = "example-creator-request-id-0001",
                Description      = "Example.com AWS Cloud Map HTTP Namespace",
                Name             = "example-http.com"
            });

            string operationId = response.OperationId;

            #endregion
        }
コード例 #23
0
        public void ServiceDiscoveryCreatePublicDnsNamespace()
        {
            #region createpublicdnsnamespace-example-1590114940910

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.CreatePublicDnsNamespace(new CreatePublicDnsNamespaceRequest
            {
                CreatorRequestId = "example-creator-request-id-0003",
                Description      = "Example.com AWS Cloud Map Public DNS Namespace",
                Name             = "example-public-dns.com"
            });

            string operationId = response.OperationId;

            #endregion
        }
コード例 #24
0
        public void ServiceDiscoveryCreatePrivateDnsNamespace()
        {
            #region example-create-private-dns-namespace-1587058592930

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.CreatePrivateDnsNamespace(new CreatePrivateDnsNamespaceRequest
            {
                CreatorRequestId = "eedd6892-50f3-41b2-8af9-611d6e1d1a8c",
                Name             = "example.com",
                Vpc = "vpc-1c56417b"
            });

            string operationId = response.OperationId;

            #endregion
        }
コード例 #25
0
        public void ServiceDiscoveryDiscoverInstances()
        {
            #region example-discover-registered-instances-1587236343568

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.DiscoverInstances(new DiscoverInstancesRequest
            {
                HealthStatus  = "ALL",
                MaxResults    = 10,
                NamespaceName = "example.com",
                ServiceName   = "myservice"
            });

            List <HttpInstanceSummary> instances = response.Instances;

            #endregion
        }
コード例 #26
0
        public void ServiceDiscoveryUntagResource()
        {
            #region untagresource-example-1590094024672

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.UntagResource(new UntagResourceRequest
            {
                ResourceARN = "arn:aws:servicediscovery:us-east-1:123456789012:namespace/ns-ylexjili4cdxy3xm",
                TagKeys     = new List <string> {
                    "Project",
                    "Department"
                }
            });


            #endregion
        }
コード例 #27
0
        public void ServiceDiscoveryRegisterInstance()
        {
            #region example-register-instance-1587236116314

            var client   = new AmazonServiceDiscoveryClient();
            var response = client.RegisterInstance(new RegisterInstanceRequest
            {
                Attributes = new Dictionary <string, string> {
                    { "AWS_INSTANCE_IPV4", "172.2.1.3" },
                    { "AWS_INSTANCE_PORT", "808" }
                },
                CreatorRequestId = "7a48a98a-72e6-4849-bfa7-1a458e030d7b",
                InstanceId       = "myservice-53",
                ServiceId        = "srv-p5zdwlg5uvvzjita"
            });

            string operationId = response.OperationId;

            #endregion
        }
コード例 #28
0
        public AdvertApiClient(IConfiguration configuration, HttpClient client, IMapper mapper)
        {
            _client = client;
            _mapper = mapper;

            var discoveryClient = new AmazonServiceDiscoveryClient();
            var discoveryTask   = discoveryClient.DiscoverInstancesAsync(new DiscoverInstancesRequest()
            {
                ServiceName   = "AdvertAPI",
                NamespaceName = "WebAdvertisement",
            });

            discoveryTask.GetAwaiter();

            var instances = discoveryTask.Result.Instances;
            var ipv4      = instances[0].Attributes["AWS_INSTANCE_IPV4"];
            var port      = instances[0].Attributes["AWS_INSTANCE_PORT"];


            _baseAddress = configuration.GetSection("AdvertApi").GetValue <string>("BaseUrl");
        }
コード例 #29
0
ファイル: Startup.cs プロジェクト: msanj1/WebAdvert.AdvertApi
        private async Task RegisterToCloudMap()
        {
            const string serviceId  = "srv-ym7ek4whzb5yspdc";
            var          instanceId = EC2InstanceMetadata.InstanceId;

            if (!string.IsNullOrEmpty(instanceId))
            {
                var ipv4   = EC2InstanceMetadata.PrivateIpAddress;
                var client = new AmazonServiceDiscoveryClient();
                await client.RegisterInstanceAsync(new RegisterInstanceRequest
                {
                    InstanceId = instanceId,
                    ServiceId  = serviceId,
                    Attributes = new Dictionary <string, string>
                    {
                        { "AWS_INSTANCE_IPV4", ipv4 },
                        { "AWS_INSTANCE_PORT", "80" }
                    }
                });
            }
        }
コード例 #30
0
        private async Task RegisterToCloudMap()
        {
            var    instanceId = EC2InstanceMetadata.InstanceId;
            string serviceId  = Configuration.GetValue <string>("ServiceId");

            if (!string.IsNullOrEmpty(instanceId))
            {
                var ipv4   = EC2InstanceMetadata.PrivateIpAddress;
                var client = new AmazonServiceDiscoveryClient(Amazon.RegionEndpoint.EUWest2);

                await client.RegisterInstanceAsync(new RegisterInstanceRequest
                {
                    ServiceId  = serviceId,
                    InstanceId = instanceId,
                    Attributes = new Dictionary <string, string>()
                    {
                        { "AWS_INSTANCE_IPV4", ipv4 }, { "AWS_INSTANCE_PORT", "80" }
                    }
                });
            }
        }