Oii, Roberto. Tudo bem?
A sua dúvida quanto à conexão faz todo sentido, e a boa notícia é que o código que você montou tá correto: não há diferença funcional entre juntar tudo em uma célula ou dividir em duas.
O problema aqui é de ordem de execução, não de sintaxe. No Colab, todas as células compartilham a mesma sessão, então a variável de ambiente definida em uma célula continua valendo nas seguintes. O detalhe é que genai.Client() lê a GOOGLE_API_KEY no exato momento em que é instanciado: se a célula do cliente rodou antes da célula com o os.environ, ou se você reiniciou o ambiente e executou só a segunda, o cliente nasce sem credencial e o erro aparece.
Ao juntar tudo em uma célula, a ordem passou a ser garantida, e por isso funcionou. Sempre execute de cima para baixo (Ambiente de execução, Executar tudo).
E você, Roberto, prefere trabalhar com poucas células maiores ou com várias células pequenas e bem separadas no Colab? Compartilhe aqui, porque essa organização influencia bastante na hora de depurar esse tipo de comportamento.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!