AWS Hands-on for Beginners Serverless #1: サーバーレスアーキテクチャで翻訳 Web API を構築する ~ AWS Lambda編 ~

f:id:osushi_engineer:20200816122221p:plain

AWS勉強中のhisacomです。

個人開発をはじめてからサーバーレスアーキテクチャに興味を持っています。

しかし、AWSでどのような構築を行えばいいのかはまだイメージがついていないので、なんとかして理解を深めることができればと。

aws.amazon.com

AWS Hands-on for Beginnersの中にちょうど良い講座がありましたので、今回はそれを実施しました。

以下の10ステップでハンズオンが行われます

1. サーバーレスアーキテクチャの概要
2. AWS Lambda の概要
3. AWS Lambda ハンズオン① - AWS Lambda を単体で利用する
4. AWS Lambda ハンズオン② - AWS Lambda から他の AWS サービスを呼び出す
5. Amazon API Gateway の概要
6. Amazon API Gateway ハンズオン① - Amazon API Gateway を単体で利用する
7. Amazon API Gateway ハンズオン② - Amazon API GatewayAWS Lambda を連携する
8. Amazon DynamoDB の概要
9. Amazon DynamoDB ハンズオン① - Amazon DynamoDB テーブルを作成する
10. Amazon DynamoDB ハンズオン② - AWS Lambda から Amazon DynamoDB に Item を Put する

今回は、この内1-4のAWS Lambdaに関する項目を実施します。

 

ハンズオン全体としてはAWS Lambda、Amazon API GatewayAmazon DynamoDBのサービスを組み合わせ、HTTPリクエストで「こんにちは」と送信すると、翻訳された「Hello」というレスポンスが返ってくるようなサーバーレスなWeb APIを作成します。

用語の補足

AWS Lambda

f:id:osushi_engineer:20200816130656p:plain
データやリクエストのリアルタイム処理や、バックエンドの処理を自動実行する仕組み。専用サーバーを用意する必要がなく(サーバーレス)必要なイベントに応じて自動実行される。プログラム実行時に課金される。

サーバーレスアーキテクチャの概要

サーバーレスアーキテクチャがどのように使われるのかについての解説があります。
サーバーレスアーキテクチャの特徴として
・ インフラのプロビジョニングや管理が不要
・ 自動でスケール
・ 可用性が高い
・ 価値に対する支払い(リクエスト数に対する支払い)
 があります。AWSでいうAmazon EC2AWSのサーバーアーキテクチャ)を使うのに比べ自由度は高くないが管理の手間が少なくて済むため、自身の作り出したいサービスに合わせて使うサービスを選択していく必要があるようです。

自分は今個人開発に興味を持っているので、サーバーレスアーキテクチャは非常に便利そうだなと感じました。

AWS Lambda の概要 

LambdaはLambda関数と呼ばれる小さなプログラム(Lambda関数)を実行できる仕組みですが、新しい言語で書かれるものではなくJava,Go,PowerShell,Node.js,C#,Python,Rubyで記述できます。

また、この関数に対しIAMロールの設定が必要となります。たとえばDBにアクセスするさいには、LambdaファンクションにDBアクセス可能なIAMロールを設定する必要があります。

IAMロールに関しては、別のハンズオンで解説されていますのでイメージがつかない場合は別のハンズオンを確認すると良いです。

osushi-engineer.hatenablog.com

AWS Lambda ハンズオン① - AWS Lambda を単体で利用する

サービスからLambdaを選択しホーム画面を表示させます。この画面に作成したLambda関数が表示されます。

f:id:osushi_engineer:20200816130910p:plain

関数の作成を押下し、関数名とランタイムで関数を記述する言語を選択します。

f:id:osushi_engineer:20200816130951p:plain

基本設定でメモリの使用量、タイムアウトの時間(最大15分)を設定します。今回の関数に必須ではありません。

実行ロールの設定で自動作成されたアクセス権限を確認できます。自分の画面ではハンズオン画面と違いアクセス管理タブの中に存在しました。

f:id:osushi_engineer:20200816124114p:plain

Lambdaでテスト実行をためしてみます。テストボタンを押下すると関数コードの下にResponseが出ていることがわかります。これで「Hello from Lambda!」の表示テストが完成です。

f:id:osushi_engineer:20200816124300p:plain

ソースコードを変更し、詳細なログを表示するようにする

現在ログ表示コードに変更を加え、詳細なログを表示するようにしてみます。

サンプルコードは以下の公式URLから取得できます。今回はlogger.info(event)というコードを追加し、イベントの情報を表示するようにします。

Python の AWS Lambda 関数ログ作成 - AWS Lambda

f:id:osushi_engineer:20200816124633p:plain
コードを変更し、保存を押した後に再度テストを行うと先ほど表示されていなかった、[INFO] 2020-08-16T02:18:27.390Z ... {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
というような情報がログに表示されていることを確認できます。

AWS Lambda ハンズオン② - AWS Lambda から他の AWS サービスを呼び出す

AWS LambdaからAmazon Translateに日本語を渡して、Translate側で翻訳しLambda側に返すという構成を作成します。

以下のサイトから、Pythonの使いかたのリファレンスが確認できます。

AWS SDK for Python | AWS

今回はこの中からTranslateの項目を確認して利用するようにします。

f:id:osushi_engineer:20200816124823p:plain

アクセス権限タブから、実行ロールを選択し「ポリシーをアタッチします」を実行します。

f:id:osushi_engineer:20200816134248p:plain

関数に対しI AMロールTranslateFullAccessをつけます。このプログラムに権限をつけるというのがI AMロールの考え方ですね。実際に使ってみると理解しやすいです。

f:id:osushi_engineer:20200816125343p:plain

AWS Lambdaに戻りページのを更新した後に、テストを実行しログを確認すると
コードのinput_textに設定した日本語が、翻訳されて表示されていることがわかります。

まとめ

AWS Lambdaの自動実行の仕組みを利用すれば、いろんなサービスの機能を手軽に作成することができるように思えました。ぜひ、このハンズオンを通しで行って自分の個人開発に利用したいと思います。

次の記事

ハンズオンの続きを以下の記事に記載しています。

osushi-engineer.hatenablog.com