The agreement was first reported by CBSSports.com.
Morales, 30, hit .277 with 23 home runs and 80 RBIs with the Seattle Mariners last season.
In Minnesota, Morales is likely to see a majority of his time as the club's designated hitter.
Morales played only 51 games in 2010 and missed the entire 2011 season with the Los Angeles Angels after injuring his leg while celebrating a walk-off grand slam. He's a career .280 hitter with 102 homers and 345 RBIs in 620 games.