Perguntas frequentes sobre o App Engine

Como faço login em minha conta do App Engine?

Para Contas do Google normais, incluindo usuários do Gmail, você pode fazer login na sua conta do App Engine acessando o console do Google Cloud Platform.

Como faço para criar um projeto do Cloud para o Google App Engine?

Use o console do Google Cloud Platform Console para criar um projeto do Cloud.

Quais linguagens são compatíveis com o Google App Engine?

Atualmente, o ambiente padrão do App Engine é compatível com Java, Python, PHP, Go e Node.js. Além disso, os modelos do seu site podem incluir JavaScript junto ao HTML. Isso, entre outras coisas, permite criar aplicativos da Web com AJAX ativado.

Que tipo de certificações o App Engine recebeu?

O App Engine concluiu com êxito o processo de auditoria para os padrões SAS70 Tipo II, SSAE 16 Tipo II, ISO 27001 e ISAE 3402 Tipo II.

Quais são os meus direitos para os projetos que eu crio?

Entre os clientes do Google e do Google App Engine, o cliente é proprietário de todos os direitos de propriedade intelectual dos dados armazenados e do código do aplicativo e do projeto. O Google é proprietário de todos os direitos de propriedade intelectual dos serviços e software do Google App Engine e do Google Cloud Platform.

Para mais informações, incluindo as definições desses termos, consulte os Termos de Serviço do Google Cloud.

Ainda posso desenvolver um aplicativo do App Engine se não tiver uma conta?

Claro! Mesmo que você ainda não tenha uma conta do App Engine, sempre é possível fazer o download do nosso SDK e começar a desenvolver.

Quantos aplicativos posso criar com o App Engine?

O número de projetos do Google App Engine que você pode criar depende de vários fatores, incluindo quais recursos você está usando e seu histórico de uso anterior com o Google Cloud Platform. Os clientes podem ter cotas diferentes com base nesses e em outros fatores.

Se você tentar exceder o limite do seu projeto, o console do GCP solicitará o preenchimento de um formulário de solicitação. Isso acontece quando você tenta criar um projeto, mas já atingiu sua cota. No formulário, você precisa especificar o número de projetos adicionais necessários, juntamente com as respectivas contas de e-mail, contas de faturamento e usos pretendidos.

Mais informações sobre solicitações de aumento de cota estão disponíveis na página de solicitações de cotas do projeto.

Que tipo de conteúdo é permitido no Google App Engine?

Consulte nossos Termos de Serviço se tiver dúvidas sobre o tipo de conteúdo permitido com o App Engine.

Por que recebo um erro de URI para /favicon.ico?

Aplicativos que não incluíram um arquivo favicon.ico podem incluir o URI /favicon.ico na lista de URIs com erro. Favicon.ico é um arquivo solicitado pelo navegador de um usuário quando ele tenta carregar a página. Favicon.ico é o ícone do seu site e normalmente é exibido na barra de URLs do navegador do usuário, ao lado do endereço da Web do seu site.

Para seu aplicativo, o favicon.ico deve ser uma imagem estática. Você pode enviar um arquivo favicon.ico com seu aplicativo e, em seu arquivo app.yaml, configurar seu aplicativo para disponibilizar a imagem quando o URL /favicon.ico for solicitado. Veja a seguir entradas de exemplo em appengine-web.xml (Java) e app.yaml (Python/PHP/Go). No exemplo do Python/PHP/Go, favicon.ico está localizado em static/images. Para simplificar, o mesmo arquivo está localizado no diretório raiz (war) no exemplo em Java.

Python/PHP/Go

app.yaml
- url: /favicon\.ico
  static_files: static/images/favicon.ico
  upload: static/images/favicon\.ico

Java

appengine-web.xml
<static-files>
  <include path="/favicon.ico" />
</static-files>

O que é GQL?

GQL é uma linguagem de consulta usada com o Datastore. Aplicativos em Python podem usá-la para consultar entidades. Ela usa uma sintaxe parecida com SQL para recuperar entidades inteiras do Datastore do seu aplicativo e inclui a capacidade de filtrar propriedades, especificar a ordem de classificação dos resultados e limitar o número de entidades retornadas. A referência completa da linguagem GQL pode ser encontrada aqui.

O GQL está disponível para Java?

O GQL não está incluído no Java SDK, mas pode ser usado por meio da API Cloud Datastore. Recomendamos que os desenvolvedores Java usem o JDO ou JPA em vez do GQL, porque eles são seguros para o tipo. O uso de JDO/JPA permite que o desenvolvedor descubra erros no IDE, e não no ambiente de execução, e permite menos espaço para ataques de injeção de SQL.

Por que minhas consultas precisam de índices e como os incluo?

Se você executar uma consulta que filtra diversas propriedades de entidade ou organiza os resultados de acordo com diversas propriedades, será necessário um índice para essa consulta. Você precisa ter um índice para cada consulta desse tipo executado com seu aplicativo. O índice do Datastore de uma consulta mantém e atualiza uma lista de chaves classificadas da maneira especificada pela consulta para permitir acesso rápido aos dados no Datastore. Uma explicação completa dos índices do Datastore pode ser encontrada em nossa documentação (Java | Python | Go).

Ao desenvolver seu aplicativo com o SDK do Cloud, toda consulta executada é indexada automaticamente quando necessário. Se você testar seu aplicativo completamente antes de fazer upload em seu site, todos os índices que são necessários em seu aplicativo serão incluídos nos arquivos index.yaml do seu aplicativo. Você pode adicionar índices manualmente se encontrar uma consulta que não foi abordada por seu teste de desenvolvimento. Para mais informações sobre como escrever índices para seu aplicativo, consulte a documentação sobre índices.

Por que meus índices estão marcados como Erro?

Eles podem ser índices em explosão (Python | Java | Go) ou podem ter encontrado outros problemas semelhantes ao gravar entidades específicas em seu armazenamento de dados. Você pode aspirar e tentar construí-los novamente seguindo as instruções em Consultas (Python | Java | Go) e Índices (Python | Java | Go).

Por que meus índices ficam com o status Construindo ou Excluindo durante longos períodos?

Mesmo que você não tenha muitas entidades dos tipos correspondentes, os índices de tempo utilizados para criar ou excluir podem variar muito, dependendo da quantidade total de dados no Datastore, dos índices criados atualmente para outros aplicativos e da carga do Datastore devido a solicitações do usuário, entre outros fatores. Em alguns casos, trabalhos de índices podem levar horas ou dias para serem concluídos.

Mesmo assim, às vezes podemos ajudar com índices que possam estar travados. Se você acha que isso aconteceu com seus índices, poste uma pergunta no grupo google-appengine.

Como autentico os usuários de meu aplicativo?

O serviço Usuários (Java | Python | Go) permite que você autentique usuários que tenham uma Conta do Google, uma conta no próprio domínio do G Suite deles. Você escolhe uma dessas formas de autenticação para seu aplicativo.

Se o aplicativo usa as Contas do Google, quando ele solicitar que um usuário faça login, este será direcionado para uma página de login do Google para inserir um nome de usuário e senha, ou para criar uma nova conta. Depois de fazer login, o usuário é direcionado para seu site novamente e as informações do usuário ficam disponíveis para seu aplicativo por meio da propriedade Usuários.

Há bibliotecas de terceiros incompatíveis com o App Engine?

Python

Uma pequena porcentagem de módulos Python C nativos e de subconjuntos de módulos Python C nativos não está disponível com o App Engine. Os módulos desativados enquadram-se nas seguintes categorias:

  • As bibliotecas que mantêm bancos de dados em disco não estão ativadas em Python para App Engine.
  • O sistema não permite que você invoque subprocessos. Como resultado, alguns métodos de SO dos módulos estão desativados.
  • O sequenciamento não está disponível.
  • Por motivos de segurança, a maioria dos módulos com base C está desativada.
  • Outros recursos limitados:
    • marshal desativado
    • cPickle substituído por pickle
    • chamadas do sistema desativadas

