🐬

Boto3(AWS)で翻訳APIを叩いてみたお話

2023/12/26に公開

AWSの機能とpythonを繋げたい時、AWSが公式でSDKを用意していてくれています。
AWS公式にはAWS SDK for Python(Boto3)と書かれており、これを使用すると"AWSの使用を迅速に開始できます"とのこと。

なんでBoto?Elastic Compute Cloudなんかは頭文字とってECCから、さらにcが2つなんでEC2になってるから、命名規則外れてない?
AwsのSdkで、Python向けなのだからASPって名前になるべきでは?
そんなことを思いながら調べると、Botoってアマゾンカワイルカという動物が由来らしい。
ニシキヘビさんに対抗してイルカさんを持ってきたということ(?)なのだろう。たぶん。

この記事はそんなBoto3を使ってPythonのプログラムから、AWSの翻訳サービスであるAmazon Translateを呼び出してみた。そんな記事

手順

実際にPythonからAWSサービスを呼び出すまでの手順はこんな感じ

  1. Boto3をpipインストールする
  2. AWSのアクセスキーを生成する
  3. AWSのCLIをインストールし、アクセスキーを設定する
  4. boto3を含むPythonコードを実行する

AWSの認証関連でCLIをインストールする必要があるが、それ以外は特に変わったところはなさそうだ

1. Boto3をpipインストールする

Boto3はPython 2.7、およびPython 3.4以降がサポートしているらしい。
pipのバージョンが23.2.1以降だと、Boto3はpipインストールで導入することができるので、適宜アップデートしてBoto3インストール用コマンドを実行。

pip install boto3[crt]

後ろに[crt]をつけてCommon RunTime版を入れるとパフォーマンスが良いバージョンを入れることができるらしい。へー

2. AWSのアクセスキーを生成する

AWSのアクセスキーはAMIのアカウントから開けるアカウント詳細ページ内の、セキュリティ認証情報タブから作成できる。
(なので使いたい最低限の権限を持つアカウントを作っておくといいらしい)

アクセスキーの設定項目を探し、アクセスキーを作成。
ユースケースの設定はとりあえずコマンドラインインターフェイス(CLI)にして、作成。

説明を入れてアクセスキーを作成するとアクセスキーとシークレットが取得できる。CSVで持ってこれるので保存しておこう

3. AWSのCLIをインストールし、アクセスキーを設定する

AWSのCLIは公式ページから取得できる。
自分が使っているOSに合わせた方法でインストールをしておこう。

ターミナルだかコマンドプロンプトだかを開いてバージョンを確認できればインストール成功。やったね

aws --version

インストールができたら、前の手順で生成したAWSのアクセスキーを設定する。

設定用のコマンドはこれ。

aws configure

コマンドを打つとアクセスキーを聞かれるので入力する。コマンドプロンプトだと右クリックでペーストできるので楽。
シークレットも同じように入力して、残りは変更せずにEnter連打で設定を完了させる。

4. Boto3を含むPythonコードを実行する

あとはAWS CLIが使える状態のターミナルでBoto3を含むPythonコードを実行する。
今回用意したコードはこんな感じ

import boto3

translate = boto3.client('translate')

def trans(text_jp):
	resp= translate.translatetext(
		Text=text_jp,
		SourceLanguageCode='ja',
		TargetLanguageCode='en'
	)
	
	return(resp.get('TranslatedText'))
	
print('AWS Translateで翻訳したい日本語を入力')
text_jp = input()

print(trans(text_jp))

翻訳する関数transを作り、ターミナルからの標準入力を翻訳して出力するだけの簡単なプログラム。
3行目でtranslateとしてBoto3で翻訳機能に接続して、SourceLanguageCodeで翻訳元言語コード、TargetLanguageCodeで翻訳結果言語コードを設置して翻訳する。

翻訳リクエストの結果respには、以下のような情報が含まれている

  • TranslatedText(翻訳後のテキスト)
  • SourceLanguageCode(翻訳元言語コード)
  • TargetLanguageCode(翻訳先言語コード)
  • ResonseMetadata(メタデータ)
    • RequestId
    • HTTPStatusCode
    • HTTPHeaders
      • ヘッダー情報で必要になるのはcontent-lengthとdateくらいかしら?
    • RetryAttempts(リトライ回数)

コード内ではresp.get('TranslatedText')で翻訳結果だけを取得しているが、resp.get('ResponseMetadata').get('HTTPStatusCode')のようにして、正常に200番台が帰ってきていることを確認することもできるわけだ。

とまぁここまでで翻訳までできたのでこの記事はこれでおしまい。必要に応じてアクセスキーを削除ないしは無効化しておこう。
この際、前回利用したサービスがみられるので、Translateで使われたことがちゃんと確認できる。
不正利用されてたらここが身に覚えのないサービス名になるわけだ。

Discussion