以编程方式分配 Route53 DNS
Assigning a Route53 DNS programmatically
如果我有 serverBase.mydomain.net
的 A 记录指向 IP 10.20.30.40
但是,如果我想创建一个指向 IP 的 A 记录 serverProxy(在注释掉的行中交换),但它会给出错误:
"Tried to create an alias that targets 10.20.30.40., type A in zone
********* , but the alias target name does not lie within the target zone"
我可以手动执行此操作,所以是代码中的某些地方不正确吗?
String subDomainName = "serverProxy.mydomain.net";
String zoneId = "**********";
//String target = "serverBase.mydomain.net";
String target = "10.20.30.40";
AmazonRoute53Client client = getAmazonRoute53Client();
List<Change> changes = new ArrayList<Change>();
List<ResourceRecord> recourceRecords = new ArrayList<>();
ResourceRecordSet resourceRecordSet = new ResourceRecordSet(subDomainName+".",RRType.A);
//AliasTarget alias = new AliasTarget(zoneId, target);
//alias.setEvaluateTargetHealth(false);
//resourceRecordSet.setAliasTarget(alias);
changes.add(new Change( ChangeAction.CREATE, resourceRecordSet));
ChangeBatch changeBatch = new ChangeBatch(changes);
try {
ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest = new ChangeResourceRecordSetsRequest(zoneId, changeBatch);
client.changeResourceRecordSets(changeResourceRecordSetsRequest);
}
catch( Exception e)
{
System.out.println(e.getMessage());
e.printStackTrace();
}
ALIAS
记录集只能指向一个 DNS 名称。它不能直接指向 IP 地址。
如果要创建指向 IP 地址的记录,则需要创建 A
记录。
String zoneId = "myzoneID";
String cname = "myserver.mydomain.net";
AmazonRoute53Client client = getAmazonRoute53Client();
List<Change> changes = new ArrayList<>();
Change change = new Change()
.withAction(ChangeAction.CREATE)
.withResourceRecordSet(new ResourceRecordSet()
.withType(RRType.CNAME)
.withName( cname )
.withTTL(300L)
.withResourceRecords(new ResourceRecord( "10.20.30.40" )));
changes.add( change );
ChangeBatch changeBatch = new ChangeBatch(changes);
try {
ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest = new ChangeResourceRecordSetsRequest(zoneId, changeBatch);
client.changeResourceRecordSets(changeResourceRecordSetsRequest);
logback.info( "DNS Record " + cname + " created");
}
catch( InvalidChangeBatchException icbe )
{
String error = icbe.getMessage();
if( error.contains("already exists" ))
{
logback.info( "DNS Record already exists");
}
else
{
throw icbe;
}
}
如果我有 serverBase.mydomain.net
的 A 记录指向 IP 10.20.30.40
但是,如果我想创建一个指向 IP 的 A 记录 serverProxy(在注释掉的行中交换),但它会给出错误:
"Tried to create an alias that targets 10.20.30.40., type A in zone ********* , but the alias target name does not lie within the target zone"
我可以手动执行此操作,所以是代码中的某些地方不正确吗?
String subDomainName = "serverProxy.mydomain.net";
String zoneId = "**********";
//String target = "serverBase.mydomain.net";
String target = "10.20.30.40";
AmazonRoute53Client client = getAmazonRoute53Client();
List<Change> changes = new ArrayList<Change>();
List<ResourceRecord> recourceRecords = new ArrayList<>();
ResourceRecordSet resourceRecordSet = new ResourceRecordSet(subDomainName+".",RRType.A);
//AliasTarget alias = new AliasTarget(zoneId, target);
//alias.setEvaluateTargetHealth(false);
//resourceRecordSet.setAliasTarget(alias);
changes.add(new Change( ChangeAction.CREATE, resourceRecordSet));
ChangeBatch changeBatch = new ChangeBatch(changes);
try {
ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest = new ChangeResourceRecordSetsRequest(zoneId, changeBatch);
client.changeResourceRecordSets(changeResourceRecordSetsRequest);
}
catch( Exception e)
{
System.out.println(e.getMessage());
e.printStackTrace();
}
ALIAS
记录集只能指向一个 DNS 名称。它不能直接指向 IP 地址。
如果要创建指向 IP 地址的记录,则需要创建 A
记录。
String zoneId = "myzoneID";
String cname = "myserver.mydomain.net";
AmazonRoute53Client client = getAmazonRoute53Client();
List<Change> changes = new ArrayList<>();
Change change = new Change()
.withAction(ChangeAction.CREATE)
.withResourceRecordSet(new ResourceRecordSet()
.withType(RRType.CNAME)
.withName( cname )
.withTTL(300L)
.withResourceRecords(new ResourceRecord( "10.20.30.40" )));
changes.add( change );
ChangeBatch changeBatch = new ChangeBatch(changes);
try {
ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest = new ChangeResourceRecordSetsRequest(zoneId, changeBatch);
client.changeResourceRecordSets(changeResourceRecordSetsRequest);
logback.info( "DNS Record " + cname + " created");
}
catch( InvalidChangeBatchException icbe )
{
String error = icbe.getMessage();
if( error.contains("already exists" ))
{
logback.info( "DNS Record already exists");
}
else
{
throw icbe;
}
}