Lembre-se de que os pacotes de terceiros que usam qualquer um dos recursos acima não funcionarão com o App Engine (pacotes como o PostgreSQL etc.).

Go

A maioria dos pacotes Go puros funciona no App Engine. Um pacote pode não funcionar devido a um destes motivos:

  • O pacote importa syscall ou unsafe.
  • O pacote usa cgo ou assembly.
  • O pacote requer funções em pacotes que estão bloqueados, como gravação em disco ou acesso direto à rede.

Por que meu aplicativo foi desativado?

Um aplicativo pode ser desativado se não cumprir nossos Termos e Condições. Além disso, se descobrirmos que um aplicativo está usando uma quantidade desmedida de recursos do sistema devido a um bug ou a outro problema que cause um uso ineficiente de recursos, poderemos desativá-lo para que o desenvolvedor possa corrigir os problemas de desenvolvimento usando nosso SDK de desenvolvimento antes de reativar o aplicativo no App Engine.

Por que meu aplicativo está acima da cota?

O Google App Engine impõe limites de cota sobre a quantidade de cada recurso do sistema que um aplicativo pode consumir diariamente. Todos os aplicativos têm uma configuração de cota padrão (as "cotas gratuitas") que permite a visualização de cerca de 5 milhões de páginas por mês para um aplicativo eficiente. Você pode ler mais sobre as cotas do sistema na documentação da cota.

À medida que seu aplicativo cresce, ele pode precisar de uma alocação maior de recursos do que a configuração de cota padrão fornece. Você pode adquirir recursos de computação adicionais ativando o faturamento para seu aplicativo. O faturamento permite que os desenvolvedores aumentem os limites de todos os recursos do sistema e paguem por limites ainda maiores de uso de CPU, largura de banda, armazenamento e e-mail.

Como denuncio um aplicativo que está violando os Termos e Condições?

Para denunciar um aplicativo que viola os Termos e Condições do App Engine, entre em contato. Determinaremos se realmente houve violação e, se necessário, entraremos em contato com o desenvolvedor desse aplicativo a respeito do assunto.

Devo usar o SDK para processar solicitações externas?

O dev_appserver foi desenvolvido para testes locais e, por padrão, não permite conexões externas. Você pode substituir isso usando a sinalização --host <hostname> ao executá-lo, mas isso não é recomendado porque o SDK não foi fortalecido para segurança e pode conter vulnerabilidades.

Como ofereço um conteúdo compactado?

O App Engine faz o possível para oferecer conteúdo compactado com gzip para os navegadores compatíveis. Para aproveitar esse esquema, não é preciso fazer qualquer modificação nos aplicativos, já que o processo é automático.

Usamos uma combinação de cabeçalhos de solicitação (Accept-Encoding, User-Agent) e cabeçalhos de resposta (Content-Type) para determinar se o usuário final pode ou não aproveitar o conteúdo compactado em gzip. Esse método evita alguns erros conhecidos com conteúdo compactado com gzip nos navegadores mais conhecidos. Para forçar o oferecimento de conteúdo compactado com gzip, os clientes podem fornecer "gzip" como valor dos cabeçalhos de solicitação Accept-Encoding e User-Agent. O conteúdo nunca será compactado com gzip se nenhum cabeçalho Accept-Encoding estiver presente.

Isso é abordado mais adiante na documentação do ambiente de execução (Python | Java | PHP | Go).

O App Engine suporta SSL (HTTPS)?

O App Engine permite que você exiba o tráfego SSL (HTTPS) através do seu domínio appspot.com. Basta adicionar o parâmetro "secure" ao seu gerenciador app.yaml para os URLs usados a fim de oferecer suporte ao tráfego seguro. Para informações completas sobre como configurar seu aplicativo para tráfego seguro, consulte os documentos na configuração do aplicativo (Java | Python | PHP | Go).

