如何使用Mono为AWS Lambda函数创建.NET函数代码压缩文件?

3

我对Mono和.NET生态系统都比较陌生,官方指南好像也不适用。


官方指南适用于 .net Core,有没有不使用它的(好)理由? - Stefan
另外,请参见:https://dev59.com/DFoU5IYBdhLWcg3wLEwM - Stefan
2个回答

3
实际上,该指南适用,但我首先必须安装dotnet-cli请参见如何安装),因为OS X上的Mono分发不包含它。
此外,我需要一个函数zip文件本身,而不是创建函数的能力,这当然不是通常或推荐的工作流程。
从docker容器构建这样的zip:
FROM mono
RUN curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin
COPY src /src
WORKDIR /src
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT 1
RUN /root/.dotnet/dotnet publish LambdaTest/LambdaTest.csproj
RUN zip -r -j dotnet.zip LambdaTest/bin/Debug/netcoreapp2.1/publish/

文件结构:

src/LambdaTest
├── Function.cs
└── LambdaTest.csproj

Function.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;

    using Amazon.Lambda.Core;

    // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
    [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

    namespace dotnet
    {
        public class Function
        {

            /// <summary>
            /// A simple function that takes a string and does a ToUpper
            /// </summary>
            /// <param name="input"></param>
            /// <param name="context"></param>
            /// <returns></returns>
            public string FunctionHandler(string input, ILambdaContext context)
            {
                return input?.ToUpper();
            }
        }
    }

LambdaTest.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <AWSProjectType>Lambda</AWSProjectType>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Amazon.Lambda.Core" Version="1.0.0" />
    <PackageReference Include="Amazon.Lambda.Serialization.Json" Version="1.4.0" />
  </ItemGroup>

</Project>

1

由于您是新手,对于"Mono and .NET生态系统",我强烈建议您使用.NET Core

.NET Core生态系统能够部署自包含环境,这是大多数云服务所需的,例如AWS Lambda(正如您在提供的指南中所读到的)。

当使用Visual Studio 2017时,您可以直接开始.NET Core项目,并且nuget上有可用的模板包。

更多信息可以在AWS文档中找到:


1
我明白了。我想我也可以使用.NET Core,现在我意识到.NET Core与Mono的区别并不是我在指南中遇到困难的原因。 - Pavel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接