【问题标题】:Use Azure Storage on an Azure Web App to run exe command line applications在 Azure Web 应用上使用 Azure 存储运行 exe 命令行应用程序
【发布时间】:2018-08-28 14:41:39
【问题描述】:

我正在尝试了解 Azure 中可用的功能,以便在 Azure 中运行多个命令行应用程序作为 Azure Web 应用程序的一部分。我要运行的命令行应用程序基本上是 .exe 应用程序,它们还需要一些依赖文件,这些文件在 .exe 运行时需要存在(*.dll)。

我想编写一个 Azure Web 应用程序,Web 应用程序的部分逻辑是运行 .exe 并将输出存储在其他地方(我还不是很关心那部分)。但是,通过在 Internet 上搜索有关 Azure 存储、安装/卸载驱动器等的信息……我完全糊涂了。

话虽如此,我正在努力弄清楚我的 Web 应用程序的设计将如何使用 Azure 技术:

  1. 在这种情况下推荐哪种 Azure 存储? (文件存储?Blob 存储?)
  2. 为了访问不同的 .exe 文件及其所有依赖项,我想我需要在运行时以某种方式将存储挂载到 Web 应用程序上,以便可以参考 .exe 所在的路径。这甚至可以使用 Azure Web 应用程序,因为它们是平台即服务,我们无法控制执行代码的机器?
  3. 另外,由于我有三个不同的 .exe 命令行应用程序(及其依赖文件 -dlls-),在 Azure 存储中组织这些应用程序的最佳方法是什么?

我缺少一些基础知识,很高兴听到您对此事的意见,因为我已经开发了多个 Azure Web 应用程序,但从未在其中集成 Azure 存储。

编辑:澄清一下,我想运行的命令行工具的数量可能会有所不同。我最终将拥有同一命令行工具的不同版本,并且仍然可以运行任何版本,因此我认为有一个 Azure 存储可以上传我的不同版本。

【问题讨论】:

    标签: azure azure-web-app-service azure-storage azure-blob-storage file-storage


    【解决方案1】:

    Azure 应用服务有其own storage。那是您部署 .exe 和 .DLL 的地方(最好使用 Git,但 webdeploy/zipdeploy/FTP 始终是选项)。

    您可以像在任何 Web 应用程序(.NET/PHP/whatever stack)中一样调用它。这里没什么特别的。如果需要临时存储空间,请写信给%TEMP%

    您仍应使用Blob storage 作为输出,如果所述输出看起来像二进制 blob,否则使用更合适的存储机制(SQL/NoSQL 数据库 - Azure SQL 和 Cosmos DB 适合此处)。

    You could probably do away with an Azure Function 如果你真的不需要一个完整的 Web 应用程序。

    【讨论】:

    • 也许我需要编辑我的问题并添加一些细节(为此道歉!)但问题是我们必须运行的应用程序 (.exe) 的数量不是固定的数字.它们会随着时间的推移而改变,这就是为什么我认为将它们放在 Azure 存储中是有意义的。这将使我能够灵活地添加新的命令行应用程序(或同一应用程序的版本),并且在运行时只需选择其中一个,安装并运行它。请让我知道是否值得编辑我的初始帖子:)
    • 当然,您可以将这些二进制文件保存在 Blob 存储中,并使用查询参数或 POST 正文将它们传递进去。您的代码仍然需要先将它们下载到 %TEMP% 的某个位置,然后沙箱才能运行它们。不能仅通过引用 Blob 存储 URL 来运行二进制文件。但是,如果您将让我们再添加一个二进制场景视为新部署,那么与主 Web 应用/功能应用一起部署会更有意义。
    • Blob 存储与文件存储相比是否更适合选择?就我而言,该工具包含 .exe、dll 文件、配置文件。此外,由于 Azure Web App (PaaS) 的性质,一旦它们被下载,这并不意味着当新请求到达我的服务时我可以再次重用它们,对吧?在这种情况下,我需要再次从存储中下载命令行应用程序。对吗?
    • 下载后,您可以在本地多次引用它们。在应用服务中,d:\home 是持久存储,而d:\local 是临时存储,在每次应用重新启动时都会被擦除。更多在这里-github.com/projectkudu/kudu/wiki/…。使用 Blob 而不是文件,由于沙盒限制 - github.com/projectkudu/kudu/wiki/…,您将无法在应用服务中装载文件存储终结点。也不要硬编码路径,使用相应的环境变量,你可以在环境页面上的 Kudu 中找到。
    • 您可以将d:\local 视为缓存。如果不存在,请从 Blob 存储中提取,然后从 d:\local 调用。把事情简单化。不需要特殊的 on start 逻辑。
    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    相关资源
    最近更新 更多