Amazon Translate
개발자 안내서

Using Amazon Translate with Amazon DynamoDB

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

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

  • AWS CloudFormation을 사용하여 번역을 저장하는 DynamoDB 테이블을 만들고, TranslateText 작업을 호출하는 Lambda 함수를 만듭니다.

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

예제를 실행하려면

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

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

  3. AWS Management 콘솔에 로그인한 다음 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. [Options] 페이지에서 [Next]를 선택합니다.

  8. I acknowledge that AWS CloudFormation might create IAM resourcesI acknowledge that AWS CloudFormation might create IAM resources with custom names를 선택합니다. 자세한 내용은 AWS CloudFormation 사용 설명서에서 AWS Identity and Access Management를 사용하여 액세스 제어를 참조하십시오.

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

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

  11. AWS Management 콘솔에 로그인하고 https://console.aws.amazon.com/lambda/에서 AWS 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]를 선택했는지 확인한 후 [Test]를 선택합니다. 테스트가 완료되면 다음 메시지가 표시됩니다.

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

예제 코드

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

Python Lambda 함수

다음은 Python Lambda 함수의 내용입니다. Lambda 함수는 TranlateText 작업을 호출하여 후기와 출발 언어 및 도착 언어를 전달하여 번역된 후기를 받습니다. 이 파일을 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

이 페이지에서: