在 Cloud Run 上部属 API

在 Cloud Run 上部署 FastAPI (初学者)

本文的主要专案请参阅详细範例档案、文章描述皆在 GitHub 专案中

简介

在 Google Cloud Run 上运行 FastAPI 的範本

透过一键式且快速地使用 FastAPI 在 Cloud Run 上部署 API

透过 CLI 的基本方法

gcloud CLI

在云端上建立映像档 (容器登记)

gcloud builds submit --tag {REGION}.gcr.io/{PROJECT_ID}/{IMAGE} --ignore-file .gcloudignore

部署服务至 Cloud Run

gcloud run deploy --image {REGION}.gcr.io/{PROJECT_ID}/{IMAGE} --platform managed --port 8000 --memory {1Gi} --timeout={2m}

透过 Shell 的进阶方法

优点

自动化: 透过使用这些工具,您可以自动化部署资源与基础架构的流程,节省时间并减少人为失误的机会

一致性: 自动化确保了部署流程在各种环境中都是一致的,这使得管理和疑难排解更加容易

可重複使用: 透过 Cloud Deployment Manager 或 shell script,您可以重複使用範本和脚本来多次部署相同的资源和基础架构,进而提高建立新环境的效率

扩展性: 这些工具让您可以扩展部署大规模专案所需的资源与基础架构,尤其适用于大型专案

版本控制: 透过将範本和脚本储存在版本控制中,您可以追蹤变更并在必要时回到先前的版本

工作方式

在我们的 deploy.sh 中,我们将:

config.env 取得环境变数
source config.env
启用 GCP 服务
gcloud services enable cloudbuild.googleapis.com storage-component.googleapis.com containerregistry.googleapis.com run.googleapis.com
将映像档建置至容器登记
gcloud builds submit --tag "$CONTAINER_HOST/$PROJECT_ID/$IMAGE_NAME:$IMAGE_TAG" --ignore-file .gcloudignore
部署到 Cloud Run
gcloud run deploy $SERVICE_NAME --image "$CONTAINER_HOST/$PROJECT_ID/$IMAGE_NAME:$IMAGE_TAG" --platform managed --port "$PORT" --memory "$MEMORY" --timeout="$TIMEOUT" --region="$REGION"

您可以使用 gcloud run deploy --help 检查所有的 FLAGS,参阅

如果您不希望任何人访问此 API,您应该从 deploy.sh 中删除 --allow-unauthenticated,参阅验证

一键部署方式

config.env 中定义您的 "环境变数",例如:

PROJECT_ID="GCP-PROJECT-ID"IMAGE_NAME="service-template"IMAGE_TAG="latest"CONTAINER_HOST="asia.gcr.io"SERVICE_NAME="service-template"REGION="asia-east1"PORT=8000MEMORY="1Gi"TIMEOUT="2m"

main.pyrouters/ 中定义您的应用程式(FastAPI)。

requirements.txt 中定义所需的模组

以下是从 .py 中收集所有使用模组的简单方法,在 cmd、powershell、wsl、git bash 中执行以下 CLI
pip install pipreqs
pipreqs ./

检查您的 Dockerfile

部署您的应用程式:
wsl、git bash 中执行以下 CLI

./deploy.sh

示範

使用 Git 複製此专案

打开终端机,并导览到此专案目录

执行 ./deploy.sh 指令

等待部署完成,并取得 Service URL,例如:https://service-template-xxxxxxxxxx-xx.a.run.app

使用 client.py 脚本测试您的 API,例如:

Script

import requestshost = "Service URL"url = f"{host}/v1/recommend"request_data = {                "page": "index",                "data": {"ip_address": "e12345"}}res = requests.post(url, json=request_data)if res.status_code == 200:    print(res.json())else:    print("Error: ", res.text)

Result

{'code': '0', 'msg': 'success', 'ip_address': 'e12345'}

验证

验证是 Cloud Run 中的安全选项,用于控制谁可以访问您的应用程式

--no-allow-unauthenticated : 任何人都不可访问 api

允许限定的成员可访问

gcloud run services add-iam-policy-binding my-service --region='us-central1' --member='user:test-user@gmail.com' --role='roles/run.invoker'

--allow-unauthenticated : 任何人都可以访问 api


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章