Exemple #1
0
        private async Task <CreateHostedZoneResponse> createAwsHostedZoneAsync(string zoneName)
        {
            logger.LogInformation($"Creating hosted zone '{ zoneName }'...");

            CreateHostedZoneRequest request = new CreateHostedZoneRequest
            {
                CallerReference = zoneName,
                Name            = zoneName
            };

            CreateHostedZoneResponse zone = await TheRoute53Client().CreateHostedZoneAsync(request);

            return(zone);
        }
Exemple #2
0
        private static void CreateHostedZone(IAmazonRoute53 r53Client, string domainName)
        {
            var zoneRequest = new CreateHostedZoneRequest
            {
                Name            = domainName,
                CallerReference = "testingss"
            };

            var zoneResponse = r53Client.CreateHostedZone(zoneRequest);
            var recordSet    = new ResourceRecordSet
            {
                Name            = domainName,
                TTL             = 60,
                Type            = RRType.A,
                ResourceRecords = new List <ResourceRecord> {
                    new ResourceRecord {
                        Value = IpAddress
                    }
                }
            };

            var change1 = new Change
            {
                ResourceRecordSet = recordSet,
                Action            = ChangeAction.CREATE
            };

            var changeBatch = new ChangeBatch
            {
                Changes = new List <Change> {
                    change1
                }
            };

            var recordsetRequest = new ChangeResourceRecordSetsRequest
            {
                HostedZoneId = zoneResponse.HostedZone.Id,
                ChangeBatch  = changeBatch
            };

            var recordsetResponse = r53Client.ChangeResourceRecordSets(recordsetRequest);
            var changeRequest     = new GetChangeRequest
            {
                Id = recordsetResponse.ChangeInfo.Id
            };

            Console.WriteLine(changeRequest);
        }
Exemple #3
0
        public static async Task <HostedZone> CreateAsync(Credentials credentials, string domainName)
        {
            var client    = credentials.CreateClient();
            var reference = AwsHelper.GenerateReferenceToken();

            var zoneRequest = new CreateHostedZoneRequest {
                Name            = domainName,
                CallerReference = reference
            };

            var response = await client.CreateHostedZoneAsync(zoneRequest);

            await response.ChangeInfo.WaitForStatusAync(credentials);

            return(response.HostedZone);
        }
Exemple #4
0
        /// <summary>
        /// Create a new hosted zone. When you create a zone, its initial status is PENDING. This means that it is not yet available on all DNS servers.
        /// The status of the zone changes to INSYNC when the NS and SOA records are available on all Route 53 DNS servers.
        /// </summary>
        /// <param name="domain">The name of the domain</param>
        /// <param name="vpc">The VPC that you want your hosted zone to be associated with. By providing this parameter, your newly created hosted cannot be resolved anywhere other than the given VPC.</param>
        /// <param name="region">The region of your VPC</param>
        /// <param name="settings">The <see cref="Route53Settings"/> required to connect to Route53.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        public async Task <string> CreateHostedZone(string domain, string vpc, VPCRegion region, Route53Settings settings, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (String.IsNullOrEmpty(domain))
            {
                throw new ArgumentNullException("domain");
            }



            CreateHostedZoneRequest request = new CreateHostedZoneRequest(domain, "");

            if (!String.IsNullOrEmpty(vpc))
            {
                request.VPC = new VPC()
                {
                    VPCId     = vpc,
                    VPCRegion = region
                };
            }

            AmazonRoute53Client      client   = this.GetClient(settings);
            CreateHostedZoneResponse response = await client.CreateHostedZoneAsync(request);

            if (response.HttpStatusCode == HttpStatusCode.OK)
            {
                await this.WaitForChange(client, response.ChangeInfo.Id, 10000, 60);

                _Log.Verbose("Created hosted zone");
                return(response.HostedZone.Id);
            }
            else
            {
                _Log.Error("Could not create hosted zone");
                return("");
            }
        }
