AWSのサーバーレスハンズオンをやってみた

AWS公式が用意しているAWS初心者向けハンズオン学習メニューである"AWS Hands-on for Beginners"。その中のサーバーレスアーキテクチャで翻訳Web APIを構築するハンズオンをやってみました。

pages.awscloud.com

 

サーバーレスアーキテクチャとは

インフラストラクチャを管理する必要がなく、アプリケーションとサービスを構築するためのシステムの設計方法を指します。

サーバー等のインフラを管理の労力を省くことで、サービスの開発や改善に注力することが可能になります。

 

どんなことをやったか

AWS上で翻訳Web APIの構築を行うことで、サーバーレスアーキテクチャの基本を学習しました。サービスの構築のために利用したAWSサービスは、 AWS Lambda、Amazon API GatewayAmazon DynamoDBAWS Translateの4つです。

各サービスの概要

AWS Lambdaサーバーのプロビジョニング/管理なしでプログラムを実行できるサービス。実行回数と実行時間に基づいて料金が生じる。Lambda関数に割り当てるメモリ量は128MB~10,240MB。CPU能力は確保するメモリ量に比例する。関数の実行時間は最大15分。

 

Amazon API Gateway:サーバーをプロビジョニング/管理することなく、APIを作成・管理できるマネージドサービス。可用性の担保、スケーリング、APIキー管理といったAPI開発で必要なことをAPI Gatewayに任せることで、開発者はビジネスの差別化につながる作業に集中できる。REST APIとWebSocketに対応。リクエストベースの料金体系(REST APIの場合)

 

Amazon DynamoDB:フルマネージド型のNoSQLデータベースサービス。3つのAZにデータが保存されるので信頼性が高い。性能要件に応じて、テーブルごとにスループットキャパシティを定義。キャパシティのAutoScaling、オンデマンドキャパシティといった設定も可能。ストレージの要領制限は無し。

 

AWS Translate高速で高品質かつカスタマイズ可能な言語翻訳を手ごろな料金で提供するニューラル機械翻訳サービス。無料の利用枠があり、1か月200万文字の翻訳処理を無料で利用できる。

 

大枠の流れ

1 AWS Lambda ハンズオン① Lambdaを単体で使ってみる

2 AWS Lambda ハンズオン② 他のサービスを呼び出してみる

3 API Gateway ハンズオン① API Gatewayを単体で使ってみる

4 API Gateway ハンズオン② API GatewayとLambdaを組み合わせる

5 DynamoDB ハンズオン① テーブルを作ってみる

6 DynamoDB ハンズオン② API GatewayとLambdaとDynamoDBを組み合わせる

 

各ハンズオンの流れ

AWS Lambda ハンズオン① Lambdaを単体で使ってみる

○簡単なLambda Functionを作成し、基本的な使い方を理解する

 ・Lambda Functionを1から作成する

 ・確保するメモリの量、タイムアウトの値を変更する

 ・自動的に作成されるIAMロールについて確認する

 ・Lambda関数をテスト実行する

 ・ログを出すようにプログラムを修正して保存する

 ・再度、テストを実行する

 ・ログを確認する

 

AWS Lambda ハンズオン② 他のサービスを呼び出してみる

○Lambda 関数から他のAWSサービスを呼び出す

 ・Python SDKのドキュメントを参照し、AWS Translateの呼び出しを実装

 ・IAMロールを修正

 ・レスポンスとして、JSON形式で英語訳を返すようにする

 ・Lambda 関数をテスト実行する

 

API Gateway ハンズオン① API Gatewayを単体で使ってみる

○Mockデータを返すAPIを作成する

 ・APIを新規に作成

 ・sampleリソースを作成し、GETメソッドを作成

 ・統合タイプとしてMockを選択

 (この時点ではLambda 関数との連携は行わず、固定のJSONを返す)

 ・devステージにデプロイ

 ・APIを実行

 

API Gateway ハンズオン② API GatewayとLambdaを組み合わせる

○入力した日本語を英語に翻訳するAPIを作成する

 ・/translateリソースを作成し、GETメソッドを作成

 ・統合タイプとして、Lambda関数を選択する

 ・プロキシ統合を設定し、Input/Outputをパススルーする

 ・メソッドリクエストでクエリパラメータの設定

 ・Lambda関数を修正する

 ・Lambda関数をテスト実行する

 ・APIをデプロイする

 ・APIを叩いてみる

  ・結果は返ってくるか

 

DynamoDB ハンズオン① テーブルを作ってみる

○DynamoDBのテーブルを作る

 ・パーティションキーとしてtimestampを指定する

 ・テーブル設定ではRead CU:1 Write CU:1 の設定を行う

 ・データを手動入力する

 

DynamoDB ハンズオン② API GatewayとLambdaとDynamoDBを組み合わせる

○翻訳履歴をDynamoDBにストアするように修正する

 ・Python SDKのドキュメントを参照し、DynamoDBにストアするようにLambda 関数を修正する

 ・IAMロールの設定を修正

 ・APIを叩く

  ・結果は返ってくるか

  ・DynamoDBにデータがストアされるか

 

重要箇所・ハマったポイントなど

AWSサービスおよびリソースにアクセスする許可を関数に付与するために、IAMロールに必要なアクセス許可のみを持つポリシーをアタッチする

・ハンズオン終了後に作成したリソースを削除すること

・サーバーレスアプリケーション開発について更に理解を深めるには、アプリケーションを作成して継続して運用するといい