2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Lambdaで翻訳APIをつくってみた

Posted at

TL,DR

Lambda関数からGoogle Cloud Translation APIをコールして、単語を翻訳するAPIを作りました。
Pythonコードです。
Lambda関数はChaliceを使うことで、簡単にAWSにデプロイすることができます。

出来ること

こんな感じで、エンドポイントのクエリパラメータに翻訳対象のテキストと翻訳先言語を指定すると

https://xxxxxx.amazonaws.com/api/?word=Hello+World!&target_language=fr

翻訳結果が返ってきます。
image.png

作り方

GCPの準備

  1. プロジェクトの登録
  2. APIの有効化
  3. サービスアカウントの作成、キーのダウンロードー>JSONファイル

ChaliceでAPI化

Chalice のインストール

適当に仮想環境を作ってから

pip install chalice

Chalice プロジェクトの作成

Chaliceをインストールしたら、Chaliceプロジェクトを作成します。

chalice new-project プロジェクト名

app.pyの更新

Chaliceプロジェクトディレクトリ内のapp.pyのコードはこんな感じです。

app.py
from chalice import Chalice
from google.cloud import translate
import os

app = Chalice(app_name='chalice-honyakukun')

@app.route('/')
def index():
    # クエリパラメータから単語とターゲット言語コードを取得
    word = app.current_request.query_params.get('word')
    target_language_code = app.current_request.query_params.get('target_language')

    # 翻訳処理
    translation = translate_text(word, target_language_code)

    # 翻訳結果を返す
    return {'source_language': translation.detected_language_code,
            'translated_text': translation.translated_text}

def translate_text(text: str, target_language_code: str) -> translate.Translation:
    # 環境変数からプロジェクトIDを取得
    project_id = os.environ.get('GOOGLE_CLOUD_PROJECT')
    parent_id = f"projects/{project_id}/locations/global"

    # クライアントオブジェクトを作成
    client = translate.TranslationServiceClient()

    # 翻訳リクエストを送信
    response = client.translate_text(
        parent=parent_id,
        contents=[text],
        target_language_code=target_language_code,
    )

    # 翻訳結果を取得
    return response.translations[0]

ローカルでデプロイ

ローカルでデプロイしてみます。

chalice local --stage dev

デプロイしたら、ブラウザから以下のURLを叩いてみましょう。

http://localhost:8000/?word=Hello+World!&target_language=fr

うまくいくとこんな感じで表示されます。
image.png

AWSにデプロイ

requirements.txtに依存パッケージを書き出し

pip freeze > requirements.txt

サービスアカウントのJSONファイルを格納

chalicelibディレクトリを作成し、サービスアカウント情報のJSONファイルをchalicelibディレクトリに格納します。

image.png

config.jsonの更新

config.jsonにGCPのサービスアカウントファイルパスとプロジェクト名を環境変数として設定します。

config.json
{
  "version": "2.0",
  "app_name": "chalicepj",
  "stages": {
    "dev": {
      "api_gateway_stage": "api",
      "environment_variables": {
        "GOOGLE_APPLICATION_CREDENTIALS": "サービスアカウントJSONファイルへのパス",
        "GOOGLE_CLOUD_PROJECT": "GCPプロジェクト名"
      }
    }
  }
}

AWSにデプロイ

AWSにデプロイして、APIゲートウェイとLambda関数を作成します。

chalice deploy --stage dev

デプロイ成功後に表示されるAPIゲートウェイのURLにクエリパラメータを追加して、ブラウザからアクセスします。

https://APIゲートウェイのURL/api/?word=Hello+World!&target_language=fr

うまくいけば翻訳結果がリターンされます!

image.png

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?