Exemple #5
0
        public void TestRoute53()
        {
            var geoLocations = Client.ListGeoLocations(new ListGeoLocationsRequest()).GeoLocationDetailsList;

            Assert.IsNotNull(geoLocations);
            Assert.AreNotEqual(0, geoLocations.Count);

            CreateHostedZoneRequest createRequest = new CreateHostedZoneRequest
            {
                Name             = ZONE_NAME,
                CallerReference  = CALLER_REFERENCE,
                HostedZoneConfig = new HostedZoneConfig {
                    Comment = COMMENT
                }
            };
            // Create Hosted Zone
            var response = Client.CreateHostedZone(createRequest);

            createdZoneId       = response.HostedZone.Id;
            createdZoneChangeId = response.ChangeInfo.Id;

            assertValidCreatedHostedZone(response.HostedZone);
            assertValidDelegationSet(response.DelegationSet);
            assertValidChangeInfo(response.ChangeInfo);
            Assert.IsNotNull(response.Location);


            // Get Hosted Zone
            GetHostedZoneRequest getRequest = new GetHostedZoneRequest {
                Id = createdZoneId
            };
            var getHostedZoneResponse = Client.GetHostedZone(getRequest);

            assertValidDelegationSet(getHostedZoneResponse.DelegationSet);
            assertValidCreatedHostedZone(getHostedZoneResponse.HostedZone);


            // List Hosted Zones
            List <HostedZone> hostedZones = Client.ListHostedZones().HostedZones;

            Assert.IsTrue(hostedZones.Count > 0);
            foreach (HostedZone hostedZone in hostedZones)
            {
                Assert.IsNotNull(hostedZone.CallerReference);
                Assert.IsNotNull(hostedZone.Id);
                Assert.IsNotNull(hostedZone.Name);
            }


            // List Resource Record Sets
            ListResourceRecordSetsRequest listRequest = new ListResourceRecordSetsRequest {
                HostedZoneId = createdZoneId, MaxItems = "10"
            };
            List <ResourceRecordSet> resourceRecordSets = Client.ListResourceRecordSets(listRequest).ResourceRecordSets;

            Assert.IsTrue(resourceRecordSets.Count > 0);
            ResourceRecordSet existingResourceRecordSet = resourceRecordSets[0];

            foreach (ResourceRecordSet rrset in resourceRecordSets)
            {
                Assert.IsNotNull(rrset.Name);
                Assert.IsNotNull(rrset.Type);
                Assert.IsNotNull(rrset.TTL);
                Assert.IsTrue(rrset.ResourceRecords.Count > 0);
            }


            // Get Change
            ChangeInfo changeInfo = Client.GetChange(new GetChangeRequest {
                Id = createdZoneChangeId
            }).ChangeInfo;

            Assert.IsTrue(changeInfo.Id.EndsWith(createdZoneChangeId));
            assertValidChangeInfo(changeInfo);


            // Change Resource Record Sets
            ResourceRecordSet newResourceRecordSet = new ResourceRecordSet
            {
                Name            = ZONE_NAME,
                ResourceRecords = existingResourceRecordSet.ResourceRecords,
                TTL             = existingResourceRecordSet.TTL + 100,
                Type            = existingResourceRecordSet.Type,
                HealthCheckId   = null
            };

            changeInfo = Client.ChangeResourceRecordSets(new ChangeResourceRecordSetsRequest
            {
                HostedZoneId = createdZoneId,
                ChangeBatch  = new ChangeBatch
                {
                    Comment = COMMENT,
                    Changes = new List <Change>
                    {
                        new Change {
                            Action = "DELETE", ResourceRecordSet = existingResourceRecordSet
                        },
                        new Change {
                            Action = "CREATE", ResourceRecordSet = newResourceRecordSet
                        }
                    }
                }
            }).ChangeInfo;

            assertValidChangeInfo(changeInfo);

            // Delete Hosted Zone
            DeleteHostedZoneResult deleteHostedZoneResult = Client.DeleteHostedZone(new DeleteHostedZoneRequest {
                Id = createdZoneId
            });

            assertValidChangeInfo(deleteHostedZoneResult.ChangeInfo);
        }
