Begin by preparing the pasta dough. Crack the eggs into a bowl and weigh them using a kitchen scale. Measure out double their weight in 00 flour. In a large mixing bowl, make a well in the center of the flour and pour in the eggs. Using a fork, gently incorporate the flour into the eggs, working from the center outwards until a shaggy dough forms. If the dough feels dry, a splash of cold water can help bring it together.
Turn the mixture onto a clean, preferably wooden, surface. Knead it gently until it becomes cohesive and elastic; the warmth from your hands will help the dough develop a smooth texture. Wrap the dough tightly in plastic wrap and allow it to rest for at least 30 minutes.
While the dough rests, move on to the filling. In a pan over medium heat, warm the olive oil, then add the spinach and cook until wilted. Set the spinach aside to cool completely. Once cooled, remove as much moisture as possible by squeezing the spinach using clean hands, paper towels, or a tea towel. Excess moisture can lead to a watery filling, so ensure it's thoroughly dry before proceeding. Roughly chop the spinach.
In a mixing bowl, combine the ricotta, chopped spinach, egg, olive oil, Parmesan, Pecorino, and salt. Season with freshly ground pepper to taste. For ease of filling later, transfer the mixture to a pastry bag if you have one; otherwise, it can be spooned by hand.
Return to the rested pasta dough. Divide it into three equal pieces. Flatten one piece slightly and begin feeding it through a pasta machine set to the widest setting. After the first pass, fold the dough like an envelope and repeat the process about five times to develop elasticity. Lightly dust with flour if the dough feels sticky. Gradually narrow the machine settings, passing the dough through each one until reaching setting 6. Cut the sheets into rectangles and dust lightly with flour.
Bring a large pot of water to a boil. Lay a clean tea towel over your work surface. Boil the pasta sheets in batches of three for about 90 seconds, then transfer them using a slotted spoon onto the tea towel to dry.
Now, prepare the béchamel. In a medium saucepan, melt the butter over medium heat. Whisk in the flour and cook for a few minutes to form a pale roux. Gradually whisk in the milk and bring the mixture to a gentle boil. Stir frequently until the sauce thickens enough to coat the back of a spoon. Season with salt, pepper, and stir in the lemon zest for a bright finish.
Preheat your oven to 350°F (170°C). Grease a 9x14 inch baking dish with butter and spread a thin layer of béchamel across the bottom. Place a pasta rectangle on your work surface, pipe or spoon a line of filling along one edge, then roll the pasta tightly around the filling to form a tube. Place the cannelloni seam-side down in the prepared baking dish. Continue until all the pasta and filling are used.
Spoon béchamel sauce generously over the cannelloni, ensuring each one is well-covered. Finish with a liberal sprinkle of grated Parmesan cheese for a golden, bubbling crust.
Bake in the preheated oven for 20 to 25 minutes, until the cannelloni are lightly browned and the sauce is bubbling. Allow the dish to cool slightly before serving, letting the flavors settle into every layer.