Boto3(AWS)で翻訳APIを叩いてみたお話
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サービスを呼び出すまでの手順はこんな感じ
- Boto3をpipインストールする
- AWSのアクセスキーを生成する
- AWSのCLIをインストールし、アクセスキーを設定する
- 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