Створимо додаток для перекладу з Amazon Translate

Використовувані матеріали

  • AWS акаунт
  • Node.js
  • AWS SDK
  • AWS SAM
  • TypeScript

Спершу створимо додаток,

mkdir translator-aws  
cd translator-aws  
npm init -y

Створимо репозиторій з такою ж назвою на Github та ініціалізуємо проект:

git init  
git add .   
git commit -m "initial commit"  
git remote add origin [email protected]:ozers/translator-aws.git  
git push

Розпочнемо з проекту, спершу встановимо AWS SDK:

npm install aws-sdk

Для використання інструментів AWS потрібно додати роль, важлива заувага: при використанні AWS акаунтів уникайте використання "root account". Можна створити нового користувача та надати йому адміністративну роль.

При наданні доступу користувачам в AWS, важливо дотримуватись принципу "найменших прав" (least privilege), тобто користувач повинен мати лише ті права, які йому необхідні. Тут ми надамо користувачу роль TranslateReadOnly.

pic

Як тип довіреної сутності вибираємо "AWS service". У Service or use case вибираємо "Lambda", оскільки для перекладу ми будемо використовувати "AWS Lambda". Надали роль TranslateReadOnly.

pic

Спочатку шукаємо в AWS Console "Search" і створюємо функцію Lambda. Створимо Lambda-функцію з назвою "translator-aws". Далі спробуємо зробити запит до Amazon Translate.

Для версій Node.js до v18 використання AWS SDK виглядало так, однак для Node.js v18 і новіших версій, де використовується AWS SDK v3, процес імпорту дещо відрізняється.

// Node.js до v18  
const AWS = require('aws-sdk');  
const translate = new AWS.Translate({ region: 'eu-west-1' });
exports.handler = async (event) => {  
...  
}
// Node.js v18 і новіші (з AWS SDK v3)  
import { TranslateClient, TranslateTextCommand } from "@aws-sdk/client-translate";  
const translate = new TranslateClient({ region: "us-east-1" });
export const handler = async (event) => {  
...  
}

Далі все досить просто. Достатньо передати параметри для перекладу та виконати запит, ми використаємо три параметри: "text, source, target".
Bunun Translate’de karşılığı “Text, SourceLanguageCode, TargetLanguageCode” olacak.

İçerik aşağıdaki şekilde olacak;

import { TranslateClient, TranslateTextCommand } from "@aws-sdk/client-translate";  
const translate = new TranslateClient({ region: "us-east-1" });
export const handler = async (event) => {  
 const {text,source,target} = event const params = {  
 Text: text,  
 SourceLanguageCode: source,  
 TargetLanguageCode: target  
 };  

 const command = new TranslateTextCommand(params);  
 const response = await translate.send(command);  
 return {  
 statusCode: 200,  
 body: JSON.stringify(response),  
 };  
}

pic

Yukarıdaki şekilde bir test yapalım, response body içerisinde metadata ve diğer bilgiler bulunuyor, baktığımızda bu kadar bilgiye ihtiyacımız yok, bunun yerine “body: response” yerine “body: response.TranslatedText” olarak aldığımızda sonuç aşağıdaki gibi olacaktır;

{  
 "statusCode": 200,  
 "body": "Amazon Translate makalesinden merhaba!"  
}

Params kısmında bir güncelleme yapalım, source değerini vermezsek otomatik algılamasını sağlayalım;

const params = {  
 Text: text,  
 SourceLanguageCode: source || 'auto',  
 TargetLanguageCode: target  
 };

Aşağıdaki şekilde kullanımda text’in otomatik olarak “en” algılamasını sağlayabiliriz;

// source vererek kullanılan request  
{  
 "text": "Hello from Amazon Translate article!",  
 "source": "en",  
 "target": "tr"  
}
// source vermeden kullanılan request  
{  
 "text": "Hello from Amazon Translate article!",  
 "target": "tr"  
}

