Amazon DynamoDB에서 Amazon Translate 사용 - Amazon Translate

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

Amazon DynamoDB에서 Amazon Translate 사용

이 예제는 제품 후기를 번역하여 Amazon DynamoDB에 저장하는 방법을 보여 줍니다. 나중에 동일한 후기를 요청하면 Amazon Translate에서 다시 번역할 필요 없이 DynamoDB가 이를 반환합니다.

이 예제에서는 다음과 같이 합니다.

  • 사용AWS CloudFormation을 사용하여 변환을 저장하는 DynamoDB 테이블을 만들고TranslateText작업.

  • AWS Lambda 콘솔을 사용하여 함수를 테스트합니다.

예제를 실행하려면

  1. 의 내용을 복사합니다.example.py에서 를 찾을 수 있습니다.python Lambda, 이라는 이름의 파일로example.py.example.py는 다음을 호출하는 Lambda 함수입니다.TranslateText작업. 파일을 example.zip이라는 zip 아카이브로 압축합니다. 함수를 실행하려는 리전과 동일한 AWS 리전에 있는 S3 버킷에 파일을 저장합니다.

  2. template.yaml라는 이름의 새로운 파일을 만듭니다. AWS CloudFormation 템플릿에서 찾을 수 있는 AWS CloudFormation 템플릿 코드를 파일로 복사합니다. AWS CloudFormation는 이 템플릿을 사용하여 샘플 애플리케이션용 리소스를 생성합니다. BUCKET_NAMEexample.zip이 저장된 S3버킷의 이름으로 변경합니다. 파일을 로컬 디렉터리에 저장합니다.

  3. AWS Management Console에 로그인하여 https://console.aws.amazon.com/cloudformation에서 AWS CloudFormation 콘솔을 엽니다.

  4. [Create new stack]을 선택합니다.

  5. [Upload a template to Amazon S3]을 선택한 후 [Choose file]을 선택합니다. 2단계에서 만든 template.yaml을 선택한 후 [Next]를 선택합니다.

  6. 스택 이름을 입력한 후 [Next]를 선택합니다.

  7. 옵션 페이지에서 다음을 선택합니다.

  8. 선택나는 그것을 인정합니다.AWS CloudFormationIAM 리소스를 생성할 수 있음나는 그것을 인정한다AWS CloudFormation사용자 지정 이름으로 IAM 리소스를 생성할 수 있음. 자세한 내용은 단원을 참조하십시오.AWS Identity and Access Management를 사용하여 액세스 제어AWS CloudFormation사용 설명서.

  9. [Create Change Set]를 선택합니다.

  10. AWS CloudFormation이 변경 세트를 생성하면 Execute를 선택합니다. AWS CloudFormation이 스택을 생성할 때까지 기다립니다.

  11. AWS Management Console에 로그인하고 AWS Lambdahttps://console.aws.amazon.com/lambda/에서 콘솔을 엽니다.

  12. 새 함수를 선택합니다. 이름이 TestTranslate-ReviewTranslate로 시작하는 함수입니다.

  13. 함수 세부 정보 페이지에서 [Test]를 선택합니다.

  14. 이름TestTranslate를 입력합니다. [Configure test events] 서 JSON을 다음으로 바꿉니다.

    { "review": "hello world", "target_language": "es", "source_language": "en", "review_id": "1" }

    생성(Create)을 선택합니다.

  15. 다음을 확인하십시오.TestTranslate를 선택한 다음테스트. 테스트가 완료되면 다음 메시지가 표시됩니다.

    
                    작업 결과로 "Hello world"를 스페인어로 번역하여 보여 주는 패널.

예제 코드

다음 코드를 실행하여 예제를 생성합니다.

python Lambda

다음은 Python Lambda 함수의 내용입니다. Lambda 함수는TranslateText작업을 수행하고 후기와 소스 언어 및 대상 언어를 전달하여 번역된 후기를 받습니다. 이 파일을 example.py로 저장한 후 example.zip이라는 .zip 아카이브로 압축합니다. 예제를 실행하는 리전과 동일한 리전의 S3 버킷에 파일을 저장합니다.

import logging import json import boto3 import os translate = boto3.client('translate') dynamodb = boto3.client('dynamodb') firehose = boto3.client('firehose') TABLE_NAME = os.getenv('TABLE_NAME') logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): logger.info(event) if 'source_language' in event and 'target_language' in event and 'review' in event and 'review_id' in event: review_id = event['review_id'] source_language = event['source_language'] target_language = event['target_language'] review = event['review'] try: # The Lambda function queries the Amazon DynamoDB table to check whether # the review has already been translated. If the translated review # is already stored in Amazon DynamoDB, the function returns it. response = dynamodb.get_item( TableName=TABLE_NAME, Key={ 'review_id': { 'N': review_id, }, 'language': { 'S': target_language, }, } ) logger.info(response) if 'Item' in response: return response['Item']['review']['S'] except Exception as e: logger.error(response) raise Exception("[ErrorMessage]: " + str(e)) try: # The Lambda function calls the TranslateText operation and passes the # review, the source language, and the target language to get the # translated review. result = translate.translate_text(Text=review, SourceLanguageCode=source_language, TargetLanguageCode=target_language) logging.info("Translation output: " + str(result)) except Exception as e: logger.error(response) raise Exception("[ErrorMessage]: " + str(e)) try: # After the review is translated, the function stores it using # the Amazon DynamoDB putItem operation. Subsequent requests # for this translated review are returned from Amazon DynamoDB. response = dynamodb.put_item( TableName=TABLE_NAME, Item={ 'review_id': { 'N': review_id, }, 'language': { 'S': target_language, }, 'review': { 'S': result.get('TranslatedText') } } ) logger.info(response) except Exception as e: logger.error(e) raise Exception("[ErrorMessage]: " + str(e)) return result.get('TranslatedText') else: logger.error(e) raise Exception("[ErrorMessage]: Invalid input ")

AWS CloudFormation 템플릿

다음은 에서 사용하는 템플릿 파일입니다.AWS CloudFormation를 사용하여 Lambda 함수 및 DynamoDB 테이블을 생성하고 구성합니다. 예제의 AWS CloudFormation 스택을 생성할 때 이 파일을 사용하십시오. BUCKET_NAME을, example.zip 파일을 포함하는 S3 버킷의 이름으로 업데이트한 후 로컬 디렉터리에 template.yaml로 저장합니다.

AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: ReviewTranslate: Type: 'AWS::Serverless::Function' Properties: Handler: example.lambda_handler Runtime: python2.7 CodeUri: Bucket: BUCKET_NAME Key: example.zip Policies: - AWSLambdaFullAccess - TranslateReadOnly Environment: Variables: TABLE_NAME: !Ref ReviewTable Tracing: "Active" ReviewTable: Type: 'AWS::DynamoDB::Table' Properties: AttributeDefinitions: - AttributeName: "review_id" AttributeType: "N" - AttributeName: "language" AttributeType: "S" KeySchema: - AttributeName: "review_id" KeyType: "HASH" - AttributeName: "language" KeyType: "RANGE" ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 5