从AWS CodePipeline Action调用C#.net核心Lambda

时间:2018-04-02 15:53:28

标签: .net aws-lambda core aws-codepipeline

AWS CodePipeline允许您根据此处描述的操作调用自定义Lambda,https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.htmltion

我无法确定如何定义C#Lambda函数以便从管道访问输入数据。

我尝试过多次尝试,认为它会类似于下面的内容。我还尝试创建自己的C#类,将输入的json数据反序列化为。

  

public void FunctionHandler(Amazon.CodePipeline.Model.Job   CodePipeline,ILambdaContext context)

1 个答案:

答案 0 :(得分:1)

我能够找到解决方案。最初帮助的第一步是将我的lambda函数的输入参数更改为Stream。然后我能够将流转换为字符串并确切地确定发送给我的内容,例如

    public void FunctionHandler(Stream input, ILambdaContext context)
    {
 ....
    }

然后,根据输入数据,我能够将其映射到包装AWS SDK Amazon.CodePipeline.Model.Job类的C#类。它必须映射到json属性" CodePipeline.job"。下面的代码工作,我能够检索所有输入值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
using Amazon.CodePipeline;
using Newtonsoft.Json;
using System.IO;

// 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 lambdaEmptyFunction
{
    public class Function
    {
        public class CodePipelineInput
        {
            [JsonProperty("CodePipeline.job")]
            public Amazon.CodePipeline.Model.Job job { get; set; }
        }

        public void FunctionHandler(CodePipelineInput input, ILambdaContext context)
        {
            context.Logger.LogLine(string.Format("data {0} {1} {2}", input.job.AccountId, input.job.Data.InputArtifacts[0].Location.S3Location.BucketName, input.job.Id));
        }
    }
}