在 AWS 上运行使用 MATLAB Compiler SDK 创建的微服务
此示例展示了如何创建微服务 Docker® 映像并将其部署到 Amazon Web Services (AWS®) 上。通过 MATLAB® Compiler SDK™ 创建的微服务镜像提供一个可用于访问 MATLAB 代码的 HTTP/HTTPS 端点。
您可以先将 MATLAB 函数打包成可部署存档,然后创建包含该存档和最小 MATLAB Runtime 包的 Docker 镜像。然后,您可以在 Docker 中运行该镜像,并使用任何 MATLAB Production Server™ 客户端 API 调用该服务。
示例文件列表
simpInterest.m
要下载示例文件,请在 MATLAB 命令行窗口中键入以下内容。
openExample("compilersdk/AWSMicroserviceExample", workDir=pwd)
前提条件
确认开发计算机上已安装 MATLAB Compiler SDK(R2022a 或更高版本)。
请确认您已拥有 MATLAB 运行时安装程序。您可以从 MathWorks® 网站下载安装程序:https://www.mathworks.com/products/compiler/matlab-runtime.html。
通过在 MATLAB 命令行窗口中键入
[~,msg] = system('docker version')
,验证您是否已在开发计算机上安装并配置了 Docker。如果您使用的是 WSL,请改为键入'wsl docker version'
。如果您尚未安装 Docker,请按照 Docker 网站上的说明安装并设置 Docker。请参阅 https://docs.docker.com/engine/install/。
要在 Windows® 上构建微服务镜像,您必须在 Windows 子系统 for Linux® v2 (WSL2) 上安装 Docker Desktop 或 Docker。要安装 Docker 桌面版,请参阅 https://docs.docker.com/desktop/setup/install/windows-install/要在 WSL2 上安装 Docker,请参阅 https://www.mathworks.com/matlabcentral/answers/1758410-如何在 WSL2 上安装 Docker。
验证您拥有 AWS 帐户。
验证您是否已安装 AWS 命令行界面 (CLI)。有关详细信息,请参阅:https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html。必须使用以下命令使用您的凭据配置 AWS CLI:
aws configure
。
创建 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
映像是否已创建。
有关详细信息,请参阅 MATLABCompiler SDK创建微服务 Docker 镜像。
创建 AWS Elastic Container Registry 存储库
转到您的 AWS 控制台并在搜索栏中输入 Elastic Container Registry
。从结果中选择 Elastic Container Registries 服务。点击创建存储库并填写常规设置。
可见性设置 - 选择“私人”或“公开”。
存储库名称 - 将其命名为与您在上一步中创建的图像相同的名称。
在此示例中,注册表名为 financetools
,并设置为公开可见性。
将微服务 Docker 的镜像上传至 AWS 弹性容器注册表
导航到您新创建的存储库并点击查看推送命令。这将打开一个名为 financetools 的推送命令的命令行窗口,其中包含有关如何将您的微服务映像推送到您的存储库的说明。
然后,获取一个认证令牌,并使用该令牌对您的 Docker 客户端进行认证,使其能够访问您的注册表。弹出窗口显示的命令中预先填充了适当的可见性、区域和存储库 ID。复制该命令并在命令行窗口中运行它。该命令应类似于以下内容。
aws ecr-<visibility> get-login-password --region <your_region> | docker login --username AWS --password-stdin <visibility>.ecr.aws/<your_repository_id>
使用容器注册表为微服务 Docker 镜像打上标记,具体操作请按照推送 financetools 的命令弹出窗口中步骤 3 提供的命令执行。例如:
docker tag financetools:latest public.ecr.aws/l8f7j0c7/financetools:latest
通过执行弹出窗口中标题为推送 financetools 的命令的步骤 4 中提供的命令,上传微服务 Docker 的镜像。例如:
docker push public.ecr.aws/l8f7j0c7/financetools:latest
这需要几分钟时间,因为微服务 Docker 的镜像正在上传到云端。完成后,您的 Docker 镜像将作为一个仓库显示在 AWS 弹性容器注册表中。
运行微服务 Docker 镜像
您可以在 AWS 上使用以下选项之一运行微服务 Docker 映像:
AWS Fargate
Amazon EC2®
AWS App Runner
亚马逊弹性容器服务
Amazon Elastic Kubernetes® 服务
对于此示例,使用 AWS App Runner 选项,它允许您运行单个容器。
要将其作为 AWS App Runner 运行:
从 AWS 控制台中搜索“AWS App Runner”并创建一个新的 App Runner 服务。
在源和部署选项卡中,完成源和部署设置部分。
工程详细信息
存储库类型 -
Container registry
。提供方 - 适当选择。
容器映像 URI - 粘贴 URI 或点击浏览以选择您的映像。
部署设置
部署触发器 -
Manual
。ECR 访问角色 - 使用默认或适当选择。
点击下一步。完成服务设置部分。
服务设置
服务名称 -
financetools
。虚拟 CPU 和内存 -
1 vCPU
&2 GB
.端口 -
9910
。自动缩放配置 - 使用默认配置。
健康检查
协议:
HTTP
。路径:
/api/health
。
安全
AWS KMS 密钥:使用默认值。
网络:
传入网络流量:适当选择,此示例使用
Public endpoint
。传出网络流量:适当选择,此示例使用
Public access
。
点击下一步。点击创建并部署以创建 AWS App Runner 服务。
一旦部署了 AWS App Runner 服务,您就可以使用服务概述页面上的 Default domain
向其发出请求。
向 AWS App Runner 中运行的微服务发出请求
使用命令行工具或 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://4kxqyz9md2.us-east-1.awsapprunner.com/financetools/simpInterest' \ --header 'Content-Type: application/json' \ --data '{"nargout": 1, "rhs": [21000, 0.043, 12] }'
您会收到 JSON 格式的单利金额。
{"lhs":[{"mwdata":[10836],"mwsize":[1,1],"mwtype":"double"}]}
另请参阅
compiler.build.productionServerArchive
| compiler.package.microserviceDockerImage