AWS Windows 上的无服务器计算

Serverless compute on Windows in AWS

我有一段代码需要在网上提供。它非常适合顶部带有 HTTP API 的 AWS Lambda - 无状态、无副作用,而是 CPU 密集型函数,blob in,blob out。它是用 C#/.NET 编写的,但它不是纯 .NET,它使用 UWP API,因此需要 Windows Server 2016。

AWS Lambdas only run on Linux hosts,甚至是 C# 的。有没有办法以无服务器方式在亚马逊云中部署这个部分——也许不是 Lambda?我知道我可以使用 EC2 VM,但这正是发明无服务器架构的目的。

Lambda 是 AWS 上无服务器计算的唯一选择,Lambda 函数 运行 仅在 Linux 台机器上。

如果您需要在 Windows 机器中 运行 无服务器功能,请尝试 Azure Functions。这是微软云中的 Lambda 等价物。我不确定它是否 运行 在 Windows Server 2016 机器中并且找不到对该平台的任何引用,但我希望作为一项全新的服务,他们正在使用他们的自己的边缘技术。

要确认平台是否是您需要的,请尝试此功能:

using System.Management;
using System.Net;
using System.Threading.Tasks;    

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    // Get OS friendly name
    // 
    var caption = (from x in new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem").Get().Cast<ManagementObject>()
                  select x.GetPropertyValue("Caption")).FirstOrDefault();
    string name = caption != null ? caption.ToString() : "Unknown";

    // the function response
    return req.CreateResponse(HttpStatusCode.OK, name);
}

我认为您可以通过结合使用 CodeDeploy 服务和 AWS CodePipeline 来实现这一点。

参考这篇文章:

http://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-windows.html

了解如何通过 CodeDeploy 部署代码。稍后看这篇文章:

http://docs.aws.amazon.com/codepipeline/latest/userguide/getting-started-4.html

了解如何配置 aws Pipline 以调用 Code Deploy 并稍后在创建的 windows 机器上执行批处理作业(注意:您可能想要使用 S3 而不是 Github - 这可以通过 CodePipeline).

我会考虑 bootstrap 通过脚本完成这样的配置 - 使用 aws cli - 这样你就可以像这样轻松清理你的资源:

:aws codepipeline delete-pipeline --name "MyJob"

当然,您可以通过 aws web 控制台配置管道,并定期将管道配置为 运行 您的代码。