AWS+NodeJSでサーバレスな環境構築②

# はじめに
[前回の記事](https://qiita.com/isacRU/items/fe4751603d3da32b2daf)ではAPI Gateway+Lambda(NodeJS)を組み合わせてWEBページを表示するというアウトプットでした。今回はDynamoDBのテーブルと項目作成、Lambda関数で使うロールやインラインポリシーの設定を載せていきます。サーバレスに関しては個人的に興味があるとのと、次の案件で用いるからその予習になります。自身も初めてということもあり、表現がわかりにくいところもあるかもしれません。その場合は容赦無く、コメントで指摘していただければ幸いです。
※サーバレスに関してよくわからない方は、前回の記事をご覧いただければと思います。

# DynamoDBってなぁに？
簡単に言ってしまうと、AWSがマネージドサービスとして提供しているNoSQL(非リレーショナル)データベースになります。「値」とそれを取得するための「キー」だけを格納するというシンプルな機能を持った「Key-Valueストア」です。

**一般的なユースケース**
・ミリ秒単位のアクセスレイテンシーが求められる
・データの拡張性が求められる

**参考記事**
・[NoSQLとは](https://aws.amazon.com/jp/nosql/)
・[DynamoDBをわかりやすく説明](https://dev.classmethod.jp/cloud/aws/dynamodb-chottowakaru/)

# DynamoDBテーブルの作成
###### DynamoDBダッシュボード＞テーブルの作成＞テーブル名とプライマリキーだけ入力＞作成ボタン
<img width="934" alt="スクリーンショット 2020-01-03 13.32.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/36bf0cc7-abac-204e-3b18-d2241e97919c.png">

###### 項目タブを選択＞項目の作成＞以下のように項目と値を追加
<img width="1191" alt="スクリーンショット 2020-01-03 15.19.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/092d2386-c0b2-9e05-5238-151e04f4357a.png">
<img width="925" alt="スクリーンショット 2020-01-03 15.20.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/4baf86cb-d095-0a53-b9e1-cc669591ee14.png">
###### あとで使うので、DynamoDBテーブルのリソース名をコピー(黒枠部分)しておきます
<img width="935" alt="スクリーンショット 2020-01-03 15.23.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/5fd7f232-998b-e83c-d51c-8164136c4b0e.png">

# IAMでロールの作成
###### IAMダッシュボードのロールを選択＞ロール作成ボタン
<img width="1440" alt="スクリーンショット 2020-01-03 15.40.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/8e3f68ee-732e-1928-9a50-a226cf4cfcd1.png">

###### Lambdaを選択＞次のステップへ
<img width="1095" alt="スクリーンショット 2020-01-03 15.41.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/8b6e50ce-eed3-622c-4768-9493413479da.png">

###### AWSLambdaBasicExecutionRoleにチェック＞次のステップへ
<img width="1011" alt="スクリーンショット 2020-01-03 15.59.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/9b15be84-003c-e901-25b0-541efe6b6ff0.png">

###### タグの追加 (オプション)そのまま＞次のステップへ
<img width="1011" alt="スクリーンショット 2020-01-03 16.02.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/d746b2e4-3890-b5cb-c310-e659d3af1fb7.png">
###### ロール名の入力＞作成ボタン
<img width="992" alt="スクリーンショット 2020-01-03 16.04.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/84607595-7133-111f-3c1b-fcd062aafcb3.png">

# 作成したロールでインラインポリシーの作成
###### ロール一覧から作成したロールを選択＞概要画面でインラインポリシーの作成を選択
<img width="1428" alt="スクリーンショット 2020-01-03 16.09.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/a66a44be-753c-ab72-50c7-b5abf6dbe771.png">
<img width="1145" alt="スクリーンショット 2020-01-03 16.09.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/f4e4dd36-673e-e35b-b9af-df9e4ea78d96.png">

###### サービスをDynamoDBを選択＞２つアクションを追加
**⚠️ 下記ではGetItemとPutItemしか追加されませんが、DeleteItemとUpdateItemとScanも追加します。**
<img width="1197" alt="スクリーンショット 2020-01-03 16.22.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/16ca0f9c-b6c0-ffaf-f765-31287ed52134.png">
###### リソースのARNを指定＞追加
<img width="601" alt="スクリーンショット 2020-01-03 16.27.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/d3d6b7ef-34f8-aa30-caf3-7eedaaa5327d.png">
###### ポリシーの確認＞ポリシー名＞ポリシーの作成
<img width="1247" alt="スクリーンショット 2020-01-03 16.30.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/f0a21f9c-e9ac-0f05-4aa9-5b23d8b66c69.png">
<img width="1225" alt="スクリーンショット 2020-01-03 16.35.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/266fa838-b820-842e-a571-cbac982960ab.png">
<img width="1146" alt="スクリーンショット 2020-01-03 16.35.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43096/3b11f9ed-a378-96da-c822-3a1e00accf10.png">

# 最後に
次回はAPI Gateway(REST API)+Lambda(NodeJS)+DynamoDBの組み合わせで、DynamoDBのテーブルが更新されるようにしていきます。