자습서: Amazon Rekognition Lambda 애플리케이션 생성 - AWS Amazon Q를 사용한 툴킷

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

자습서: Amazon Rekognition Lambda 애플리케이션 생성

이 자습서는 Amazon Rekognition을 사용하여 감지된 레이블이 있는 Amazon S3 객체에 태그를 지정하는 Lambda 애플리케이션을 생성하는 방법을 보여줍니다.

설정에 대한 사전 요구 사항 및 정보는 Visual AWS Toolkit for Visual StudioStudio용 툴킷의 AWS Lambda 템플릿 사용을 참조하십시오. AWS

Visual Studio .NET Core 이미지 인식 프로젝트 생성

다음 절차는 에서 Amazon Rekognition Lambda 애플리케이션을 생성하는 방법을 설명합니다. AWS Toolkit for Visual Studio

참고

생성 시 애플리케이션은 두 개의 프로젝트로 구성된 솔루션을 갖게 됩니다. 하나는 Lambda에 배포할 Lambda 함수 코드를 포함하는 소스 프로젝트이고, 다른 하나는 로컬에서 함수를 테스트하기 위한 XUnit을 사용하는 테스트 프로젝트입니다.

Visual Studio에서 프로젝트에 대한 모든 NuGet 참조를 찾지 못하는 경우가 있습니다. 블루프린트에는 검색해야 하는 종속성이 필요하기 때문입니다. NuGet 새 프로젝트를 만들 때 Visual Studio는 로컬 참조만 가져오고 원격 참조는 가져오지 않습니다. NuGet NuGet 오류를 수정하려면 참조를 마우스 오른쪽 단추로 클릭하고 패키지 복원을 선택합니다.

  1. Visual Studio에서 파일 메뉴를 확장하고 새로 만들기를 확장한 다음 프로젝트를 선택합니다.

  2. 새 프로젝트 대화 상자에서 언어, 플랫폼프로젝트 유형 드롭다운 상자가 “모두...”로 설정되어 있는지 확인하고 검색 필드에 를 입력합니다aws lambda.

  3. 테스트AWS Lambda 포함 (.NET Core - C#) 템플릿을 선택합니다.

  4. 다음을 클릭하여 새 프로젝트 구성 대화 상자를 엽니다.

  5. 새 프로젝트 구성 대화 상자에서 이름에 ImageRekognition "“를 입력한 다음 나머지 필드를 원하는 대로 작성합니다. 생성 버튼을 선택하여 블루프린트 선택 대화창으로 이동합니다.

  6. 블루프린트 선택 대화상자에서 이미지 레이블 감지 블루프린트를 선택한 다음 완료를 선택하여 Visual Studio 프로젝트를 생성합니다.

    참고

    이 청사진은 Amazon S3 이벤트를 수신하기 위한 코드를 제공하며, Amazon Rekognition을 사용하여 레이블을 감지하고 감지된 레이블을 S3 객체에 태그로 추가합니다.

프로젝트 파일 검토

다음 섹션에서는 이러한 프로젝트 파일을 살펴봅니다.

  1. Function.cs

  2. aws-lambda-tools-defaults.json

1. Function.cs

Function.cs파일 내에서 첫 번째 코드 세그먼트는 파일 상단에 있는 어셈블리 속성입니다. 기본적으로 Lambda는 입력 파라미터 및 반환 유형의 유형만 받아들입니다. System.IO.Stream 입력 파라미터 및 반환 유형에 유형이 지정된 클래스를 사용하려면 시리얼 라이저를 등록해야 합니다. 어셈블리 속성은 스트림을 형식화된 클래스로 변환하는 데 사용하는 Lambda JSON 시리얼 라이저를 등록합니다. Newtonsoft.Json 어셈블리 수준 또는 메서드 수준에서 직렬 변환기를 설정할 수 있습니다.

다음은 어셈블리 속성의 예시입니다.

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

클래스에는 두 개의 생성자가 있습니다. 첫 번째는 기본 생성자로 Lambda가 함수를 호출할 때 사용됩니다. 이 생성자는 Amazon S3 및 Amazon Rekognition 서비스 클라이언트를 생성합니다. 또한 생성자는 함수를 배포할 때 함수에 할당한 IAM 역할에서 이러한 클라이언트의 AWS 자격 증명을 검색합니다. 클라이언트의 AWS 리전은 Lambda 함수가 실행되는 리전으로 설정됩니다. 이 청사진에서는 Amazon Rekognition 서비스가 레이블에 대한 최소 수준의 신뢰도를 갖는 경우에만 Amazon S3 객체에 태그를 추가하려고 합니다. 이 생성자는 MinConfidence 환경 변수를 확인하여 허용되는 신뢰도 수준을 결정합니다. Lambda 함수를 배포할 때 이 환경 변수를 설정할 수 있습니다.

다음은 첫 번째 클래스 생성자의 예시입니다. Function.cs

public Function() { this.S3Client = new AmazonS3Client(); this.RekognitionClient = new AmazonRekognitionClient(); var environmentMinConfidence = System.Environment.GetEnvironmentVariable(MIN_CONFIDENCE_ENVIRONMENT_VARIABLE_NAME); if(!string.IsNullOrWhiteSpace(environmentMinConfidence)) { float value; if(float.TryParse(environmentMinConfidence, out value)) { this.MinConfidence = value; Console.WriteLine($"Setting minimum confidence to {this.MinConfidence}"); } else { Console.WriteLine($"Failed to parse value {environmentMinConfidence} for minimum confidence. Reverting back to default of {this.MinConfidence}"); } } else { Console.WriteLine($"Using default minimum confidence of {this.MinConfidence}"); } }

다음 예제는 두 번째 생성자를 테스트에 활용하는 방법을 보여줍니다. 테스트 프로젝트는 자체 S3 및 Rekognition 클라이언트를 구성하고 다음과 같이 전달합니다.

public Function(IAmazonS3 s3Client, IAmazonRekognition rekognitionClient, float minConfidence) { this.S3Client = s3Client; this.RekognitionClient = rekognitionClient; this.MinConfidence = minConfidence; }

다음은 파일 내 메서드의 FunctionHandler 예입니다. Function.cs

public async Task FunctionHandler(S3Event input, ILambdaContext context) { foreach(var record in input.Records) { if(!SupportedImageTypes.Contains(Path.GetExtension(record.S3.Object.Key))) { Console.WriteLine($"Object {record.S3.Bucket.Name}:{record.S3.Object.Key} is not a supported image type"); continue; } Console.WriteLine($"Looking for labels in image {record.S3.Bucket.Name}:{record.S3.Object.Key}"); var detectResponses = await this.RekognitionClient.DetectLabelsAsync(new DetectLabelsRequest { MinConfidence = MinConfidence, Image = new Image { S3Object = new Amazon.Rekognition.Model.S3Object { Bucket = record.S3.Bucket.Name, Name = record.S3.Object.Key } } }); var tags = new List(); foreach(var label in detectResponses.Labels) { if(tags.Count < 10) { Console.WriteLine($"\tFound Label {label.Name} with confidence {label.Confidence}"); tags.Add(new Tag { Key = label.Name, Value = label.Confidence.ToString() }); } else { Console.WriteLine($"\tSkipped label {label.Name} with confidence {label.Confidence} because maximum number of tags reached"); } } await this.S3Client.PutObjectTaggingAsync(new PutObjectTaggingRequest { BucketName = record.S3.Bucket.Name, Key = record.S3.Object.Key, Tagging = new Tagging { TagSet = tags } }); } return; }

FunctionHandler는 인스턴스를 구성한 후 Lambda가 호출하는 메서드입니다. 입력 파라미터는 S3Event이 아닌 Stream 유형이어야 합니다. 등록된 Lambda JSON 직렬 변환기로 인해 이를 수행할 수 있습니다. S3Event에는 Amazon S3에서 트리거된 이벤트에 대한 모든 정보가 포함되어 있습니다. 함수는 이벤트의 일부인 모든 S3 객체를 통해 반복하며 Rekognition에 레이블을 감지하라고 알려줍니다. 레이블이 감지되면 태그로 S3 객체에 추가됩니다.

참고

코드에는 에 대한 호출이 포함되어 Console.WriteLine() 있습니다. 함수가 Lambda에서 실행 중인 경우 모든 호출은 Amazon Logs로 Console.WriteLine() 리디렉션됩니다. CloudWatch

2. aws-lambda-tools-defaults.json

aws-lambda-tools-defaults.json파일에는 블루프린트가 디플로이먼트 마법사의 일부 필드를 미리 채우도록 설정한 기본값이 들어 있습니다. .NET Core CLI와의 통합을 위한 명령줄 옵션을 설정하는 데도 유용합니다.

.NET Core CLI 통합에 액세스하려면 함수의 프로젝트 디렉터리로 이동하여 다음을 입력합니다. dotnet lambda help

참고

함수 핸들러는 호출된 함수에 대한 응답으로 Lambda가 호출할 메서드를 나타냅니다. 이 필드의 형식은 다음과 같습니다. <assembly-name>::<full-type-name>::<method-name> 네임스페이스는 유형 이름에 포함되어야 합니다.

함수 배포

다음 절차는 Lambda 함수를 배포하는 방법을 설명합니다.

  1. 솔루션 탐색기에서 Lambda 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Publish to AWS Lambda를 선택하여 업로드 대상 창을 엽니다. AWS Lambda

    참고

    사전 설정된 값은 파일에서 검색됩니다. aws-lambda-tools-defaults.json

  2. 업로드 대상 AWS Lambda 창에서 함수 이름 필드에 이름을 입력한 후 다음 버튼을 선택하여 고급 함수 세부 정보 창으로 이동합니다.

    참고

    이 예제에서는 함수 이름을 사용합니다ImageRekognition.

    AWS Lambda function upload interface with options for package type, runtime, architecture, and function details. (AI generated)
  3. 고급 함수 세부 정보 창에서 코드에 Amazon S3 및 Amazon Rekognition 리소스에 액세스할 수 있는 권한을 부여하는 IAM 역할을 선택합니다.

    참고

    이 예제를 따르고 있다면 역할을 선택하십시오. AWSLambda_FullAccess

  4. 환경 변수를 MinConfidence 60으로 설정한 다음 업로드를 선택하여 배포 프로세스를 시작합니다. AWS 탐색기에 함수 뷰가 표시되면 게시 프로세스가 완료됩니다.

    AWS Lambda function configuration with settings for role, memory, timeout, dead letter queue, and environment variable. (AI generated)
  5. 배포에 성공하면 Event Sources 탭으로 이동하여 Amazon S3가 새 함수로 이벤트를 보내도록 구성합니다.

  6. 이벤트 소스 탭에서 추가 버튼을 선택한 다음 Lambda 함수에 연결할 Amazon S3 버킷을 선택합니다.

    참고

    버킷은 Lambda AWS 함수와 동일한 리전에 있어야 합니다.

함수 테스트

함수가 배포되고 S3 버킷이 함수에 대한 이벤트 소스로 구성되면 선택한 버킷에 대해 AWS 탐색기에서 S3 버킷 브라우저를 엽니다. 그런 다음 일부 이미지를 업로드합니다.

업로드가 완료되면 함수 보기에서 로그를 살펴 함수가 실행되었는지를 확인할 수 있습니다. 또는 버킷 브라우저의 이미지를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다. 태그 탭에서는 객체에 적용된 태그를 볼 수 있습니다.

Properties window showing metadata tags and values for an image file. (AI generated)