如何使用 Java SDK 2 在 AWS Route 53 中设置多个 MX 记录

How to set multiple MX records in AWS Route 53 using Java SDK 2

我在 Windows 10 上使用 AWS Route 53 Java SDK 2 software.amazon.awssdk:software.amazon.awssdk:route53:2.8.3 和 OpenJDK 11。我想设置两个不同的 MX 记录优先级,例如

如果我将它们设置为单独的资源记录,则最后一个会覆盖第一个,这样我最终只会得到 20 smpt2.example.com。我在 AWS forum thread 上读到我需要将这些值组合到一个资源记录中,每个 MX 记录在一个单独的行上,所以我尝试设置使用 "\n" 组合这些值(例如用换行符连接它们字符):

10 smpt1.example.com.
20 smpt2.example.com.

然而这会产生错误:

… software.amazon.awssdk.services.route53.model.InvalidChangeBatchException: [Invalid Resource Record: FATAL problem: MXRRDATANotTwoFields (MX record doesn't have 2 fields) encountered with '10 smtp1.example.com.

20 smtp2.example.com.'] (Service: Route53, Status Code: 400, Request ID: …

(注意,错误输出在新行开始 20.smtp2.example.com,表示有一个换行符。上面的 Stack Overflow 格式化程序正在删除换行符,所以我添加了一个额外的空行来说明。空行并没有出现在实际的错误信息中。)

所以我卡住了。如何使用 Java SDK 2 在 Route 53 中设置两个具有不同优先级的 MX 域?

更新: 这似乎是一个相当大的阻塞问题。当然不可能是 Route 53 不使用 Java SDK 2 处理多个 MX 记录。它完全坏了吗?我打开 Issue #1484 到目前为止没有任何反应。

我在使用 Route 53 API 模型时犯了一个错误,忘记了 Route 53 将单个名称的多个值分组并键入 资源记录集 . ResourceRecordSet class 有多个 ResourceRecord,每个只包含一个 。 "resource record set" 有一个名称+类型,用作集合的键。换句话说,我必须将所有相同名称的值分组并键入此 ResourceRecordSet,并在单个 API 调用中将它们设置在一起。

我之前的错误是我编写代码在 ResourceRecordSet 中设置单个值,然后我试图多次调用该代码,这导致相同的多个 "sets"名称+值键,其中的每一个随后都会替换之前的键。意识到这一点后,我不得不重构代码以按名称+值对资源记录进行分组,并将所有值放入 ResourceRecordSet 并使用 UPSERT 同时设置它们。