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