📑
[AWS Hands-on for Beginners]Serverlessのハンズオンを実際にやってみたよ(2)
AWS Lambda ハンズオン② 他のサービスを呼び出してみる
前回は純粋にLambdaを使ってみただけだったので、今回は他のサービス(AWS SDKの翻訳サービス)を呼び出してみるようです。
リンクは下記。
実装
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
ボタンをクリックしておいてください。)
エラーになってる・・
どうも、Translate
のSettings
がいらないようですね。。
余計な記述をいったん削除してみました。
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
})
}
これで再度実行してみます。
うん、まぁできたはできた。
ただ、ついでに入れておいたインプットの日本語が文字化けしとるやん。
ついでにもう少し首を突っ込んでみたいと思います。
せっかくなので、インプットの文字列も文字コードではなく文字として表示したい。
下の記事が参考になりそう。
というわけで、ensure_ascii=False
を入れてみることにしますよ。
return {
'statusCode': 200,
'body': json.dumps({
'input_text': input_text,
'output_text': output_text
}, ensure_ascii=False)
}
お、できた!!
さいごに
ライブラリとして、すでに用意してあるものを利用する分には、かんたんに実装できてしまうのですねー!
驚きです。。
Discussion