Everything I've seen about OpsWorks is chef/puppet based. Ansible is not mentioned in the opsworks documentation at all. I think that's just wrong.
data Person = Person
{ personFirstName :: Text
, personLastName :: Text
} deriving (Generic)
instance ToJSON Person where
toJSON = genericToJSON $ aesonPrefix snakeCase
instance FromJSON Person where
parseJSON = genericParseJSON $ aesonPrefix snakeCase
Which produces messages like: {
"first_name": "John",
"last_name": "Doe"
}