Şimdi bunu bir proje olarak geliştirelim, AWS Lambda ile üzerinde çalışacak şekilde bir geliştirme yapalım ve AWS Cloud’a deploy edelim. Bir HTML sayfası oluşturup da tarayıcıda test edecek hale getirelim. Aynı zamanda projeyi Github’a atacağız.

Translator App Demo

Öncelikle AWS SAM ile bir template oluşturalım, ardından build alacağız. Oluşturmadan önce Homebrew ile sam-cli yükleyelim. Ardından sam build ve sam deploy yapacağız.

Öncelikle projeyi oluşturuyoruz;

mkdir translator-aws  
cd translator-aws  
npm init -y

Github repo’sunu initialize edelim;

git init  
git add .  
git commit -m "initial commit"  
git remote add origin [email protected]:ozers/translator-aws.git  
git push

Şimdi AWS SAM ile projeyi oluşturalım. Uygulamayı oluştururken seçtiğim seçenekler aşağıdadır;

sam init  
Which template source would you like to use?  
 1 - AWS Quick Start Templates  

Choose an AWS Quick Start application template  
 1 - Hello World Example  

Use the most popular runtime and package type? (python3.13 and zip) [y/N]: N  

Which runtime would you like to use?  
 13 - nodejs18.x  

What package type would you like to use?  
 1 - Zip  

Based on your selections, the only dependency manager available is npm.  
We will proceed copying the template using npm.  

Select your starter template  
 1 - Hello World Example  

Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: N  

Would you like to enable monitoring using CloudWatch Application Insights?  
For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: N  

Would you like to set Structured Logging in JSON format on your Lambda functions? [y/N]: N  

Project name [sam-app]: translator-aws

“default” oluşturduğumuz uygulamada “hello-word” olan klasörü “translate” olarak değiştirelim ve devam edelim.

mv hello-world translate

Gerekli olan pakedi kuralım;

cd translate
npm install @aws-sdk/client-translate

“translate” klasörü içerisinde çalıştırıyoruz, çünkü “node_modules” orada oluşturulmalı.

cd ..
sam build
sam validate

Після того як ми виконали build, потрібно провести перевірку за допомогою validate, щоб виявити можливі помилки в “template”.

Після валідації можемо переходити до процесу “deploy”. Для деплою я продовжив з налаштуванням за замовчуванням, але потрібно внести невеликі зміни, оскільки я створив власний S3 bucket і не хочу покладатися на стандартні налаштування. Ви також можете створити власний S3 bucket і використовувати його;

sam deploy — guided — s3-bucket translator-app-bucket — region eu-west-1

Після завершення цих кроків у вас буде API endpoint, який ви можете перевірити, надіславши запит за допомогою cURL, щоб перевірити, чи працює сервіс.

curl -X POST \  
 https://YOUR_API_ENDPOINT/Prod/translate \  
 -H "Content-Type: application/json" \  
 -d '{  
 "text": "Hello, Im Ozer. Is my Amazon Translate API work?",  
 "target": "tr"  
 }'

API відповість наступним чином:

{“translatedText”:”Merhaba, Ben Özer. Amazon Translate API’m çalışıyor mu?”,”sourceLanguage”:”en”,”targetLanguage”:”tr”}

Ми можемо візуалізувати наш API за допомогою HTML, і після додавання HTML отримуємо приклад застосунку, подібний до цього GIF.

pic

Після того як все протестуємо, якщо захочемо видалити застосунок, слід використати команду “sam delete”. Це дозволить видалити весь "stack", створений за допомогою AWS SAM. Якщо цього не зробити, потрібно буде зберігати URL API або обмежити доступ, оскільки наш застосунок працює на AWS Lambda як "serverless" і буде доступний у високодоступному середовищі. У разі атак з великою кількістю запитів ми не хочемо стикатися з неприємними рахунками.

Ви можете використовувати проект за наступним посиланням, якщо виникнуть питання, не соромтесь писати!

https://github.com/ozers/translator-aws

Email: [email protected]

Перекладено з: Amazon Translate ile Çeviri Uygulaması Yapalım

Leave a Reply

Your email address will not be published. Required fields are marked *