【问题标题】:Is it possible using the Java AWS API to update a Route53 record?是否可以使用 Java AWS API 更新 Route53 记录?
【发布时间】:2012-04-16 06:36:56
【问题描述】:

我在 AWS Route53 上有一个托管域。在该域下,我有一个子域的“A”记录。

我希望能够使用 Java API 更新“A”记录的 IP 地址。但是,在查看com.amazonaws.services.route53.model.Change 类的setAction 方法时,它只接受CREATEDELETE 值。这似乎与 Java API 在后台发送的 XML 消息中允许的值相匹配。

有什么办法只更新IP地址,还是我必须删除原始记录然后重新创建?

谢谢

【问题讨论】:

    标签: java amazon-web-services amazon-route53


    【解决方案1】:

    使用这段代码对我有用:

    ResourceRecord record = new ResourceRecord(loadBalancer);
    List<ResourceRecord> records = new ArrayList<ResourceRecord>();
    records.add(record);
    ResourceRecordSet recordsSet = new ResourceRecordSet();
    recordsSet.setResourceRecords(records);
    recordsSet.setType(RRType.CNAME);
    recordsSet.setTTL(900L);
    recordsSet.setName(subdomain + ".");
    Change change = new Change(ChangeAction.CREATE, recordsSet);
    List<Change> changes = new ArrayList<Change>();
    changes.add(change);
    ChangeBatch batch = new ChangeBatch(changes);
    ChangeResourceRecordSetsRequest request = new ChangeResourceRecordSetsRequest();
    request.setChangeBatch(batch);
    request.setHostedZoneId(hostedZoneId);
    ChangeResourceRecordSetsResult result = getRoute53Client().changeResourceRecordSets(request);
    System.out.println(result);
    

    只需将我使用的变量替换为适当的数据即可。 (子域、loadBalancer 和 hostsZoneId)。 getRoute53Client() 方法从 AWS API 返回 AmazonRoute53Client 类的实例。

    【讨论】:

      【解决方案2】:
              ResourceRecord rr = new ResourceRecord(IPAdress); // IPAddress will be String variable that has IP value
              List<ResourceRecord> rrList = new ArrayList<ResourceRecord>();
              rrList.add(rr);
      
              // Create a ResourceRecordSet
              ResourceRecordSet resourceRecordSet = new ResourceRecordSet();
              resourceRecordSet.setName(domainName); //domainName is String value of your domain
              resourceRecordSet.setType(RRType.A); //type of ResourceRecordSet
              resourceRecordSet.setTTL(new Long(300));
              resourceRecordSet.setWeight(new Long(0));
              resourceRecordSet.setResourceRecords(rrList);
      
              // Create a change
              Change change = new Change(ChangeAction.CREATE, resourceRecordSet);
              List<Change> changesList = new ArrayList<Change>();
              changesList.add(change);
      
              // Create a change batch
              ChangeBatch changeBatch = new ChangeBatch(changesList);
      
              // Create ChangeResourceRecordSetRequest.
              ChangeResourceRecordSetsRequest request = new ChangeResourceRecordSetsRequest(hostedZoneID, changeBatch); //hostedZoneId is variable that is the id of HostedZone
      
              // Send the request and get the response.
              ChangeResourceRecordSetsResult result = amazonRoute53Client.changeResourceRecordSets(request);
      
              // Print the result
              System.out.println(result.getChangeInfo());
      

      【讨论】:

      • 嗨!欢迎来到 Stackoverflow。请附上文字说明,以使您的答案对社区更清晰、质量更高。干杯
      【解决方案3】:

      唯一的方法是使用here 中提到的 DELETE / CREATE 序列。

      创建更改批处理请求

      要创建更改批处理请求,请使用 ChangeResourceRecordSets 动作 ChangeBatch 元素。您在内部使用 CREATE 和 DELETE 操作 要更新的每条记录的 ChangeBatch 元素。如果 您只是在创建记录,那么您将只使用 CREATE 操作。

      【讨论】:

      • 知道是否至少可以删除“任何现有”资源记录集,而不是同时指定名称和 AliasTarget(如果是别名)?我想“设置资源”覆盖那里的任何内容,并且不想先找到一个并删除它,如果它在那里......虽然也许我必须这样做(对不起我的评论冗长)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      相关资源
      最近更新 更多