有没有办法安排 Azure 事件中心转向 on/off?

Is there a way to schedule Azure Event Hubs turning on/off?

我需要每天 运行 几个小时的事件中心。

我不确定是否可以安排一个时间来打开或关闭它。在事件中心门户中,我看到一个禁用它的选项,但每次我想打开它时这将是一个手动例程 on/off。

我假设有一个替代方案,因为每天重新创建事件中心是不切实际的。

有人可以帮忙吗?

是的,您可以禁用 Azure 事件中心,但您需要了解这并不能降低成本。定价基于给定命名空间中所有事件中心共享的吞吐量单位:

Throughput units are pre-purchased and are billed per hour. Once purchased, throughput units are billed for a minimum of one hour. Up to 40 throughput units can be purchased for an Event Hubs namespace and are shared across all event hubs in that namespace. (source)

因此,如果这就是你的运气,因为禁用命名空间是不可能的,并且也不支持缩小到 0 吞吐量单位。

替代方法是销毁并重新部署事件中心命名空间。通过利用 Bicep/ARM 模板,您可以使该过程自动化,因此您不必手动执行。但是请记住,共享访问策略等连接信息会更改每个新部署,因此如果您真的想自动化所有内容,任何客户端应用程序都需要能够以自动方式动态获取连接信息。

就我个人而言,我会通过将预配置的吞吐量单位缩小到 1 来将成本降至最低。

关于自动化部署:使用共享访问签名令牌 (SAS) 连接时,您可以使用 ARM 模板 ARM 模板创建它们并将它们存储在 Key Vault 中 (example that shows how to create SAS tokens)。然后,客户端可以使用相同的 Azure Key Vault 获取连接信息。

或者(最好是因为不需要密钥保管库)利用 managed identities to enable client application that support managed identities to access the Event Hub. You can assign roles to managed identities using ARM templates as well. (doc showing example of how to assign roles)

文档有点分散,我还找不到一个示例 ARM 模板可以一起完成所有工作,因此您可能必须结合一些示例才能正确使用。

我可以使用 Logic 应用程序自动执行该过程。在逻辑应用程序中,您可以使用 Create or update a resource 操作通过更改其状态来禁用事件中心。为了安排它有时工作,我使用了重复触发器。以下是我的工作流程:-

结果: