The 41-year-old right-hander, a member of last season's World Series champion Philadelphia Phillies, can make an additional $2.5 million in bonuses based on days on the active roster.
Gordon was 5-4 with two saves and a 5.16 ERA last year. He did not allow a run in 24 of 34 appearances, but his season ended in July due to right elbow inflammation.
Gordon said he's been throwing and playing catch for three weeks, with no pain. He described his elbow as close to 100 percent.
"I'm grateful that I didn't have to have Tommy John surgery and that this didn't set me back," he said.
Gordon spoke with Phillies manager Charlie Manuel before reaching his decision last week. He told Manuel that if the Phillies wanted him to return he would consider it, but that he was looking forward to moving on.
"I wanted to take a chance at going out West," Gordon said.
He'll be reunited with Diamondbacks manager Bob Melvin, his former teammate and occasional catcher in Kansas City.
"For me to again get the opportunity to play with him and this organization, this is a thrill and a dream for me and my family," Gordon said. "He's always been an upstanding and very dear friend to me."
Gordon was an AL All-Star in 1998 and 2004 and made the NL squad in 2006. He led the AL with 46 saves in 1998.
He gets $100,000 for one day on the active roster; $200,000 each for 30, 45, 60, 75, 90, 105, 120, 135 and 150 days; and $300,000 each for 165 and 180 days.