Você também pode disponibilizar tráfego SSL (HTTPS) usando um domínio personalizado. Além disso, é possível usar domínios sem "www" se usar um domínio personalizado com SSL.

Posso usar cabeçalhos Strict-Transport-Security no meu projeto?

É possível usar Strict-Transport-Security no App Engine. Para adicionar cabeçalhos HTTP Strict-Transport-Security (HSTS) ao seu aplicativo, implemente os cabeçalhos no código do aplicativo, não no arquivo de configuração dele (app.yaml ou appengine-web.xml).

Posso usar o SSL (HTTPS) no App Engine com meu domínio personalizado?

Você pode disponibilizar o SSL por meio do seu domínio personalizado.

Ferramentas como remote_api usam SSL (HTTPS)?

As ferramentas do SDK que usam login (remote_api, appengine_rpc) usam SSL ao comunicar seu endereço de e-mail e senha.

Os SDKs do Python e do Go têm a capacidade de validar o certificado SSL pela conexão remota. Para fazer isso, você precisa ter o módulo do Python ssl instalado no seu sistema. Se você está usando o Python 2.5, pode instalar o módulo em http://pypi.python.org/pypi/ssl/. Se houver um erro ao validar o certificado SSL, as ferramentas emitirão uma InvalidCertificateException explicando o que deu errado.

O Java SDK também ativa o SSL por padrão. Se um erro for encontrado durante a validação do certificado SSL, ele lançará uma javax.net.ssl.SSLHandshakeException.

