与Google Cloud平台(GCP)项目相关的高昂收入成本是我们在整个产品开发周期中始终牢记的。
为了减轻此问题,其中一种方法是使用模拟某些服务在本地模拟某些服务的模拟器,从而导致项目成本为零。
今天,我们将看到如何使用Docker运行官方数据存储模拟器,以及如何将其与Web API集成!
解决方案的开发
我们将通过笔记本电脑开发一个简短的解决方案,以演示数据存储模拟器的功能。为此,我们将开发一个非常简单的Web API,将与本地数据存储集成。
所有解决方案将通过Docker通过遏制开发。
Web API
开发负责用户寄存器的API。数据将在数据存储遏制中持续存在。
-
POST /users
:在数据存储中保存用户; -
GET /users
:恢复所有通常的人在数据存储中持续存在;
还将开发一个dockerfile文件,以安装必要的库并攀登API开发服务器。
$ mkdir src
$ touch src/app.py
import os
from fastapi import FastAPI
from google.cloud import datastore
from pydantic import BaseModel
PROJECT_ID = os.getenv("DATASTORE_PROJECT_ID")
client = datastore.Client(PROJECT_ID)
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.post("/users", status_code=201)
def create_user(user: User):
kind = "users"
key = client.key(kind)
user_entity = client.entity(key)
user_entity.update(user)
client.put(user_entity)
return user
@app.get("/users")
def get_users():
query = client.query(kind="users")
users = list(query.fetch())
return users
$ touch requirements.txt
fastapi==0.91.0
uvicorn==0.20.0
google-cloud-datastore==2.13.2
$touch web-api.Dockerfile
FROM python:3.11-alpine
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir --upgrade -r requirements.txt
COPY . .
CMD exec python -m uvicorn app:app --reload --app-dir=./src --host=0.0.0.0 --port=8000
数据存储
数据存储容器的开发包括以下步骤:
- 基于GCP模拟器的官方图像的自定义图像的开发;
- 启动DatoStore Web服务器;
$ touch datastore.Dockerfile
FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:emulators
WORKDIR /datastore
CMD exec gcloud beta emulators datastore start --project my-local-project --host-port 0.0.0.0
开发遏制
最后,我们将开发一个docker-compose文件,该文件将根据我们的图像来协调构造的遏制。
注意:请注意,必须配置数据存储环境在API容器中有所不同。这对于DataStore SDK直接将请求发送到本地封存是必要的,而不是针对GCP服务器。
$ touch docker-compose.yml
version: '3.9'
services:
web-api:
build:
dockerfile: ./web-api.Dockerfile
environment:
DATASTORE_DATASET: my-local-dataset
DATASTORE_EMULATOR_HOST: datastore:8081
DATASTORE_EMULATOR_HOST_PATH: datastore:8081/datastore
DATASTORE_HOST: http://datastore:8081
DATASTORE_PROJECT_ID: my-local-project
volumes:
- ./:/app
ports:
- 8000:8000
datastore:
build:
dockerfile: ./datastore.Dockerfile
ports:
- 8081:8081
$ docker compose up -d
$ docker compose ps
让测试!
我们将根据我们的API的请求来完成。前两个将是发布请求,该请求将在数据存储中保存两个用户,最后一个将是一个请求,该请求将恢复数据库中的两个常规。
$ curl -X 'POST' \
'http://localhost:8000/users' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"name": "John",
"age": 20
}'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 57 100 24 100 33 54 75 --:--:-- --:--:-- --:--:-- 130
{"name":"John","age":20}
$ curl -X 'POST' \
'http://localhost:8000/users' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"name": "Mary",
"age": 18
}'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 57 100 24 100 33 1411 1941 --:--:-- --:--:-- --:--:-- 3352
{"name":"Mary","age":18}
$ curl -X 'GET' \
'http://localhost:8000/users' \
-H 'accept: application/json'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 51 100 51 0 0 850 0 --:--:-- --:--:-- --:--:-- 850
[{"name":"John","age":20},{"name":"Mary","age":18}]
最终考虑
在产品开发周期中,使用Google Cloud Platform模拟器可能是一种有趣的方法。有了它们,我们可以根据需要进行多次测试,而不会导致项目收入的高成本,因为Google Cloud库中的所有请求都将在本地向云服务器的投资提供。
。感谢您陪伴我到这里ð。在Prost!