KISSIMMEE, Fla. -- Bud Norris, who has a strong track record against the Cardinals in his career, pitched like he was ready for his Opening Day assignment by holding St. Louis to six scoreless innings, allowing three hits, as the Astros edged the Cards, 3-2, on Friday afternoon at Osceola County Stadium.

Norris, who will make his first Opening Day start for the Astros when they face the Rangers at Minute Maid Park on March 31, tossed a spring-high 84 pitches while throwing six innings for the second game in a row. He allowed two singles and one double but no Cardinals batter reached third base against Norris.

"I made a couple of adjustments today. I was up a little bit in the zone and those adjustments are mechanical. When I was out there in the heat of the moment, I made those adjustments," said Norris.

With Norris out of the game, the Cardinals rallied for two runs in the seventh inning against reliever Jose Veras, who was making his first appearance since returning from the World Baseball Classic. Tony Cruz had an RBI single, and Matt Adams tied it with a sacrifice fly to deep left field.

Cardinals starter Jaime Garcia allowed four hits and two runs and struck out five batters in six innings. Jose Altuve led off the game with a walk and eventually scored on a wild pitch, and Chris Carter had an RBI single in the sixth to put Houston ahead, 2-0.

Houston broke the 2-2 tie in the eighth with a pair of singles from Tyler Greene and Altuve and a sacrifice fly from Rick Ankiel, which scored Greene. Altuve went 2-for-3 and scored the Astros' first two runs.

Up next for the Astros: Right-hander Philip Humber, who earlier this week learned he had secured a spot as the No. 3 starter in the Astros rotation, will start for the Astros when they make their first trip to Disney to face the Braves at 12:05 p.m. CT on Saturday. Humber will make his Astros regular season debut on April 3 against the Rangers at Minute Maid Park.