1
0

AWS LambdaからAmazon Translateを呼び出してみた

Posted at

はじめに

本記事は以下の記事の続編です。

前回はLambdaを単体で動かすところまで実施しましたので、今回はLambdaからTranslateを呼び出してみます

今回のゴール
image.png

参考にしたハンズオンはこちら。

やってみた

マネジメントコンソールにアクセスし、前回作成したLambda関数(translate-function)のページに行きます。
image.png

Lambda関数からTranslateを呼び出すためにコードを修正します。
コード修正には、以下のページが参考になりますので、開いてみましょう。

Boto3は、PythonでAWSサービスとやり取りするためのライブラリで、AWSサービスに対するAPI呼び出しができます。
「APIリファレンス」ボタンをクリックします。
image.png

ページ内で「Translate」を検索し、ページにアクセスします。
image.png

赤枠で囲まれたソースコードをコピーします。
image.png

ソースコード
import boto3

client = boto3.client('translate')

Lambdaのページに戻り、関数を修正します。
修正前の関数は以下です。

修正前のLambda関数
import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    
    logger.info(event)    
    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

まずはロギングに関する記述を削除します。

import json

def lambda_handler(event, context):
    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

先程コピーしたソースを2行目に貼り付けます。
clientという変数が分かりにくいため、translateに書き換えました。

import json
import boto3

translate = boto3.client('translate')
def lambda_handler(event, context):
    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

AWS SDK for Pythonのページに戻ります。
少し下にスクロールすると「translate_text」があるのでクリックします。
image.png

Request Syntaxをコピーします。
Translateでテキストを翻訳するときのサンプルコードです。
image.png

lambda関数に張り付けます。

import json
import boto3

translate = boto3.client('translate')

def lambda_handler(event, context):
    
    response = client.translate_text(
    Text='string',
    TerminologyNames=[
        'string',
    ],
    SourceLanguageCode='string',
    TargetLanguageCode='string',
    Settings={
        'Formality': 'FORMAL'|'INFORMAL',
        'Profanity': 'MASK',
        'Brevity': 'ON'
    }
)

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

これを以下のように修正します。
・インデントを整えます。
・Translateにinputするテキスト(input_text)を追加します。
・response変数の右辺のclientはtranslateに合わせこみます。
・不要な個所を削除します。
・SourceLanguageCodeを'ja'(日本語)、TargetLanguageCodeを'en'(英語)にします。
・翻訳結果を格納するoutput_text変数を追加し、returnで出力するようにします。

import json
import boto3

translate = boto3.client('translate')

def lambda_handler(event, context):
    
    input_text = '私はスープが大好きです。毎日飲みます。'
    
    response = translate.translate_text(
        Text=input_text,
        SourceLanguageCode='ja',
        TargetLanguageCode='en'
    )

    output_text = response.get('TranslatedText')

    return {
        'statusCode': 200,
        'body': json.dumps({
            'output_text': output_text   
        })
    }

今回は日本語→英語の翻訳としました。
サポートされている言語は以下のページをご参照下さい。

コード修正後、「Deploy」をクリックします。
※画像はクリックした後のスクショなのでDeployボタンがグレーになってます。
image.png

コードの修正は完了しましたが、このままでは実行しても失敗します。
Lambda関数がTranslateを呼び出す権限を持っていないためです。
なので権限を追加します。
「設定」タブをクリックし、ロールをクリックします。
image.png

「許可を追加」をクリックし、「ポリシーをアタッチ」をクリックします。
image.png

「translate」で検索します。
今回は「TranslateFullAccess」を選択します。
従来であれば、事故が起きないように必要な最小権限をアタッチするのが望ましいです。
「許可を追加」をクリックします。
image.png

ポリシーがアタッチされました。
これでLambda関数がTranslateを呼び出すことができます。
image.png

Lambdaのページに戻り、「テスト」タブをクリックします。
前回記事で作成したtestイベントを選択し、「テスト」をクリックします。
image.png

成功したっぽいです。
詳細を見てみます。
image.png

inputしたテキスト(私はスープが大好きです。毎日飲みます。)が英語に翻訳されていました。
image.png

次は違うテキストを試してみます。
「私が一番好きなコナン映画は天国へのカウントダウンです。」としました。
コード修正後、「Deploy」をクリックします。
image.png

再度テストします。
しっかり英語になっていますね。
カウントダウンがどこに行ったのか分かりませんが、コナンをKONANではなく、CONANとしているのは偉いです。
image.png

おわりに

今回はLambda関数からTranslateを呼び出して遊んでみました。
boto3の素晴らしさを学ぶことができました!
次回はAPI Gatewayで遊んでみます!

AdobeStock_166316779.jpeg

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0