継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

サーバーレスシングルページアプリケーション 5章

タダです。

今回はサーバーレスシングルページアプリケーション5章で勉強したことをまとめていきます。 www.oreilly.co.jp

章立ては以下のようになっています。

  • 1章 シンプルにはじめる
  • 2章 ハッシュイベントによるビューのルーティング
  • 3章 シングルページアプリケーションに必要なもの
  • 4章 Amazon CognitoによるIdentity as a Service
  • 5章 DynamoDBにデータを格納する
  • 6章 Lambdaを使って(マイクロ)サービスを作る
  • 7章 サーバーレスのセキュリティ
  • 8章 スケールアップする

5章のまとめ

  • DynamoDBのプライマリーキーが1次元の場合、ハッシュキーという
    • プライマリーキーが2次元の場合、レンジキーという
    • DynamoDBはドキュメントデータベースとしても使える
      • アイテムのサイズは最大400KBまで
      • JSONドキュメントに使える
      • 属性には、数値、文字列、バイナリ、ブーリアンが使える
    • DynamoDBは、書き込んでもすぐに書き込んだ値が得られない場合もある(結果整合性)
      • 読み込みには2つの方法で、結果整合性、強い整合性がある
      • データの読み込みの整合性は、通常1秒以内に保たれるため、人げとのやり取りには結果整合性のある読み込みで、プログラム的には強い整合性が必要性のある読み込みを使うべき
  • DynamoDBからデータを取得するためには、クエリとスキャンの2つがある
    • テーブルの大量のデータを含んでいるのにスキャンをかけるとすごくじかんがあかかるので、代わりにセカンダリインデックスを使う
      • グローバルセカンダリインデックスは、テーブルのデータのコピーを含んでいるが高速にアクセスできるように別のプライマリキーでインデックスが貼られる
      • ローカルセカンダリインデックスは、テーブルと同じハッシュキーを使うがアイテムの属性に基づいて追加のインデックスを貼る
  • テーブル作成時にはローカルセカンダリインデックスしか作成できないが、必要があればグローバルセカンダリインデックスを追加できる
    • 今回は、スクリプトで実行してテーブルを作る ./sspa create_table conf/dynamodb/tables/learnjs cognitoのアイデンティティプール名 Waiting for table creation...........done!
  • DynamoDBのテーブルへのアクセス制御はきめ細かな制御が可能なため必要な制御ルールが何かを検討する
    • 今回は、ユーザーはlearnjsテーブルにドキュメントを作成できる必要あり
    • テーブルには、ユーザーが入力した正しい解答を書き込む
    • ユーザーは自分で作成したドキュメントを読めて自分のドキュメントだけを更新できる必要があり
  • DynamoDB二オブジェクトを書き込むとき、DyanmoDB.DocumentClientAPIを使うことでDynamoDBをドキュメントデータベースのように扱える
    • オブジェクトの属性値は配列のような複合値になり、アイテムごとに属性が違っていてもよい
  • Defferedオブジェクトをつくって、sendDbRequest関数から返すことで他の非同期リクエストとつなげることができる
    • saveAnswer関数で、Cognito IDなどの必要なフィールドを含むitemオブジェクトを作る(Cognito IDを取得してIDとユーザーが一致しなければ弾く)
    • アイテムを作成後、DocumentClient.putを実行し、sendDbRequestをに渡す
    • checkAnswerClickハンドラで関数を扱う

次は6章ではLambdaを使っていきます。