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

f:id:osushi_engineer:20200911070802p:plain

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 GatewayAWS 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 GatewayAmazon 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 ハンズオン① テーブルを作ってみる

はじめての場合はテーブル作成からテーブルを作成し手入力でデータを入力してみます。

f:id:osushi_engineer:20200911051431p:plain

作成ボタンを押下してテーブル作成を開始する

テーブル名とプライマリーキーを入力することは必須。

f:id:osushi_engineer:20200911051645p:plain

テーブル名とプライマリーキーを設定する必要がある

f:id:osushi_engineer:20200911052104p:plain

テーブルが作成される

f:id:osushi_engineer:20200911052322p:plain

項目の作成から手入力してDBに登録できることを確認する

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

作成したDBに、Lambdaから変換履歴を記録していくようにします。

Lambdaの関数コードにデータベースへの入力をするためのコードを追加します。今回はバックエンドにPythonを利用しているので「aws python sdk」で検索して出てくる下記サイトからAPIリファレンスのDynamoDBを調べます。

boto3.amazonaws.com

使用方法が書いてあるのでそれを参考にします。この調べ方は別サービスにも応用できると思うので覚えておきたいです。

f:id:osushi_engineer:20200911060114p:plain

同じサイトのput_itemというアクションを使用して、DynamoDBにtimestamp,input_text,output_textというアイテムを配置するようにコードを書きます。

f:id:osushi_engineer:20200911061946p:plain

今のままではLambdaにDynamoDBのアクセス権限がないので、Lambda関数にIAMロールを付与します。

f:id:osushi_engineer:20200911062647p:plain

今回はDynamoDBのフルアクセス権限を与えています。実際は必要な権限を与えるようにします。以上でDynamoDBに履歴を記録する翻訳APIを作成できました。

まとめ

今回のハンズオンを通して、AWS Lambda、Amazon API GatewayAmazon DynamoDBを活用してWeb APIを作成する方法を学ぶことができた。自分は今までフロントエンドの知識しか持っていなかったので、AWSを利用しないで同じものを作る際の作業量は想像でしかないが、AWSを利用するのはかなり分かりやすく便利だと感じた。

ハンズオンには以後の学習パスについても言及されており、同じ構成で自分なりのSNSBotを作ってみるのが次の勉強として良いように感じたので、次はそれに挑戦したいと考えている。