Morosi later reported the agreement is worth $13 million.
Estrada pieced together an All-Star-caliber campaign in 2016, but he's been a bit inconsistent this year.
Through 31 starts, Estrada is 9-8 with a 4.84 ERA and a career-high 170 strikeouts. He's also in the midst of allowing 8.9 hits per nine innings—a mark that's 2.1 hits higher than his American League-leading tally from last year.
The 34-year-old has been far more effective of late, though.
While Estrada's season-long numbers aren't particularly encouraging, he is 5-2 since the All-Star break with a 4.40 ERA.
Estrada has also watched his opponents' BABIP (batting average on balls in play) improve from .326 before the Midsummer Classic to .253 in 13 starts after it.
Given those encouraging signs, the team's most sensible option was to lock up Estrada sooner rather than later.
The 10-year veteran was scheduled to become a free agent at season's end, and the Blue Jays likely would have had to engage in a bidding war on the open market to retain his services.
With that bit of business taken care of, the Blue Jays can now head into the winter focused on hashing out a raise for Marcus Stroman in arbitration.
Stats courtesy of Baseball Reference.