Use o Firestore para configurar um banco de dados na nuvem NoSQL escalonável para seu serviço do Cloud Run. O Firestore é um banco de dados NoSQL flexível e escalonável para desenvolvimento focado em dispositivos móveis, Web e servidores.
Usando a integração do Cloud Run descrita nesta página, é possível conectar rapidamente seu serviço do Cloud Run a um novo banco de dados do Firestore.
Antes de começar
- Verifique se o serviço do Cloud Run com que você está integrando já está implantado.
- Consulte a página de preços do Firestore. A cobrança é feita com base nos recursos individuais usados na integração.
Funções exigidas
Para usar as integrações do Cloud Run, você ou seu administrador precisa conceder papéis do IAM em dois principais diferentes.
Clique para conferir os papéis necessários da sua Conta do Google
Para receber as permissões necessárias para usar as integrações do Cloud Run, peça ao administrador para conceder à sua Conta do Google os seguintes papéis do IAM no projeto:
- Desenvolvedor do Cloud Run (
roles/run.developer
) - Leitor do Compute (
roles/compute.viewer
) - Desenvolvedor de integrações sem servidor (
roles/runapps.developer
) - Operador de integrações sem servidor (
roles/runapps.operator
) - Usuário da conta de serviço (
roles/iam.serviceAccountUser
)
Clique para conferir os papéis necessários para a conta de serviço
Para implantar o serviço do Cloud Run, use a conta de serviço padrão do Compute Engine criada automaticamente ou especifique uma conta de serviço gerenciado pelo usuário. Essa conta de serviço precisa ter os seguintes papéis:
- Desenvolvedor do Cloud Run (
roles/run.developer
) - Gravador de bucket de registros (
roles/logging.bucketWriter
) - Usuário da conta de serviço (
roles/iam.serviceAccountUser
) - Administrador do Storage (
roles/storage.admin
) - Administrador do Firebase (
roles/firebase.admin
) - Administrador de projetos do IAM (
roles/projectIAM.admin
)
Conectar um serviço a um novo banco de dados do Firestore
Qualquer mudança na configuração leva à criação de uma nova revisão. As próximas revisões também recebem essa configuração de modo automático, a menos que você faça atualizações explícitas para alterar esse comportamento.
É possível conectar um serviço do Cloud Run a um banco de dados do Firestore usando o console ou a linha de comando.
Console
No console do Google Cloud, acesse a página do Cloud Run.
Clique no serviço na lista de serviços que você quer usar na integração.
Clique na guia Integrations.
Clique em Adicionar integração.
Clique em Banco de dados do Firestore.
Use o nome padrão ou mude o nome para o valor que você quer usar.
Se for necessário ativar uma lista de APIs, clique em Ativar e aguarde a ativação das APIs.
Em Recursos, observe os novos recursos que serão criados como resultado dessa integração.
Clique em Enviar e aguarde a criação da integração e dos recursos. Isso pode levar até 15 minutos.
gcloud
Atualizar para a versão mais recente da Google Cloud CLI:
gcloud components update
Criar a integração:
gcloud beta run integrations create \ --type=firestore \ --service=SERVICE \ --region REGION
Substitua:
- SERVICE pelo nome do serviço do Cloud Run.
Se quiser, inclua a flag
--service-account=SERVICE_ACCOUNT_EMAIL
.SERVICE_ACCOUNT_EMAIL pelo endereço de e-mail da conta de serviço gerenciado pelo usuário (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
) que é usado para implantar o serviço. Omita essa flag se quiser usar a conta de serviço padrão do Compute (SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com
).Para continuar usando a conta de serviço especificada ao implantar integrações do Cloud Run, execute o seguinte comando:
gcloud config set runapps/deployment-service-account
Aguarde até 15 minutos. Durante esse tempo, um banco de dados do Firestore totalmente configurado é criado e conectado. Além disso, uma nova revisão do Cloud Run é criada, incluindo variáveis de ambiente que identificam o banco de dados. Quando o processo estiver concluído, a seguinte mensagem será exibida:
[firestore] integration [firestore-xxx] has been updated successfully. To connect to the Firestore database, utilize the environment variable `FIRESTORE_DB_NAME`. This variable is added to the Cloud Run service for you.
É possível verificar o status executando
gcloud beta run integrations describe
.
Conferir integrações de banco de dados do Firestore
Para ver o status atual das integrações de banco de dados do Firestore para seu serviço do Cloud Run:
Console
No console do Google Cloud, acesse a página do Cloud Run.
Clique no serviço na lista de serviços que você quer usar na integração.
Clique na guia Integrations.
Localize a integração do banco de dados do Firestore em que você tem interesse e clique em Ver detalhes.
gcloud
Use o comando a seguir para ver uma lista de integrações disponíveis:
gcloud beta run integrations list
Usando um nome da lista retornada, exiba os detalhes:
gcloud beta run integrations describe INTEGRATION_NAME
Substitua INTEGRATION_NAME pelo nome da sua integração do banco de dados do Firestore.
Excluir integrações de banco de dados do Firestore
A exclusão de uma integração também exclui todos os recursos do Google Cloud associados a ela, mas não exclui o serviço do Cloud Run.
Para excluir uma integração de banco de dados do Firestore no serviço do Cloud Run:
Console
No console do Google Cloud, acesse a página do Cloud Run.
Clique no serviço do qual você quer excluir uma integração.
Clique na guia Integrations.
Localize a integração do banco de dados do Firebase do seu interesse e clique no ícone de reticências à direita da integração e, em seguida, em Excluir.
gcloud
Use o comando a seguir para ver uma lista de integrações disponíveis:
gcloud beta run integrations list
Usando um nome da lista retornada, exclua a integração:
gcloud beta run integrations delete INTEGRATION_NAME
Substitua:
- INTEGRATION_NAME pelo nome da sua integração do banco de dados do Firestore.
Se preferir, use as seguintes flags opcionais:
Opção Descrição --service-account
O endereço de e-mail da conta de serviço gerenciado pelo usuário para executar a operação de exclusão.
Acessar o banco de dados do Firestore no seu código
Depois de concluir a integração, o Cloud Run adiciona automaticamente a variável de ambiente FIRESTORE_DB_NAME
para uso no seu código de serviço do Cloud Run.
Exemplo de código para serviços que usam o Firestore
Consulte a documentação do Firestore para conferir exemplos de código da biblioteca do servidor do Firestore ou o seguinte exemplo:
O exemplo de Python nas instruções a seguir exige um banco de dados do Firestore criado usando a integração do Cloud Run, em execução no modo nativo do Firestore. Também é necessário ter um repositório para enviar o código.
Crie um diretório para os arquivos de amostra:
mkdir SERVICE
Substitua SERVICE pelo nome do serviço do Cloud Run.
Configure a autenticação do Docker:
gcloud auth configure-docker REGION-docker.pkg.dev
Substitua REGION pela região do Google Cloud do serviço.
Crie um arquivo
requirements.txt
no diretório SERVICE e adicione o seguinte:flask google-cloud-firestore
Crie um arquivo
Dockerfile
no diretório SERVICE e adicione o seguinte:FROM python:3.9-slim WORKDIR /app COPY requirements.txt ./ RUN pip install -r requirements.txt COPY . . EXPOSE 8080 CMD ["python", "app.py"]
Crie um arquivo
app.py
no diretório SERVICE e adicione o seguinte:from flask import Flask, jsonify, request import google.cloud.firestore import os
app = Flask(name) dbname = os.environ['FIRESTORE_DB_NAME'] db = google.cloud.firestore.Client(database=dbname) # Initialize Firestore client
@app.route('/data', methods=['POST']) def add_data(): data = request.get_json() db.collection('city_person').add(data) return jsonify({'message': 'Data added successfully!'}), 201
@app.route('/data', methods=['GET']) def get_data(): results = db.collection('city_person').stream() data_list = [doc.to_dict() for doc in results] return jsonify(data_list), 200
if name == 'main': app.run(host='0.0.0.0', port=8080, debug=True)
Navegue até o diretório SERVICE:
cd SERVICE
Substitua SERVICE pelo nome da pasta de serviço do Cloud Run.
Compile a imagem Docker:
docker build -t REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:latest .
Substitua:
- REGION pela região do Google Cloud do serviço.
- PROJECT_ID pelo ID do projeto do Google Cloud.
- REPOSITORY_NAME pelo nome do repositório do Artifact Registry.
- IMAGE_NAME por uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
.
Envie a imagem Docker:
docker push REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:latest
Substitua:
- REGION pela região do Google Cloud do serviço.
- PROJECT_ID pelo ID do projeto do Google Cloud.
- REPOSITORY_NAME pelo nome do repositório do Artifact Registry.
- IMAGE_NAME por uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
.
Implante o serviço no Cloud Run:
gcloud run deploy SERVICE_NAME --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:latest --allow-unauthenticated --region REGION
Substitua REGION pela região do Google Cloud do serviço. PROJECT_ID pelo ID do projeto do Google Cloud. REPOSITORY_NAME pelo nome do repositório do Artifact Registry IMAGE_NAME com uma referência à imagem do contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/job:latest.
Após a conclusão da implantação, o URL do serviço será exibido ao lado do URL do texto.
Configure a integração do Firestore para Cloud Run:
gcloud beta run integrations create \ --type=firestore \ --service=SERVICE_NAME \ --region REGION
Após a conclusão da implantação, insira o URL do serviço nos seguintes comandos de leitura e gravação:
Grave dados:
curl -X POST SERVICE_URL/data -H "Content-Type: application/json" -d '{"name": "Alice", "city": "New York"}'
Leia dados:
curl https://SERVICE_URL/data
Para acessar resultados diferentes retornados no comando de leitura de dados, mude o nome e a cidade no comando de gravação de dados.
Limitações
- As integrações do Cloud Run são compatíveis apenas com determinadas regiões. Se você precisar usar uma região não compatível com as integrações do Cloud Run, consulte Usar uma biblioteca de cliente do lado do servidor.
- O banco de dados padrão do Firestore não é compatível. Essa integração só oferece suporte à criação de bancos de dados nomeados do Firestore.