Exemple #6
0
        public void VPCTests()
        {
            var vpc1 = CreateVPC();
            var vpc2 = CreateVPC();

            try
            {
                CreateHostedZoneRequest createRequest = new CreateHostedZoneRequest
                {
                    Name             = ZONE_NAME,
                    CallerReference  = CALLER_REFERENCE,
                    HostedZoneConfig = new HostedZoneConfig {
                        Comment = COMMENT
                    },
                    VPC = vpc1
                };
                createdZoneId = Client.CreateHostedZone(createRequest).HostedZone.Id;

                var hostedZoneInfo = Client.GetHostedZone(new GetHostedZoneRequest
                {
                    Id = createdZoneId
                });
                Assert.IsNotNull(hostedZoneInfo.VPCs);
                Assert.AreEqual(1, hostedZoneInfo.VPCs.Count);
                Assert.IsTrue(hostedZoneInfo.HostedZone.Config.PrivateZone);

                var changeInfo = Client.AssociateVPCWithHostedZone(new AssociateVPCWithHostedZoneRequest
                {
                    VPC          = vpc2,
                    Comment      = COMMENT,
                    HostedZoneId = createdZoneId
                }).ChangeInfo;
                Assert.IsNotNull(changeInfo);
                Assert.IsNotNull(changeInfo.Comment);
                assertValidChangeInfo(changeInfo);

                hostedZoneInfo = Client.GetHostedZone(new GetHostedZoneRequest
                {
                    Id = createdZoneId
                });
                Assert.IsNotNull(hostedZoneInfo.VPCs);
                Assert.AreEqual(2, hostedZoneInfo.VPCs.Count);

                changeInfo = Client.DisassociateVPCFromHostedZone(new DisassociateVPCFromHostedZoneRequest
                {
                    HostedZoneId = createdZoneId,
                    VPC          = vpc2
                }).ChangeInfo;
                assertValidChangeInfo(changeInfo);

                hostedZoneInfo = Client.GetHostedZone(new GetHostedZoneRequest
                {
                    Id = createdZoneId
                });
                Assert.IsNotNull(hostedZoneInfo.VPCs);
                Assert.AreEqual(1, hostedZoneInfo.VPCs.Count);

                changeInfo = Client.DeleteHostedZone(new DeleteHostedZoneRequest
                {
                    Id = createdZoneId
                }).ChangeInfo;
                assertValidChangeInfo(changeInfo);
            }
            finally
            {
                DeleteVPC(vpc1);
                DeleteVPC(vpc2);
            }
        }
Exemple #7
0
        public void DelegationSetTests()
        {
            List <string> createdSets = new List <string>();

            var sets     = Client.ListReusableDelegationSets(new ListReusableDelegationSetsRequest());
            var setCount = sets.DelegationSets.Count;

            var callerReference = "DNSMigration" + DateTime.Now.ToFileTime();
            var createResponse  = Client.CreateReusableDelegationSet(new CreateReusableDelegationSetRequest
            {
                CallerReference = callerReference
            });

            Assert.IsNotNull(createResponse.Location);
            var delegationSet = createResponse.DelegationSet;

            Assert.IsNotNull(delegationSet);
            Assert.IsNotNull(delegationSet.CallerReference);
            Assert.IsNotNull(delegationSet.Id);
            Assert.IsNotNull(delegationSet.NameServers);
            Assert.AreNotEqual(0, delegationSet.NameServers.Count);
            createdSets.Add(delegationSet.Id);

            sets = Client.ListReusableDelegationSets(new ListReusableDelegationSetsRequest());
            Assert.AreEqual(setCount + 1, sets.DelegationSets.Count);

            CreateHostedZoneRequest createRequest = new CreateHostedZoneRequest
            {
                Name             = ZONE_NAME,
                CallerReference  = CALLER_REFERENCE,
                HostedZoneConfig = new HostedZoneConfig {
                    Comment = COMMENT
                },
                DelegationSetId = delegationSet.Id
            };

            createdZoneId = Client.CreateHostedZone(createRequest).HostedZone.Id;

            var hostedZoneInfo = Client.GetHostedZone(new GetHostedZoneRequest
            {
                Id = createdZoneId
            });

            Assert.IsNotNull(hostedZoneInfo.VPCs);
            Assert.IsFalse(hostedZoneInfo.HostedZone.Config.PrivateZone);
            Assert.AreEqual(delegationSet.Id, hostedZoneInfo.DelegationSet.Id);

            var hostedZones = Client.ListHostedZones(new ListHostedZonesRequest
            {
                DelegationSetId = delegationSet.Id
            }).HostedZones;

            Assert.AreEqual(1, hostedZones.Count);

            // add a second set
            callerReference = "DNSMigration" + DateTime.Now.ToFileTime();
            createResponse  = Client.CreateReusableDelegationSet(new CreateReusableDelegationSetRequest
            {
                CallerReference = callerReference
            });
            delegationSet = createResponse.DelegationSet;
            createdSets.Add(delegationSet.Id);

            int    totalSetCount = 0;
            string nextMarker    = null;

            do
            {
                var response = Client.ListReusableDelegationSets(new ListReusableDelegationSetsRequest
                {
                    MaxItems = "1",
                    Marker   = nextMarker
                });
                totalSetCount += response.DelegationSets.Count;
                nextMarker     = response.NextMarker;
            } while (!string.IsNullOrEmpty(nextMarker));
            Assert.AreEqual(setCount + 2, totalSetCount);

            Client.DeleteHostedZone(new DeleteHostedZoneRequest
            {
                Id = createdZoneId
            });
            createdZoneId = null;

            foreach (var setId in createdSets)
            {
                Client.DeleteReusableDelegationSet(new DeleteReusableDelegationSetRequest
                {
                    Id = setId
                });
            }

            sets = Client.ListReusableDelegationSets(new ListReusableDelegationSetsRequest());
            Assert.AreEqual(setCount, sets.DelegationSets.Count);
        }
