The right-hander, who turns 37 in two weeks, has a 138-127 record with a 4.91 ERA. He pitched the last eight seasons with the Cincinnati Reds before becoming a free agent.
Last year, Arroyo was 14-12 with a 3.79 ERA.
The Diamondbacks had been searching for another veteran starter for their rotation and had been in contact over the past few days. Arroyo gets $9.5 million each of the next two seasons plus a $4.5 million buyout if the team doesn't exercise its $11 million option for 2016.
Arroyo, who also pitched for Pittsburgh and Boston, has been a workhorse for the Reds, starting no fewer than 32 games in each of his eight seasons with the team. He has topped 200 innings in eight of his past nine seasons. The exception was 2011, when he pitched 199.
He immediately becomes Arizona's most experienced starter. The others are right-handers Trevor Cahill and Brandon McCarthy and young left-handers Patrick Corbin and Wade Miley.
General manager Kevin Towers had said at a news conference earlier in the day that starting pitching depth was the biggest issue the team needed to address.
Team President Derrick Hall confirmed that a deal had been reached Friday afternoon.