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)
答案 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));
}
}
}