Exemple #8
0
        static void Main(string[] args)
        {
            const string awsId  = "AKIAJBEJGQLMJAGQV6YQ";
            const string awsKey = "lzM+9nJXLTNauQgz15SIyQD1QzWe/4+UcPzOEEPw";

            const string domainName = "www.example.org";

            //[1] Create an Amazon Route 53 client object
            var route53Client = AWSClientFactory.CreateAmazonRoute53Client(awsId, awsKey);

            //[2] Create a hosted zone
            var zoneRequest = new CreateHostedZoneRequest {
                Name            = domainName,
                CallerReference = "my_change_request"
            };

            var zoneResponse = route53Client.CreateHostedZone(zoneRequest);

            //[3] Create a resource record set change batch
            var recordSet = new ResourceRecordSet {
                Name            = domainName,
                TTL             = 60,
                Type            = RRType.A,
                ResourceRecords = new List <ResourceRecord> {
                    new ResourceRecord {
                        Value = "192.0.2.235"
                    }
                }
            };

            var change1 = new Change {
                ResourceRecordSet = recordSet,
                Action            = ChangeAction.CREATE
            };

            var changeBatch = new ChangeBatch {
                Changes = new List <Change> {
                    change1
                }
            };

            //[4] Update the zone's resource record sets
            var recordsetRequest = new ChangeResourceRecordSetsRequest {
                HostedZoneId = zoneResponse.HostedZone.Id,
                ChangeBatch  = changeBatch
            };

            var recordsetResponse = route53Client.ChangeResourceRecordSets(recordsetRequest);

            //[5] Monitor the change status
            var changeRequest = new GetChangeRequest {
                Id = recordsetResponse.ChangeInfo.Id
            };

            while (route53Client.GetChange(changeRequest).ChangeInfo.Status == ChangeStatus.PENDING)
            {
                Console.WriteLine("Change is pending.");
                Thread.Sleep(15000);
            }

            Console.WriteLine("Change is complete.");
            Console.ReadKey();
        }
