以编程方式分配 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;
        }
    }