I made 2 changes here.
First, I added cleaning of the zone_id when it is passed into a function which requires it. The default form of the "Id" in the zone is "/hostedzone/". This means that you must remove the "/hostedzone/" part in your application to have a usable "Id" value. I just added that removal automatically. Perhaps the better approach here is to remove the "/hostedzone/" portion of the "Id" before returning it.
Second, I have no idea why you couldn't pass in the resource_records list to ResourceRecordSets.add_change(). Instead, you would have to take the returned Record instance and add them manually. I just added resource_records as an optional argument to add_change().
Added sanitization of the default zone_id return val
Added an optional resource_records to ResourceRecordSets.add_change()
Preserving my changes
Removed a conflict label
Why is this here?