Se tratando de um curso que teve a ultima atualização em março/2022, ao tentar replicar hoje a implementação da API em uma App Engine do Google Cloud, o arquivo de configuração da aula, app.yaml, não funciona.
Este é o código do app.yaml apresentado na aula:
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app
runtime_config:
python_version: 3
includes:
- env_vars.yaml
Ele sempre vai apontar que a versão do python não é mais suportada pelo App Engine. Testei todas (3.8, 3.9, 310, 311, 313), de todas maneiras que tive ideia de fazer sentido, e o erro persistiu.
Aqui vão os pontos que apurei, e acredito que sejam os motivos pelos quais isso não funciona mais:
• python_version: 3 é inválido em env: flex, para env: flex, a configuração python_version não tem efeito. O campo runtime_config com python_version só é válido no ambiente standard
• runtime: python está incorreto para env: flex, então se a gente for usar env: flex, o valor aceito para runtime precisa ser um runtime Docker-based conhecido, então o python sozinho não vai ser valor suportado ou atualizado desse jeito
Ou seja, se não usarmos um Dockerfile, e ainda sim definimos runtime: custom com env: flex, o deploy vai falhar.
Da pra fazer um Dockerfile e continuar usando o flex, mas já fugiria do escopo da aula, que é trazer essa solução com mais simplicidade.
Minha Solução
Passei o Environment da aplicação de Flex para Standard. A diferença é basicamente que o environment Flex é feito em containers Docker, ideal para apps pesados, com uso intensivo de CPU, tem melhor escala e podemos definir o ambiente com acesso root total.Mas, no nosso contexto da aula, não precisamos de nada disso, então o environment Standard atende com tranquilidade.
runtime: python313
entrypoint: gunicorn -b :$PORT main:app
handlers:
- url: /.*
script: auto
includes:
- env_vars.yaml
Assim, a API vai rodar sem problemas.