[アドカレ2023]Amazon TranslateのAPIつかって翻訳していくぅ!

はじめに

「I have a gift for you!」
クリスマス恒例?のアドベントカレンダー12/5の担当安田です!
突然ですが皆さんは英語得意ですか?
AWSは基本言語がバッチバッチの英語になっているので、
イベント通知が来た際に即座に内容がわかりづらいです。

「アメリカ語苦手なんだよなぁ。。。」
「日本語にできないのか??」など思ったことはございませんか?
AWSには「Amazon Translate」という翻訳サービスがございます!
今回はそれを使ってー検証していくぅ!

AmazonTranslateの概要

Amazon Translate は、高速で高品質かつカスタマイズ可能な
言語翻訳を手ごろな料金で提供するニューラル機械翻訳サービスです。
https://aws.amazon.com/jp/translate/

検証内容

AWSからのSNS通知にAPIを介し、
日本語に翻訳したものを通知するようにします。

処理

簡単3ステップ
① SNSトピックの発行
② ①のトピックをトリガーにLambdaでTranslateで翻訳しSNSで通知
③ みんなハッピー

対応

1.SNSトピックの作成

英文で通知が来そうなやつを適当に作成
今回は↓で実装してます。
①Ec2statechangeのイベント
②Cloudwatchalarm

2.Lambdaの作成

Amazon Translate を使用して翻訳を行うための AWS Lambda 関数を作成します。
Lambda 関数は、SNS から通知を受け取り、その内容を Amazon Translate に渡して
翻訳する処理を行います。

import boto3
import json
import os

def lambda_handler(event, context):
    # 環境変数から target_sns_arn の値を取得
    target_sns_arn = os.environ['TARGET_SNS_ARN']

    # Amazon Translate クライアントと SNS クライアントの初期化
    translate_client = boto3.client('translate')
    sns_client = boto3.client('sns')

    # SNSメッセージの取得
    message = event['Records'][0]['Sns']['Message']
    print("Original message:", message)

    try:
        # メッセージを日本語に翻訳
        response = translate_client.translate_text(
            Text=message,
            SourceLanguageCode='en',
            TargetLanguageCode='ja'
        )

        # 翻訳されたメッセージ
        translated_message = response.get('TranslatedText')
        print("Translated message:", translated_message)

        # 翻訳されたメッセージを新しいSNSトピックに発行
        sns_response = sns_client.publish(
            TopicArn=target_sns_arn,
            Message=translated_message,
            Subject='Translated Message'
        )

        return {
            'statusCode': 200,
            'body': json.dumps('Message translated and published successfully!')
        }

    except Exception as e:
        print(e)
        return {
            'statusCode': 500,
            'body': json.dumps('Error in processing the message')
        }

3.Lambda関数とSNSトピックの設定

・Lambdaの実行ロールには↓のポリシーをセットしてください。
「AmazonSNSFullAccess」
「Translatereadonly」

・環境変数 TARGET_SNS_ARN に SNSトピックのARN を入力してください。

SNSは2つのセットになります。
「翻訳する用トピック」・・・Lambdaのトリガーに指定する
「翻訳されたものを通知するトピック」・・・通知を送りたいメールアドレス

結果

①処理前

①処理後

②処理前

②処理後

総括

単語での翻訳は難しいっぽく、
アラブ最強のSSRキャラ「アラーマーン」様を召喚することに成功しました。
普通にグーグル翻訳した方が楽だしわかりやすくね。。。っていうのはシィーです。
AmazonTranslateの概要の伏線改修でtranslateにカスタム辞書設定があるので、
調整なしでわかりやすくするのは難しそうです。

APIを経由するだけで英語→日本語への変更が可能になるので、
InspectorやSecurityHubなど出力結果が長め英文のケースでは手間が省けて便利です。

良いプレゼントになりましたかね?
閲覧頂きありがとうございました。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA