Second half goals from Lyon substitute Mousa Dembele ensured Lyon lifted the Emirates Cup at Arsenal's expense, after Pierre-Emerick Aubameyang had given the Gunners the lead.
It was all Arsenal in the first half, and after Henrikh Mkhitaryan forced a stunning save from Anthony Lopes with a stinging volley from 15 yards, the Armenian turned creator, as his fizzing cross was converted by Aubameyang.
The 30-year-old was leading the line well, drafted in from the left wing after Alexandre Lacazette was taken off as a precaution in the opening ten minutes, and his second goal of pre-season was everything his side's performance merited in the first 45.
The second half was more of the same to begin with, albeit with less intensity as various substitutions took the sting out of the game. But as Arsenal toiled to find a second, Lyon were encouraged, and were able to find an equaliser when substitutes Raffael and Moussa Dembele combined, the latter left unmarked in the area to power home a header.
Things then went from bad to worse for the Gunners, as after Gabriel Martinelli had a goal correctly ruled out, a botched attempt at an offside trap gave Dembele the run of the Arsenal half to bear down on goal, and the young striker showed exactly why Manchester United are interested in his signature.
Key Talking Point
Friendlies are all about fitness and getting things ready for the season ahead, but the Emirates Cup branding of this one gave it a real competitive feel from the start.
From an Arsenal perspective, it started well. With new signing Dani Ceballos watching on from the bench, most of the football was played in the Lyon third, and despite losing Lacazette to a precautionary substitution, they looked a constant threat.
Aubameyang was moved in from the left to lead the line upon Lacazette's withdrawal, and looked in his element in his natural position throughout the first half. His goal, impossible not to finish due to the quality of the ball in from the right, came as a well-deserved reward for his endeavour.
Fragile defending is so often the story for Arsenal, however, and it reared its head once again when Dembele found himself in yards of space on the end of a Raffael cross to nod in an equaliser.
They thought they had a winner through Martinelli, but after it was ruled out for an offside in the build-up, it was Dembele who was on hand once again to give the visitors a surprise lead.
Dani Ceballos was thrown on for his debut to try and turn the game around, but all in all it was a distinctly Arsenal performance, with flimsy defending undermining what was otherwise a spirited display.
Starting XI: Leno (6); Maitland-Niles (6), Sokratis (6), Chambers (6), Monreal (6); Guendouzi (6), Xhaka (6); Mkhitaryan (8), Willock (7), Aubameyang (7); Lacazette (4)
Subs: Nelson (6), Nketiah (5), Ceballos (6), Mustafi (5), Martinelli (7), Jenkinson (6), Medley (4)
Up until he as substituted, Mkhitaryan ran the show. His cross for Aubameyang's goal was impossible not to convert for the front man, and he was their chief creative force throughout.
Nelson very direct and excellent so far. Willock and Mhkitayan have had some good moments too. Hope Mkhitaryan shows consistency in his game. Nketiah and some of the other youngsters need to come on soon.— P™ | (was @cechque) (@SemperFiArsenal) July 28, 2019
Mkhitaryan f**king come on give him credit the haters .— steve kay afc (@steveafc71) July 28, 2019
If he can perform like this on a consistent basis then he will be a key player for Arsenal in the season to come - but that's a big if.
Starting XI: Lopes (7); Dubois (6), Mbiwa (6), Denayer (6), Marcal (7); Mendes (7), Lucas (6), Cheikh (5); Terrier (6), Traore (5), Memphis (6)
Subs: Dembele (8), Aouar (6), Racioppi (6), Tousart (6), Raffael (7)
Arsenal will continue their preparations against Angers on Wednesday, before a trip to Barcelona looms this time next week.
Lyon, meanwhile, stay in England for a double header with Liverpool and Bournemouth.