在 Google Cloud 上运行使用 MATLAB Compiler SDK 创建的微服务
此示例演示了如何创建一个名为 Docker® 的微服务镜像,并将其部署到 Google® Cloud。通过 MATLAB® Compiler SDK™ 创建的微服务镜像提供一个可用于访问 MATLAB 代码的 HTTP/HTTPS 端点。
您可以先将 MATLAB 函数打包成可部署存档,然后创建包含该存档和最小 MATLAB Runtime 包的 Docker 镜像。之后,您可以在 Docker 中运行该镜像,并使用任何 MATLAB Production Server™ 客户端 API 调用服务。
示例文件列表
simpInterest.m
要下载示例文件,请在 MATLAB 命令行窗口中键入以下内容。
openExample("compilersdk/MicroserviceGoogleCloud", workDir=pwd)
前提条件
验证您是否已在开发计算机上安装了 MATLAB Compiler SDK。
通过在 MATLAB 命令行窗口中键入
[~,msg] = system('docker version'),验证您是否已在开发计算机上安装并配置了 Docker。如果您使用的是 WSL,请改用命令[~,msg] = system('wsl docker version')。如果您尚未安装 Docker,请按照 Docker 网站上的说明安装并设置 Docker。有关详细信息,请参阅
docs.docker.com/engine/install/。要在 Windows® 上构建微服务镜像,您必须在 Windows 子系统 for Linux® v2 (WSL2) 上安装 Docker Desktop 或 Docker。要安装 Docker Desktop,请参阅
docs.docker.com/desktop/setup/install/windows-install/。有关如何在 WSL2 上安装 Docker 的说明,请参阅https://www.mathworks.com/matlabcentral/answers/1758410-how-do-i-install-docker-on-wsl2。
创建 MATLAB 函数
从 MATLAB 桌面创建一个 MATLAB 函数。对于此示例,使用以下代码编写一个名为 simpInterest.m 的函数。
function i = simpInterest(p,r,t) i = p * (1 + (r * t)) - p; end
创建可部署存档
使用 compiler.build.productionServerArchive 函数将 simpInterest.m 函数打包成可部署存档。将构建信息保存为 compiler.build.Results 对象 results。
results = compiler.build.productionServerArchive("simpInterest.m","ArchiveName","financetools","Verbose","on")
将可部署存档打包到微服务 Docker 映像
使用 results 对象将可部署存档打包到微服务 Docker 映像中。
compiler.package.microserviceDockerImage(results,"ImageName","financetools")
该函数会在名为 financetoolsmicroserviceDockerImage 的文件夹中生成以下文件:
applicationFilesForMATLABCompiler/financetools.ctf- 可部署存档文件Dockerfile- Docker 文件,指定运行时选项GettingStarted.txt- 包含部署信息的文本文件
通过输入 financetools 来验证 docker images 映像是否已创建。
有关详细信息,请参阅创建微服务 Docker 镜像。
创建 Google Cloud Artifact Registry 存储库
转到您的 Google Cloud Dashboard 并在搜索栏中搜索 Artifact Registry。从结果中选择 Artifact Registry 服务。点击创建存储库并使用以下信息填写设置。
名称 - 给它起一个名字,它不需要与图像的名称匹配。
格式- Docker.
模式 - 标准。
位置类型 - 根据需要选择。
加密 - 根据需要选择。此示例使用
Google managed encryption key选项。
点击 Create 以创建您的存储库。在此示例中,存储库名为 matlabservice。
将微服务 Docker 的镜像上传至 Google Cloud Artifact Registry
导航到您新创建的存储库并点击设置说明。在打开的窗口中显示配置 Docker 的命令。复制该命令并在命令行窗口中运行它。该命令应类似于以下内容。
gcloud auth configure-docker us-east1-docker.pkg.dev
返回 Google Cloud Artifact Registry。当您在存储库详细信息页面中时,定位位于存储库详细信息上方的存储库路径。复制存储库的完整路径。该路径应类似于以下内容。
us-east1-docker.pkg.dev > voltaic-flag-382813 > matlabservice
使用 docker tag 命令,将微服务 Docker 的镜像标记为已复制的容器仓库路径。例如:
docker tag financetools us-east1-docker.pkg.dev/voltaic-flag-382813/matlabservice/financetools:1.0
将微服务 Docker 的镜像上传到您的仓库,使用相同的仓库路径。例如:
docker push us-east1-docker.pkg.dev/voltaic-flag-382813/matlabservice/financetools:1.0
这需要几分钟时间,因为微服务 Docker 的镜像正在上传到云端。完成后,您的 Docker 镜像将作为一个仓库显示在 Google Cloud Artifact Registry 中。
在 Google Cloud Run 中运行微服务 Docker 镜像
转到您的 Google Cloud Dashboard 并在搜索栏中搜索 Google Cloud Run。点击创建服务以创建新服务。选择从现有容器映像部署一个修订版本,然后在对话框中选择您上传的 financetools 容器映像。
使用以下信息填写表格:
服务名称 - financetools
区域 - 选择适当的区域
CPU 分配和定价 - 使用默认
自动缩放 > 最小实例数 - 适当选择
自动缩放 > 最大实例数 - 适当选择
Ingress - 选择全部以允许从互联网直接访问您的服务
身份验证 - 允许未经身份验证的调用
容器:
容器端口:9910
内存:2 GiB
CPU:1
执行环境:默认值
点击创建以部署服务。您可以使用服务详细信息页面上指定的 URL 向图像发出请求。
向 Google Cloud Run 中运行的微服务发出请求
使用命令行工具或 UI(例如 Postman)向微服务发出请求。以 JSON 格式传入本金、利息、时间三个输入变量。
POST /financetools/simpInterest HTTP/1.1
Host: https://4kxqyz9md2.us-east-1.awsapprunner.com/financetools/simpInterest
Content-Type: application/json
Content-Length: 42
{"nargout": 1, "rhs": [21000, 0.043, 12] }
主机 URI 的格式为 Default_domain/container_image_name/matlab_function_name。
使用 curl 发出请求(替换为您自己的默认域前缀)。
curl --location 'https://financetools-wuterchjka-uc.a.run.app/financetools/simpInterest' \
--header 'Content-Type: application/json' \
--data '{"nargout": 1, "rhs": [21000, 0.043, 12] }'
您会收到 JSON 格式的单利金额。
{"lhs":[{"mwdata":[10836],"mwsize":[1,1],"mwtype":"double"}]}