AWS Hands-on for Beginners Serverless #1: サーバーレスアーキテクチャで翻訳 Web API を構築する ~ Amazon DynamoDB編 ~
AWS勉強中のhisacomです。
本記事は下記のハンズオンメモの続きとなります。
osushi-engineer.hatenablog.com
以下の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 Gateway と AWS Lambda を連携する
8. Amazon DynamoDB の概要
9. Amazon DynamoDB ハンズオン① - Amazon DynamoDB テーブルを作成する
10. Amazon DynamoDB ハンズオン② - AWS Lambda から Amazon DynamoDB に Item を Put する
今回はこの内8-10のAmazon DynamoDBに関する項目を実施します。
ハンズオン全体としてはAWS Lambda、Amazon API Gateway、Amazon DynamoDBのサービスを組み合わせて、HTTPリクエストで「こんにちは」と送信すると、翻訳された「Hello」というレスポンスが返ってくるようなサーバーレスなWeb APIを作成します。
用語の補足
■ NoSQL型のデータベース
Amazon DynamoDBはNoSQL型のデータベースです。格納するデータの書式を問わず、そのデータに対して何かキーとなる値を結びつけて格納する方式のデータベースです。リレーショナル方のデータベースに対し柔軟性があり、データを書式通りに入力しないで良い反面、なんでもデータとして放り込んでいるだけなので、詳細な検索ができません。その代わり、データアクセスは高速です。近年、ビックデータ処理やIoTのような、大量データ処理や、高速化が求められる場面などで使用され再注目されています。
■ Availability Zone(アベイラビリティーゾーン)
AWSのサービスは各データセンター(リージョン)にそれぞれ置かれているのですが、そのリージョン内でさらに複数のAvailability Zone(以下AZ)という物理的に離れた設備に分けられます。Amazon DynamoDBでは3つのAZの保存されるらしいので、1つの設備の不良が起こっても別設備が生きていれば動かすことができるようです(高可用性)
■ Primary Key(プライマリーキー)
Amazon DynamoDBでテーブルを作成する際、テーブル名に加えてプライマリーキーを指定する必要があります。プライマリーキーはテーブルの各項目を一意に識別するため、それ自身が一意なキーでなければなりません。
Amazon DynamoDB ハンズオン① テーブルを作ってみる
はじめての場合はテーブル作成からテーブルを作成し手入力でデータを入力してみます。
テーブル名とプライマリーキーを入力することは必須。
Amazon DynamoDB ハンズオン② API Gateway と Lambda と DynamoDB を組み合わせる
作成したDBに、Lambdaから変換履歴を記録していくようにします。
Lambdaの関数コードにデータベースへの入力をするためのコードを追加します。今回はバックエンドにPythonを利用しているので「aws python sdk」で検索して出てくる下記サイトからAPIリファレンスのDynamoDBを調べます。
使用方法が書いてあるのでそれを参考にします。この調べ方は別サービスにも応用できると思うので覚えておきたいです。
同じサイトのput_itemというアクションを使用して、DynamoDBにtimestamp,input_text,output_textというアイテムを配置するようにコードを書きます。
今のままではLambdaにDynamoDBのアクセス権限がないので、Lambda関数にIAMロールを付与します。
今回はDynamoDBのフルアクセス権限を与えています。実際は必要な権限を与えるようにします。以上でDynamoDBに履歴を記録する翻訳APIを作成できました。
まとめ
今回のハンズオンを通して、AWS Lambda、Amazon API Gateway、Amazon DynamoDBを活用してWeb APIを作成する方法を学ぶことができた。自分は今までフロントエンドの知識しか持っていなかったので、AWSを利用しないで同じものを作る際の作業量は想像でしかないが、AWSを利用するのはかなり分かりやすく便利だと感じた。
ハンズオンには以後の学習パスについても言及されており、同じ構成で自分なりのSNSのBotを作ってみるのが次の勉強として良いように感じたので、次はそれに挑戦したいと考えている。