使用 ChangeResourceRecordSets Boto3 删除/更新插入时,Change 中缺少字段“SetIdentifier”

ShK*_*ShK 2 python-2.7 amazon-route53 aws-cli boto3

我花了一周的时间尝试使用 Boto3 v1.10.39 删除/更新插入简单的 Route 53 资源记录。

我的代码:

resp=r53_client.change_resource_record_sets(
    HostedZoneId=<ZONE_ID>,
    ChangeBatch={
        'Comment': 'del_ip',
        'Changes': [
            {
                'Action': 'DELETE',
                'ResourceRecordSet': {
                    'Name': <SUBDOMAIN>,
                    'Type': 'A',
                    'Region': 'us-east-1',
                    'TTL': 300,
                    'ResourceRecords': [{'Value': <OLD_IP>}]
                }
            }
        ]
    }
)
Run Code Online (Sandbox Code Playgroud)

错误消息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/botocore/client.py", line 272, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/lib/python2.7/dist-packages/botocore/client.py", line 576, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.errorfactory.InvalidInput: An error occurred (InvalidInput) when calling the ChangeResourceRecordSets operation: Invalid request: Missing field 'SetIdentifier' in Change with [Action=DELETE, Name=<SUBDOMAIN>., Type=A, SetIdentifier=null]
Run Code Online (Sandbox Code Playgroud)

故障排除步骤:

  1. 我已经阅读了所有可能的文档(Boto3、AWSCLI、AWS 开发人员指南),仅当它不是简单的 RR(加权、多值、故障转移等)时才需要“SetIdentifier”字段:

    • 设置标识符(字符串)

      具有非 simple 路由策略的资源记录集:区分具有相同名称和类型组合的多个资源记录集的标识符,例如类型为 A 的多个名为 acme.example.com 的加权资源记录集. 在一组具有相同名称和类型的资源记录集中,每个资源记录集的 SetIdentifier 值必须是唯一的。

      有关路由策略的信息,请参阅Amazon Route 53 开发人员指南中的选择路由策略。

  2. 尝试使用 AWS CLI 进行相同的操作,与使用 Boto3 调用时出现相同的错误。

  3. 调用list_resource_record_sets并验证不存在设置标识符值。
  4. 尝试添加 'SetIdentifier': None、 'SetIdentifier': '' 和 'SetIdentifier': ,但它们都不起作用,这是有道理的,因为原始 RR 根本没有此属性。

环境:

  • 操作系统:amzn-ami-hvm-2015.09.1.x86_64-gp2

  • Python:v2.7.14

  • BOTO3:v1.10.39

  • 博托核心:1.13.39

  • aws-cli:v1.16.301

我想知道这是否是 AWS API 的错误。

ShK*_*ShK 5

在 Boto3 github 中创建了一个问题,并从他们那里得到了帮助,说删除“Region”属性将解决我的问题,一旦我这样做,它对我的​​代码来说就像一个魅力。

resp=r53_client.change_resource_record_sets(
HostedZoneId=<ZONE_ID>,
ChangeBatch={
    'Comment': 'del_ip',
    'Changes': [
        {
            'Action': 'DELETE',
            'ResourceRecordSet': {
                'Name': <SUBDOMAIN>,
                'Type': 'A',
                'TTL': 300,
                'ResourceRecords': [{'Value': <OLD_IP>}]
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

)