Gostaria de mapear meu aplicativo para um domínio desconhecido (como http://example.com).

Um domínio sem "www" permite que os usuários acessem seu aplicativo diretamente no nome do domínio (http://example.com), sem exigir um subdomínio como http://www.example.com ou http://myapp.example.com. Você pode configurar o aplicativo do Google App Engine com um domínio privado no console do projeto do Google Cloud Platform. Veja como usar domínios personalizados.

Domínios sem "www" também são compatíveis se você estiver usando um domínio personalizado com SSL.

Endereços IP estáticos e aplicativos do App Engine

No momento, o App Engine não fornece uma maneira de mapear endereços IP estáticos para um aplicativo. Para otimizar o caminho da rede entre um usuário final e um aplicativo do App Engine, os usuários finais em diferentes ISPs ou localizações geográficas podem usar endereços IP diferentes para acessar o mesmo aplicativo do App Engine. O DNS pode retornar diferentes endereços IP para acessar o App Engine no decorrer do tempo ou de diferentes locais de rede.

Os serviços de saída, como as APIs URL Fetch, Sockets e Mail, utilizam um grande pool de endereços IP. Os intervalos de endereços IP nesse conjunto estão sujeitos a alterações de rotina. Na verdade, duas chamadas de API sequenciais do mesmo aplicativo podem parecer originadas de dois endereços IP diferentes.

O intervalo atual de endereços IP de saída do App Engine é codificado no registro de _cloud-netblocks.googleusercontent.com da biblioteca de políticas de remetentes (SPF, na sigla em inglês). Talvez seja necessário executar pesquisas da SPF de DNS de maneira recursiva para resolver toda a lista de intervalos de IP. Comece resolvendo _cloud-netblocks.googleusercontent.com seguinte maneira:

nslookup -q=TXT _cloud-netblocks.googleusercontent.com 8.8.8.8

A resposta retornada a partir disso conterá todos os atuais _cloud-netblocks do App Engine. Lembre-se de que esses resultados não são estáticos: o Google pode introduzir novas entradas _cloud-netblocks a qualquer momento. Por exemplo, essa consulta poderia retornar o seguinte:

Non-authoritative answer:
_cloud-netblocks.googleusercontent.com	text = "v=spf1 include:_cloud-netblocks1.googleusercontent.com include:_cloud-netblocks2.googleusercontent.com include:_cloud-netblocks3.googleusercontent.com ?all

Dessa resposta de consulta, você consultaria cada um dos _cloud-netblocksN retornados listados na resposta. Usando a resposta do exemplo anterior com as três entradas _cloud-netblocksN, você faria as três consultas a seguir para encontrar todos os intervalos de IP:

nslookup -q=TXT _cloud-netblocks1.googleusercontent.com 8.8.8.8
nslookup -q=TXT _cloud-netblocks2.googleusercontent.com 8.8.8.8
nslookup -q=TXT _cloud-netblocks3.googleusercontent.com 8.8.8.8

Os registros SPF retornados da consulta de cada uma dessas entradas acima serão intervalos de IP que você pode usar para o tráfego de saída do Google App Engine. Por exemplo, a consulta de _cloud-netblocks1 acima poderia retornar o seguinte:

Non-authoritative answer:
_cloud-netblocks1.googleusercontent.com	text = "v=spf1 ip4:8.34.208.0/20 ip4:8.35.192.0/21 ip4:8.35.200.0/23 ip4:108.59.80.0/20 ip4:108.170.192.0/20 ip4:108.170.208.0/21 ip4:108.170.216.0/22 ip4:108.170.220.0/23 ip4:108.170.222.0/24 ?all"

A partir desse exemplo, vemos que os intervalos de IP 8.34.208.0/20 e 8.35.192.0/21 podem ser usados para o tráfego do Google App Engine.

Observe que o uso de filtragem de endereço IP estático não é considerado um meio de proteção seguro e eficaz. Por exemplo, um invasor pode configurar um aplicativo mal-intencionado do App Engine que pode compartilhar o mesmo intervalo de endereços IP do seu aplicativo. Em vez disso, sugerimos que você adote uma abordagem de defesa profunda usando OAuth e Certs.

Posso acessar minha instância do App Engine em um endereço IP particular?

O App Engine hospeda seu serviço em um endereço IP público dinâmico de um balanceador de carga do Google. Você não pode acessar seu serviço em endereços IP particulares (RFC 1918).

Como defino cron jobs para meu aplicativo?

Consulte a documentação específica da linguagem para informações sobre como definir tarefas agendadas para o aplicativo (Java | Python | Go | PHP).

O que são filas de tarefas?

Filas de tarefas fornecem um mecanismo para adicionar novas solicitações dinamicamente para que sejam realizadas futuramente. Se um aplicativo precisar executar algum trabalho de segundo plano, ele poderá usar a API Task Queue para organizar esse trabalho em pequenas unidades discretas chamadas Tarefas. As tarefas são inseridas em uma ou mais Filas. O Google App Engine detecta novas tarefas automaticamente e as executa quando recursos de sistema permitem. Para mais detalhes, consulte a documentação da API Task Queue (Java | Python | Go | PHP).

Posso usar grupos do Google para conceder acesso ao meu projeto do App Engine?

Se você adicionar um grupo do Google ao seu projeto do App Engine, os membros desse grupo terão acesso aos recursos desse projeto, por exemplo, Datastore, Filas de tarefas, Memcache etc.

Como impeço usuários/sub-redes de acessar meu aplicativo?

O Google App Engine fornece um Serviço de proteção contra DoS que permite que você crie uma lista negra de endereços IP ou sub-redes. Para mais detalhes, consulte a documentação do serviço de proteção DoS (Java | Python | Go | PHP).

Como consigo mais informações sobre interrupções de aplicativos e problemas de acessibilidade com meu aplicativo?

O Painel de status do Google Cloud fornece informações de status sobre os serviços que fazem parte do Google Cloud Platform.

Para a China, a acessibilidade do App Engine pode ser intermitente. Consulte o Google Transparency Report sobre problemas de acessibilidade em outros produtos do Google na China.