生产环境里的Azure Stack,就不能仅仅将其看作是Hyper-V虚拟化平台、或者分布式存储、软件定义网络这样的产品。否则就暴殄天物。
而应该将Azure Stack看成是强大的云端操作系统,我们可以直接用和Azure公有云完全兼容的方法,直接把代码构建到Azure Stack上。对于传统的虚拟化来说,Azure Stack就好像是降维攻击一样,难以抵挡。
Azure Functions是微软的Serverless技术,类似AWS的Lambda。以下介绍如何在Azure Stack上测试Azure Functions,监控Azure Stack上的某个存储账号活动。参考以下文档:
https://docs.microsoft.com/en-us/azure/azure-functions/functions-integrate-storage-queue-output-binding
Azure Stack部署Azure Functions
用Azure AD账号,登录到租户页面,新建Virtual Machine、Function App。
假设名称为afdemomark。可以指定App Service的应用计划,这里指定Function App运行在Standard VM上(一台Azure A2的虚拟机)。
创建完毕以后,如果这个时候进入这台Azure A2的Standard虚拟机,可以看到其下运行WebApp网站,其运行的用户名就是我们指定的Function App名称。这说明在Azure Stack上,Azure Functions和App Service紧密集成,运行为其中的WebApp网站。
如果用Process Explorer打开该进程属性,切换到Job,可以看到该进程的内存限制为可以使用所有的系统内存,如果是Share模式或者Free模式,则应该有更多的资源限制。
Azure Functions创建函数
进入新建的Function App,选择New Function,并选择Create your custom function。
选择BlogTrigger-JavaScript,选择现有的某个存储账号,并指定所需监控的Path。点击Create。
在左侧选择Integrate,展开Documatation,确认存储账号名称(假设safunctionsdemo)、Access Key等是否正确。
Azure Functions效果测试
当前的TP3版本,Azure Stack的Azure Functions,有一个小Bug,用默认存储账号设置,系统会尝试搜索Azure公有云的存储账号端点,从而报错。所以需要点击左侧下方的Function App Settings,然后点击Configure App Settings。这里参考以下的文档:
https://www.azurestack.tips/2017/04/11/azure-stack-functions-setting-the-storage-endpoints/
指定所需修改的存储账号,将红框指定的部分修改为以下形式(请将斜体字部分修改为实际值):
BlobEndpoint=https://safunctionsdemo.blob.local.azurestack.external;TableEndpoint=https://safunctionsdemo.table.local.azurestack.external;QueueEndpoint=https://safunctionsdemo.queue.local.azurestack.external;AccountName=safunctionsdemo;AccountKey=YourAccountKey
接下来可以运行Azure Storage Explorer,连接到Azure Stack环境。可以参考以下文档:
https://docs.microsoft.com/en-us/azure/vs-azure-tools-storage-manage-with-storage-explorer#connect-to-an-azure-stack-subscription
尝试创建Blob container(名称和Azure Functions里函数代码的设置一样),并尝试上传一个文件,例如图片文件。
查看先前创建的Function App的Log,可以看到其捕获了存储Blob的活动。