检查AWS Lambda函数是否完成了作业

时间:2017-06-12 10:43:49

标签: c# amazon-web-services .net-core aws-lambda aws-sdk

我目前正在发送一个要转码为AWS lambda函数的文件。发送文件后,我会向SQS发送通知,以获取一些外部应用程序,以便开始下载转码后的文件。

问题是,有时,文件的下载发生在Lambda函数完成之前。

如何在Lambda完成后将通知发送到SQS

我尝试了如下Job.Status,但如果Status不是Complete,则无法确定如何再次查询。{/ p>

这是我的代码:

using (var eClient = new AmazonElasticTranscoderClient())
                    {

                        var response = await this.S3Client.GetObjectMetadataAsync(s3Event.Bucket.Name, s3Event.Object.Key);

                        var videoPresets = new List<Preset>();
                        var presetRequest = new ListPresetsRequest();
                        ListPresetsResponse presetResponse;
                        do
                        {
                            presetResponse = await eClient.ListPresetsAsync(presetRequest);
                            videoPresets.AddRange(presetResponse.Presets);
                            presetRequest.PageToken = presetResponse.NextPageToken;
                        } while (presetResponse.NextPageToken != null);

                        var pipelines = new List<Pipeline>();
                        var pipelineRequest = new ListPipelinesRequest();
                        ListPipelinesResponse pipelineResponse;
                        do
                        {
                            pipelineResponse = await eClient.ListPipelinesAsync(pipelineRequest);
                            pipelines.AddRange(pipelineResponse.Pipelines);
                            pipelineRequest.PageToken = pipelineResponse.NextPageToken;
                        } while (pipelineResponse.NextPageToken != null);

                        var pipeLine = s3Event.Bucket.Name.ToLower().Contains("test") ? pipelines.First(p => p.Name.ToLower().Contains("test")) : pipelines.First(p => !p.Name.ToLower().Contains("test"));

                        //HLS Stuff for Apple
                        var usablePreset = videoPresets.Where(p => p.Name.Contains("HLS") && !p.Name.Contains("HLS Video")).ToList();
                        var hlsPresets = new List<Preset>();
                        foreach (var preset in usablePreset)
                        {
                            var resolution = preset.Name.Replace("System preset: HLS ", "");
                            switch (resolution)
                            {
                                case "2M":
                                case "1M":
                                case "400k":
                                    hlsPresets.Add(preset);
                                    break;
                            }
                        }

                        var jobReq = new CreateJobRequest
                        {
                            PipelineId = pipeLine.Id,
                            Input = new JobInput() { Key = fileName, },
                            OutputKeyPrefix = outPutPrefix
                            //OutputKeyPrefix = "LambdaTest/" + playlistName + "/"
                        };
                        var outputs = new List<CreateJobOutput>();

                        var playlistHLS = new CreateJobPlaylist() { Name = "HLS_" + playlistName, Format = "HLSv3" };
                        foreach (var preset in hlsPresets)
                        {
                            var resolution = preset.Name.Replace("System preset: HLS ", "").Replace(".", "");
                            var newName = resolution + "_" + playlistName;
                            var output = new CreateJobOutput() { Key = newName, PresetId = preset.Id, SegmentDuration = "10" };
                            outputs.Add(output);
                            playlistHLS.OutputKeys.Add(newName);
                        }
                        jobReq.Playlists.Add(playlistHLS);
                        jobReq.Outputs = outputs;
                        //var temp = JsonConvert.SerializeObject(jobReq);

                        var reply = eClient.CreateJobAsync(jobReq);

                        var transcodingCompleted = reply.Result.Job.Status == "Complete" ? true : false;
                        do {
                            //somehow need to query status again
                        } while (!transcodingCompleted);

                        if (transcodingCompleted)
                            await SendAsync(jobReq.OutputKeyPrefix, pipeLine.OutputBucket);
                    }

我感兴趣的部分:

var reply = eClient.CreateJobAsync(jobReq);

                        var transcodingCompleted = reply.Result.Job.Status == "Complete" ? true : false;
                        do {
                            //somehow need to query status again
                        } while (!transcodingCompleted);

                        if (transcodingCompleted)
                            await SendAsync(jobReq.OutputKeyPrefix, pipeLine.OutputBucket);

0 个答案:

没有答案