Как создать zip-файл с кодом функции .NET для функции AWS Lambda, используя Mono? - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок в Mono и .NET экосистеме в целом, и официальное руководство , похоже, не применимо.

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

На самом деле руководство применимо, но сначала мне пришлось установить dotnet-cli ( посмотрите, как ), который не поставляется с дистрибутивом Mono на OS X.

Также мне нужна функциясам zip-файл, а не возможность создания функции, которая, конечно, не является обычным или рекомендуемым рабочим процессом.

Создание такого zip-файла из контейнера Docker:

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>
0 голосов
/ 23 ноября 2018

Поскольку вы новичок в "Mono и .NET eco system" , я настоятельно рекомендую вам использовать .NET Core.

Экосистема .NET Core способна развернутьАвтономная среда, которая необходима для большинства облачных сервисов, таких как AWS Lambda (как вы можете прочитать в руководстве, которое вы предоставили).

Вы можете запускать .NET Core проектов "из коробки" при использовании Visual Studio 2017и есть шаблоны пакетов, доступные в nuget .

Более подробную информацию можно найти здесь, в AWS docs :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...