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, é possível fazer login na sua conta do App Engine visitando o Console do Google Cloud .

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

Use o Google Cloud 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 projeto, o Console do Cloud solicitará que você preencha 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 da web 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 abaixo exemplos de entradas em appengine-web.xml (Java) e app.yaml (Python/PHP/Go). No exemplo Python/PHP/Go, favicon.ico está localizado em static/images. Para fins de simplicidade, o mesmo arquivo está localizado no diretório raiz (war) no exemplo para 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 SDK do Java, mas pode ser usado por meio da API Cloud Datastore. Recomendamos que os desenvolvedores Java usem JDO ou JPA em vez de 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 completamente seu aplicativo antes de carregá-lo em seu site, todos os índices de que seu aplicativo precisará serão incluídos nos arquivos index.yaml de 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. É possível modificar isso usando a sinalização --host <hostname> ao executá-lo, mas isso não é recomendado porque o SDK não foi reforçado por questões de segurança e pode conter vulnerabilidades.

Como ofereço um conteúdo compactado?

Consulte Compressão de resposta.

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 app (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 app, implemente os cabeçalhos no código do app, 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ê estiver usando o Python 2.5, poderá instalar o módulo em http://pypi.python.org/pypi/ssl/. Se houver um erro ao validar o certificado SSL, as ferramentas emitirão um InvalidCertificateException explicando o que deu errado.

O Java SDK também ativa o SSL por padrão. Se for encontrado um erro durante a validação do certificado SSL, será emitida 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. É possível configurar o aplicativo do App Engine com um domínio sem www no console do projeto do Google Cloud. 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 para serviços do App Engine

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.

Para encontrar os intervalos atuais de endereços IP que o App Engine usa para tráfego de saída, faça o seguinte:

  1. Em um shell de comando, digite o seguinte comando:
    nslookup -q=TXT _cloud-netblocks.googleusercontent.com 8.8.8.8

    A resposta contém todos os _cloud-netblocks atuais do App Engine. Exemplo:

    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 include:_cloud-netblocks4.googleusercontent.com include:_cloud-netblocks5.googleusercontent.com ?all"

    Esses resultados não são estáticos. Quando você insere o comando, pode ver mais ou menos netblocks do que o exemplo acima.

  2. Para cada netblock listado na resposta, digite a seguinte consulta:
    nslookup -q=TXT netblock-name 8.8.8.8

    Por exemplo, se a consulta anterior retornasse cinco netblocks, você deveria fazer as seguintes cinco consultas:

    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
    nslookup -q=TXT _cloud-netblocks4.googleusercontent.com 8.8.8.8
    nslookup -q=TXT _cloud-netblocks5.googleusercontent.com 8.8.8.8

Cada consulta de um netblock específico retorna um intervalo de IP que pode ser usado para o tráfego de saída do App Engine. Por exemplo, a consulta de _cloud-netblocks1 acima poderia retornar o seguinte:

Non-authoritative answer:
_cloud-netblocks1.googleusercontent.com	text = "v=spf1 include:_cloud-netblocks6.googleusercontent.com include:_cloud-netblocks7.googleusercontent.com ip6:2600:1900::/35 ip4:8.34.208.0/20 ip4:8.35.192.0/21 ip4:8.35.200.0/23 ip4:23.236.48.0/20 ip4:23.251.128.0/19 ip4:34.64.0.0/11 ip4:34.96.0.0/14 ?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 App Engine. Outras consultas de quaisquer netblocks adicionais podem retornar mais intervalos de IP.

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 não fornece uma maneira de mapear endereços IP estáticos para um aplicativo. No entanto, é possível usar o Cloud Load Balancing e o NEGS sem servidor para reservar um endereço IP estático para o balanceador de carga, que, em seguida, direciona o tráfego para seu app. Para mais informações sobre preços, consulte Preços de endereço IP externo.

Como defino cron jobs para meu aplicativo?

Consulte a documentação específica da linguagem para informações sobre como definir cron jobs 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 App Engine fornece um serviço de proteção contra DoS que permite que você adicione endereços IP ou sub-redes a uma lista de bloqueio. 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.