I learned one approach that sometimes works: Figure out what they want and give them what they want. But with the condition they change their behavior. From your post, it sounds like this guy wants to be promoted.
If I were you, I would talk to him like this:
“Look, you are good technically. You should be promoted. But higher levels here mean more than just code. It means mentoring, working closer with peers, hiring people, training them, helping management. We have a career path in place, let’s make a plan for you.”
In big companies it’s even easier. Use the promotion track. Show him what’s expected. If he wants the title, he has to play the role.
Three things can happen:
He rises to it: He starts acting more professional, helps others, builds trust. You win, he wins, team wins.
He tries and fails: He’s exposed higher up. He has direct reports. He’s in meetings with management. He can’t hide his behavior anymore. Eventually, they’ll act.
He says “no thanks”: Then it’s clear. He just wants to stay where he is and make your life harder. At least now everyone sees it.
This puts the pressure where it belongs. On him, to live up to what he says he wants.
[Edit]: You can also tell him that if he wants the promotion, he has to start acting like someone at that level. That means following the principle: “There are no mistakes, only lessons we learn from.”
Tell him: "There was an outage. OK. Then step up. Take the lead, organize a post-mortem, and work with others to find real measures that prevent it in the future. Not to assign blame, but to help the organization improve."
Maybe you don’t even join the post-mortem, let him own it. Just make clear: this isn’t about finger-pointing, it’s about building a culture where problems lead to better systems.