Exemple #9
0
        public void VPCTests()
        {
            var    vpc1          = CreateVPC();
            var    vpc2          = CreateVPC();
            string createdZoneId = null;

            try
            {
                CreateHostedZoneRequest createRequest = new CreateHostedZoneRequest
                {
                    Name             = ZONE_NAME,
                    CallerReference  = CALLER_REFERENCE,
                    HostedZoneConfig = new HostedZoneConfig {
                        Comment = COMMENT
                    },
                    VPC = vpc1
                };
                createdZoneId = UtilityMethods.WaitUntilSuccess <string>(() =>
                                                                         Client.CreateHostedZoneAsync(createRequest).Result.HostedZone.Id
                                                                         );

                var hostedZoneInfo = Client.GetHostedZoneAsync(new GetHostedZoneRequest
                {
                    Id = createdZoneId
                }).Result;
                Assert.NotNull(hostedZoneInfo.VPCs);
                Assert.Equal(1, hostedZoneInfo.VPCs.Count);
                Assert.True(hostedZoneInfo.HostedZone.Config.PrivateZone);

                var changeInfo = Client.AssociateVPCWithHostedZoneAsync(new AssociateVPCWithHostedZoneRequest
                {
                    VPC          = vpc2,
                    Comment      = COMMENT,
                    HostedZoneId = createdZoneId
                }).Result.ChangeInfo;
                Assert.NotNull(changeInfo);
                Assert.NotNull(changeInfo.Comment);
                assertValidChangeInfo(changeInfo);

                hostedZoneInfo = Client.GetHostedZoneAsync(new GetHostedZoneRequest
                {
                    Id = createdZoneId
                }).Result;
                Assert.NotNull(hostedZoneInfo.VPCs);
                Assert.Equal(2, hostedZoneInfo.VPCs.Count);

                changeInfo = Client.DisassociateVPCFromHostedZoneAsync(new DisassociateVPCFromHostedZoneRequest
                {
                    HostedZoneId = createdZoneId,
                    VPC          = vpc2
                }).Result.ChangeInfo;
                assertValidChangeInfo(changeInfo);

                hostedZoneInfo = Client.GetHostedZoneAsync(new GetHostedZoneRequest
                {
                    Id = createdZoneId
                }).Result;
                Assert.NotNull(hostedZoneInfo.VPCs);
                Assert.Equal(1, hostedZoneInfo.VPCs.Count);

                changeInfo = Client.DeleteHostedZoneAsync(new DeleteHostedZoneRequest
                {
                    Id = createdZoneId
                }).Result.ChangeInfo;
                assertValidChangeInfo(changeInfo);
            }
            finally
            {
                DeleteVPC(vpc1);
                DeleteVPC(vpc2);
                DeleteHostedZone(createdZoneId);
            }
        }
Exemple #10
0
 public virtual Task <CreateHostedZoneResponse> CreateHostedZoneAsync(CreateHostedZoneRequest request, CancellationToken cancellationToken = default(CancellationToken))
 {
     throw new NotImplementedException();
 }
Exemple #11
0
        public static void Route53CreateAdd(string[] args)
        {
            #region Route53CreateAdd
            string domainName = "www.example.org";

            IAmazonRoute53 route53Client = new AmazonRoute53Client();

            CreateHostedZoneRequest zoneRequest = new CreateHostedZoneRequest
            {
                Name            = domainName,
                CallerReference = "my_change_request"
            };

            CreateHostedZoneResponse zoneResponse = route53Client.CreateHostedZone(zoneRequest);

            ResourceRecordSet recordSet = new ResourceRecordSet
            {
                Name            = domainName,
                TTL             = 60,
                Type            = RRType.A,
                ResourceRecords = new List <ResourceRecord> {
                    new ResourceRecord {
                        Value = "192.0.2.235"
                    }
                }
            };

            Change change1 = new Change
            {
                ResourceRecordSet = recordSet,
                Action            = ChangeAction.CREATE
            };

            ChangeBatch changeBatch = new ChangeBatch
            {
                Changes = new List <Change> {
                    change1
                }
            };

            ChangeResourceRecordSetsRequest recordsetRequest = new ChangeResourceRecordSetsRequest
            {
                HostedZoneId = zoneResponse.HostedZone.Id,
                ChangeBatch  = changeBatch
            };

            ChangeResourceRecordSetsResponse recordsetResponse = route53Client.ChangeResourceRecordSets(recordsetRequest);

            GetChangeRequest changeRequest = new GetChangeRequest
            {
                Id = recordsetResponse.ChangeInfo.Id
            };

            while (route53Client.GetChange(changeRequest).ChangeInfo.Status == ChangeStatus.PENDING)
            {
                Console.WriteLine("Change is pending.");
                Thread.Sleep(TimeSpan.FromSeconds(15));
            }
            #endregion

            Console.WriteLine("Change is complete.");
            Console.ReadKey();
        }