azure - 在向 FQDN 发出 Web 请求时启动容器实例
问题描述
假设我们有一个(容器化的)后端,它只是很少使用。可能每隔几天左右,(静态)Web 前端调用该后端的 API 端点。
后端恰好是无状态的。没有数据存储或任何东西。
我们希望将托管成本降至最低,理想情况下希望按秒计费。它每个月只会运行几分钟,我们只想为这种使用付费。基本上,我们想要功能即服务 (FaaS),但需要整个后端,而不仅仅是单个功能。
Azure 容器实例似乎非常适合这种情况。它可以在需要时在容器中启动后端。然后,后端可以在一段时间不使用后再次自行关闭。
所以,让我们创建一个容器实例......
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mycontainerimage \
--restart-policy Never
--dns-name-label mybackend123
--ports 80
太好了,我们的后端在其 FQDN 上运行http://mybackend123.eastus.azurecontainer.io
!
如上所述,它会在一段时间不使用后自行关闭。多亏了--restart-policy Never
,ACI 不会重新启动容器,而是将其保持在状态Stopped
。
我的问题是:如果对 FQDN 的 Web 请求到达,有什么方法可以再次自动启动容器?
当然,我们可以通过跑步自己唤醒它……
az container start --resource-group myResourceGroup --name mycontainer
...或使用等效的 API 调用。但是这样做的服务需要一直运行!理想情况下,我希望容器在收到请求时自行启动。
解决方案
Azure 容器实例没有启动它们的 webbook 或 HTTP 触发器。但是,您可以使用可以为您有效运行的 Azure 函数或逻辑应用程序,az container start
然后使用 HTTP 调用它。使用这两种方法中的任何一种,您都必须设置一些 IAM 权限,才能将函数或逻辑应用程序权限授予 ACI 资源以启动它。
一种方法是:
- 使用 HTTP 触发器和托管标识创建 Azure 函数
- 授予托管身份参与者访问 ACI 容器组的权限
- 在函数内运行
az container start
或等效的 REST 调用以启动 ACI 容器 - 调用 Azure 函数(使用函数令牌)来启动容器。
推荐阅读
- unity3d - UNITY2D:在具有相同标签和相同图层的两个对象之间进行选择
- ios - 在 iOS 上通过 Spotify App Remote 的 SPTSession 进行身份验证时获取一个奇怪的刷新令牌
- elasticsearch - Elasticsearch / Kibana - 如何通过特定标识符获取日志的时间点快照
- css - 即使在正文中设置了绝对大小,移动 Firefox 上的字体大小与移动 Chrome 不同
- react-native - 如何在 React Native 中获取设备令牌?
- git - Android-studio 更改列表功能如何在 git 的幕后工作
- c# - 我可以使用 C# SemaphoreSlim 来触发某些东西吗
- oracle-apex - 从不同帐户在 Oracle Apex 上发送电子邮件
- python - 远程机器上的 Bottle 服务器
- python - 尝试重命名数据框中的列时,Split 在每一行上按预期执行时在一行上产生 IndexError