The Angels have now won three of the four games between the teams this season and pulled into a tie with Houston for first place in the division.
Heaney (2-2) allowed one run, struck out 10 and walked just one while throwing 100 pitches. He posted four three-up, three-down innings.
Justin Anderson, who inherited the closer role for Los Angeles when Keynan Middleton hurt his right elbow, gave up two singles in the ninth inning sandwiched around a double play to earn his first major league save.
Houston starter Lance McCullers Jr. (5-2) gave up two runs on four hits in six innings. McCullers stuck out six and walked two, with both of the walks coming back to haunt him in the pivotal sixth inning.
The Angels grabbed the lead in the second when a single by former Astro Luis Valbuena chased home Andrelton Simmons, who had singled with one out and stolen second base.
Houston tied the score in the third on Max Stassi's single to center field to plate Josh Reddick, who had doubled to lead off the inning.
It stayed tied until the sixth, when Martin Maldonado walked with one out and went to second when Mike Trout walked with two outs. Upton then hit the single to score Maldonado.
Upton led the Angels with two hits, while Valbuena and Simmons had the other two hits for Los Angeles.
The Astros will send right-hander Gerrit Cole (4-1, 1.43 ERA) to the mound on Tuesday in Game 2 of the series to oppose Los Angeles right-hander Jaime Barria (3-1, 2.45).
--Field Level Media
Houston | LA Angels | |
Lance McCullers Jr. | Player | Andrew Heaney |
Loss | W/L | Win |
6.0 | IP | 8.0 |
6 | Strikeouts | 10 |
4 | Hits | 4 |
3.00 | ERA | 1.12 |
Houston | LA Angels | |
Carlos Correa | Player | Justin Upton |
1 | Hits | 2 |
0 | RBI | 1 |
0 | HR | 0 |
1 | TB | 2 |
.500 | Avg | .667 |