在 C# 中调用 AWS Lambda 函数

Cor*_*rey 3 c# amazon-web-services fire-and-forget aws-lambda

我正在尝试从控制台应用程序运行 Lambda 函数。这个想法是让它快速运行并忘记 lambda 函数,而无需等待 lambda 函数返回。但我的代码似乎根本没有执行 lambda 函数。我知道该功能有效,因为我可以运行测试。当我运行下面的代码时,我只是收到任务取消异常。

var jsonSerializer = new JsonSerializer();
var lambdaConfig = new AmazonLambdaConfig() { RegionEndpoint = RegionEndpoint.USEast2 };
var lambdaClient = new AmazonLambdaClient(lambdaConfig);

using (var memoryStream = new MemoryStream())
{
    jsonSerializer.Serialize(myData, memoryStream);
    var lambdaRequest = new InvokeRequest
    {
        FunctionName = "MyFunction",
        InvocationType = "Event",
        PayloadStream = memoryStream
};

var result = Task.Run(async () => { return await lambdaClient.InvokeAsync(lambdaRequest); }).Result;
Run Code Online (Sandbox Code Playgroud)

有人知道我做错了什么吗?

谢谢!

Vik*_*hee 7

myData如果数据是带双引号的有效 JSON,则可以直接传递而不是转换为 MemoryStream。

在函数名称中,您可以使用 ARN 或仅使用名称。两者在最新版本中都适合我AWSSDK.Lambda -Version 3.3.103.31

static readonly string awsAccessKey = "access key here";
static readonly string awsSecretKey = "secret key here";

private static BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKey, awsSecretKey);
private static AmazonLambdaConfig lambdaConfig = new AmazonLambdaConfig() { RegionEndpoint = RegionEndpoint.USEast1 };
private static AmazonLambdaClient lambdaClient = new AmazonLambdaClient(awsCredentials, lambdaConfig);

public async Task<string> GetLambdaResponse(string myData)
{
    var lambdaRequest = new InvokeRequest
    {
        FunctionName = "mylambdafunction",
        Payload = myData
    };

    var response = await lambdaClient.InvokeAsync(lambdaRequest);
    if (response != null)
    {
        using (var sr = new StreamReader(response.Payload))
        {
            return await sr.ReadToEndAsync();
        }
    }
    return string.Empty;        
}
Run Code Online (Sandbox Code Playgroud)