【问题标题】:How to create a .NET function code zip file for AWS Lambda function using Mono?如何使用 Mono 为 AWS Lambda 函数创建 .NET 函数代码 zip 文件?
【发布时间】:2019-04-25 23:35:41
【问题描述】:

总的来说,我是 Mono 和 .NET 生态系统的新手,the official guide 似乎并不适用。

【问题讨论】:

标签: .net amazon-web-services mono aws-lambda


【解决方案1】:

实际上该指南确实适用,但我必须先安装 dotnet-cli (see how),它不随 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

函数.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>

【讨论】:

    【解决方案2】:

    由于您是“Mono 和 .NET 生态系统”的新手,我强烈建议您使用.NET Core

    .NET Core 生态系统能够部署一个独立的环境,这是大多数云服务所需要的,例如 AWS Lambda(您可以在您提供的指南中阅读)。

    使用 Visual Studio 2017 时,您可以开箱即用地启动 .NET Core 项目,nuget 上有可用的模板包。

    更多信息可以在这里找到,AWS docs

    【讨论】:

    • 我明白了。我想我也可以使用 .NET Core,现在我突然想到 .NET Core 与 Mono 的差异并不是我在指南中遇到困难的原因。
    猜你喜欢
    • 2015-09-08
    • 1970-01-01
    • 2020-11-12
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2018-01-13
    • 2021-03-20
    相关资源
    最近更新 更多