private async Task ProcessArn()

in packages/lambdas/GroundTruthJobHandler/src/GroundTruthJobHandler/Function.cs [74:157]


        private async Task ProcessArn(string Arn)
        {
            var tableName = Environment.GetEnvironmentVariable("TrainingTableName");

            AmazonSageMakerClient sageMakerClient = new AmazonSageMakerClient();

            Amazon.S3.AmazonS3Client s3Client = new Amazon.S3.AmazonS3Client();

            var config = new DynamoDBOperationConfig
            {
                OverrideTableName = tableName,
                IndexName = "LabellingJobArn-index"
            };

            Amazon.DynamoDBv2.AmazonDynamoDBClient dynamoDbClient = new AmazonDynamoDBClient();


            DynamoDBContext dbContext = new DynamoDBContext(dynamoDbClient);

            var dbJob = dbContext.QueryAsync<TrainingJob>(Arn, config).GetRemainingAsync().GetAwaiter().GetResult()
                .FirstOrDefault();

            if (dbJob == null)
            {
                LambdaLogger.Log("Labelling job not found.");
                return;
            }

            var labellingJob = await sageMakerClient.DescribeLabelingJobAsync(new DescribeLabelingJobRequest()
            {
                LabelingJobName = dbJob.Id
            });

            string strManifestS3Key = labellingJob.OutputConfig.S3OutputPath + "/manifest/output/output.manifest";

            // Check if the manifest file exists
            AmazonS3Uri s3Uri = new AmazonS3Uri(strManifestS3Key);
            try
            {
                var s3GetResp = await s3Client.GetObjectMetadataAsync(new GetObjectMetadataRequest
                    { BucketName = s3Uri.Bucket, Key = s3Uri.Key });
            }
            catch
            {
                LambdaLogger.Log(
                    $"Output manifest file ${strManifestS3Key} does not exist or no permissions to read, cannot proceeed.");
                return;
            }

            string projectName = "ekyc-" + Convert.ToInt64(DateTime.UtcNow.Subtract(DateTime.UnixEpoch)).ToString();

            var rekognitionClient = new AmazonRekognitionClient();

            var createProjectResponse =
                await rekognitionClient.CreateProjectAsync(new CreateProjectRequest() { ProjectName = projectName });

            dbJob.ProjectArn = createProjectResponse.ProjectArn;

            var createDatasetResponse = await rekognitionClient.CreateDatasetAsync(new CreateDatasetRequest()
            {
                DatasetType = DatasetType.TRAIN, ProjectArn = createProjectResponse.ProjectArn, DatasetSource =
                    new DatasetSource()
                    {
                        GroundTruthManifest = new GroundTruthManifest()
                        {
                            S3Object = new S3Object()
                            {
                                Bucket = s3Uri.Bucket,
                                Name = s3Uri.Key
                            }
                        }
                    }
            });

            dbJob.DatasetArn = createDatasetResponse.DatasetArn;
            dbJob.Status = TrainingJobStates.CreatingDataset.ToString();

            var saveConfig = new DynamoDBOperationConfig
            {
                OverrideTableName = tableName
            };

            await dbContext.SaveAsync(dbJob, saveConfig);
        }