📑

[AWS Hands-on for Beginners]Serverlessのハンズオンを実際にやってみたよ(2)

2023/06/30に公開

AWS Lambda ハンズオン② 他のサービスを呼び出してみる

前回は純粋にLambdaを使ってみただけだったので、今回は他のサービス(AWS SDKの翻訳サービス)を呼び出してみるようです。

リンクは下記。

AWS SDK for Python (Boto3)

APIリファレンス

Translate

実装

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',
      Settings={
          'Formality': 'FORMAL'|'INFORMAL',
          'Profanity': 'MASK'
      }
  )

  output_text = response.get('TranslatedText')

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

ロールを修正

このままだと権限がないので実行できません。
ということで、ロールの権限を修正していきましょう。

動画だとすぐ見つかる場所にありそうだったのですが、今現在は設定の中に入ってしまっているようで若干見つけるのに苦戦しました。。

ロールを表示して、権限をみていきます。
許可を追加ポリシーをアタッチを選択します。

Translateと入力して、候補を絞ります。

今回は、ハンズオンなので、TranslateFullAccessを選択して、許可を追加ボタンをクリックします。

これで権限の追加が完了しました。

ハンズオン動画だと、レイヤーにTranslateが追加されているのですが、今だと表示されないですね・・

それでは、テストを実行してみましょう。
(テストを実行する前にDeployが必要みたいです。Deployボタンをクリックしておいてください。)

エラーになってる・・

どうも、TranslateSettingsがいらないようですね。。
余計な記述をいったん削除してみました。

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({
      'input_text': input_text,
      'output_text': output_text
    })
  }

これで再度実行してみます。

うん、まぁできたはできた。
ただ、ついでに入れておいたインプットの日本語が文字化けしとるやん。

ついでにもう少し首を突っ込んでみたいと思います。
せっかくなので、インプットの文字列も文字コードではなく文字として表示したい。

下の記事が参考になりそう。

https://tex2e.github.io/blog/python/json-dumps-ensure-ascii-false

というわけで、ensure_ascii=Falseを入れてみることにしますよ。

  return {
    'statusCode': 200,
    'body': json.dumps({
      'input_text': input_text,
      'output_text': output_text
    }, ensure_ascii=False)
  }

お、できた!!

さいごに

ライブラリとして、すでに用意してあるものを利用する分には、かんたんに実装できてしまうのですねー!
驚きです。。

GitHubで編集を提案

Discussion