A CLI gcloud fornece um emulador local na memória, que pode ser usado para desenvolver e testar seus aplicativos com uma instância de teste gratuita sem criar um projeto do Google Cloud ou uma conta de faturamento. Como o emulador armazena dados apenas na memória, todo o estado, incluindo dados, esquema e configurações, é perdido na reinicialização. O emulador oferece as mesmas APIs que o serviço de produção do Spanner e destina-se ao desenvolvimento e teste locais, não para implantações de produção.
O emulador oferece suporte aos dialetos GoogleSQL e PostgreSQL. Ele oferece suporte a todas as linguagens das bibliotecas de cliente. Também é possível usar o emulador com a Google Cloud CLI e as APIs REST.
O emulador também está disponível como um projeto de código aberto no GitHub.
Limitações e diferenças
O emulador não é compatível com:
- TLS/HTTPS, autenticação, gerenciamento de identidade e acesso, permissões ou papéis.
- Nos modos de consulta
PLAN
ouPROFILE
, o plano de consulta retornado está vazio. - A instrução
ANALYZE
. O emulador aceita, mas ignora. - Qualquer uma das ferramentas de geração de registros de auditoria e monitoramento.
O emulador também é diferente do serviço de produção do Spanner das seguintes maneiras:
- As mensagens de erro entre o emulador e o serviço de produção podem não ser consistentes.
- O desempenho e a escalonabilidade do emulador não são comparáveis ao serviço de produção.
- As transações de leitura e gravação e as alterações de esquema bloqueiam todo o banco de dados para acesso exclusivo até que sejam concluídas.
- A DML particionada e o
partitionQuery
são compatíveis, mas o emulador não verifica se as instruções são particionáveis. Isso significa que uma instrução DML oupartitionQuery
particionada pode ser executada no emulador, mas pode falhar no serviço de produção com o erro de instrução não particionável.
Para ver uma lista completa de APIs e recursos compatíveis, incompatíveis e parcialmente compatíveis, consulte o arquivo README no GitHub.
Opções para executar o emulador
Há duas maneiras comuns de executar o emulador:
Escolha a maneira apropriada para o fluxo de trabalho de desenvolvimento e teste do aplicativo.
Configurar o emulador para a CLI gcloud
Para usuários do Windows e macOS, antes de instalar o emulador, faça o seguinte:
Instale os componentes da CLI gcloud na sua estação de trabalho:
gcloud components install
Se a gcloud CLI já estiver instalada, execute o comando abaixo para garantir que todos os componentes estejam atualizados:
gcloud components update
Criar e configurar o emulador usando a CLI gcloud
Para usar o emulador com a CLI do gcloud, desative a autenticação e substitua o endpoint. Recomendamos que você crie uma configuração da CLI do gcloud separada para alternar rapidamente entre o emulador e o serviço de produção.
Crie e ative uma configuração de emulador:
gcloud config configurations create emulator gcloud config set auth/disable_credentials true gcloud config set project your-project-id gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
Depois de configurados, os comandos da gcloud CLI são enviados ao emulador em vez do serviço de produção. Para verificar isso, crie uma instância com a configuração da instância do emulador:
gcloud spanner instances create test-instance \ --config=emulator-config --description="Test Instance" --nodes=1
Para alternar entre o emulador e a configuração padrão, execute:
gcloud config configurations activate [emulator | default]
Inicie o emulador usando a CLI gcloud.
Instalar o emulador no Docker
Instale o Docker no sistema e disponibilize-o no caminho do sistema.
Consiga a imagem mais recente do emulador:
docker pull gcr.io/cloud-spanner-emulator/emulator
Execute o emulador no Docker:
docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator
Esse comando executa o emulador e mapeia as portas no contêiner para as mesmas portas no host local. O emulador usa dois endpoints locais:
localhost:9010
para solicitações gRPC elocalhost:9020
para solicitações REST.Inicie o emulador usando a CLI gcloud.
Iniciar o emulador usando a CLI gcloud
Inicie o emulador usando o comando gcloud emulators spanner:
gcloud emulators spanner start
O emulador usa dois endpoints locais:
localhost:9010
para solicitações gRPClocalhost:9020
para solicitações REST
Como usar as bibliotecas de cliente com o emulador
Você pode usar versões compatíveis das bibliotecas de cliente
com o emulador configurando a variável de ambiente SPANNER_EMULATOR_HOST
.
Há muitas maneiras de fazer isso: Exemplo:
Linux/macOS
export SPANNER_EMULATOR_HOST=localhost:9010
Windows
set SPANNER_EMULATOR_HOST=localhost:9010
Ou com gcloud env-init:
Linux/macOS
$(gcloud emulators spanner env-init)
Windows
gcloud emulators spanner env-init > set_vars.cmd && set_vars.cmd
Quando o aplicativo é iniciado, a biblioteca de cliente verifica automaticamente se há
SPANNER_EMULATOR_HOST
e se conecta ao emulador se ele estiver em execução.
Depois que SPANNER_EMULATOR_HOST
for definido, você poderá testar o emulador seguindo os
guias de primeiros passos. Ignore as instruções relacionadas à criação, autenticação e credenciais
do projeto, já que elas não são necessárias para usar o
emulador.
Primeiros passos em C#. Defina as opções da string de conexão. Veja outras instruções para C#.
Versões compatíveis
A tabela a seguir lista as versões das bibliotecas de cliente compatíveis com o emulador.
Biblioteca de cliente | Versão mínima |
---|---|
C++ | v0.9.x+ |
C# | v3.1.0+ |
Go | v1.5.0+ |
Java | v1.51.0+ |
Node.js | v4.5.0+ |
PHP | v1.25.0+ |
Python | v1.15.0+ |
Ruby | v1.13.0+ |
Instruções adicionais para C#
Para a biblioteca de cliente C#, você também precisa especificar a
opção emulatordetection
na string de conexão.
Ao contrário das outras bibliotecas de cliente, C# ignora a variável de ambiente SPANNER_EMULATOR_HOST
por padrão. Confira abaixo um exemplo de string de conexão:
var builder = new SpannerConnectionStringBuilder
{
DataSource = $"projects/{projectId}/instances/{instanceId}/databases/{databaseId}";
EmulatorDetection = "EmulatorOnly"
};