AWS の開始方法

基本的なウェブアプリケーションを構築する

ウェブアプリケーションをデプロイし、API やデータベースとの対話性を追加する

モジュール 4: データテーブルを作成する

このモジュールでは、DynamoDB テーブルを作成し、Lambda 関数がデータを格納できるようにします。

はじめに

このモジュールでは、Amazon DynamoDB を使用してデータを永続化するためのテーブルを作成します。DynamoDB は Key-Value データベースサービスであるため、データのスキーマを作成する必要はありません。あらゆる規模で一貫したパフォーマンスを発揮し、使用時に管理するサーバーはありません。

さらに、AWS Identity and Access Management (IAM) サービスを使用して、相互にやり取りするために必要なアクセス許可をサービスに安全に付与します。具体的には、モジュール 2 で作成した Lambda 関数が、IAM ポリシーを使用して、新しく作成された DynamoDB テーブルに書き込むことを許可します。これを行うには、Lambda 関数から AWS SDK (Python、JavaScript、または Java) を使用します。

学習内容

  • AWS マネジメントコンソールで DynamoDB テーブルを作成する
  • IAM でロールを作成し、アクセス許可を管理する
  • AWS SDK (Python、JavaScript、または Java) を使用して DynamoDB テーブルに書き込む

主要な概念

データの永続化 プログラムの実行とは無関係に将来アクセスできるようにデータを保存します。

非リレーショナルデータベース 非リレーショナルデータベースは、行と列の表形式スキーマを使用しません。代わりに、格納されるデータの種類の特定の要件に合わせて最適化されたストレージモデルを使用します。

Key-Value データベース キー値のペアのコレクションとしてデータを格納する非リレーショナルデータベースの一種。ここでキーは、一意の識別子として機能します。

プライマリキー DynamoDB テーブル内の各データを識別する値。この値は、テーブルを分割してスケーラブルにするのにも役立ちます。

スキーマ データベースの構築方法の青写真として機能するデータの組織。

AWS SDK SDK は「ソフトウェア開発キット」を意味します。 AWS SDK は、一連のツール、ライブラリ、ドキュメント、コードサンプル、プロセス、およびガイドを提供し、開発者が特定のプラットフォームでソフトウェアアプリケーションを作成できるようにします。

IAM ポリシー エンティティ (サービス、ユーザー、グループなど) がアクセスできる AWS リソースを定義したドキュメント。

 所要時間

10 分

 使用するサービス

実装

  • DynamoDB テーブルを作成する
    1. Amazon DynamoDB コンソールにログインします。
    2. 必ず、関数を作成しているリージョンをメモしてください。これは、ページの最上部、アカウント名の横にあります。
    3. ブルーの [テーブルの作成] ボタンをクリックします。
    4. [テーブル名] の横に、HelloWorldDatabase と入力します。
    5. [プライマリキー] フィールドに、ID と入力します。
    6. ブルーの [作成] ボタンをクリックします。
    7. 右側のパネルからテーブルの「Amazon リソースネーム (ARN) 」をコピーします (後でこのモジュールで必要になります)。
  • IAM ポリシーを作成して Lambda 関数に追加する
    1. これでテーブルができたので、データを書き込めるように Lambda 関数を編集しましょう。新しいブラウザウィンドウで、AWS Lambda コンソールを開きます。
    2. モジュール 2 で作成した関数をクリックします (ここで紹介した例を使用している場合、「HelloWorldFunction」と呼ばれます)。
    3. DynamoDB サービスを使用できるように関数にアクセス許可を追加します。このために、AWS Identity and Access Management (IAM) を使用します。
    4. [アクセス許可] タブをクリックします。
    5. [実行ロール] ボックスで、ロールをクリックします。新しいブラウザタブが開きます。
    6. [アクセス許可ポリシー] ボックスの右側にある [インラインポリシーの追加] をクリックします。
    7. [JSON] タブをクリックします。
    8. テキスト領域に次のポリシーを貼り付けます。その際、15 行目[リソース] フィールドのテーブルの ARN を置き換えることに注意してください
    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem"
            ],
            "Resource": "YOUR-TABLE-ARN"
        }
        ]
    }

    9.このポリシーにより、Lambda 関数はアイテムを読み取り、編集、または削除できますが、作成したテーブルでのみそれを実行できるように制限されます。

    10.ブルーの [ポリシーの確認] ボタンをクリックします。

    11.[名前] の横に、「HelloWorldDynamoPolicy」と入力します。

    12.ブルー の [ポリシーの作成] ボタンをクリックします。

    13.これで、このブラウザータブを閉じて、Lambda 関数のタブに戻ることができます。


  • Lambda 関数を変更して DynamoDB テーブルに書き込む
    • Python
    • JavaScript
    • Java
    • Python
      1. [設定] タブをクリックします。
      2. 関数のコードを次のように置き換えます。
      # import the json utility package since we will be working with a JSON object
      import json
      # import the AWS SDK (for Python the package name is boto3)
      import boto3
      # import two packages to help us with dates and date formatting
      from time import gmtime, strftime
      
      # create a DynamoDB object using the AWS SDK
      dynamodb = boto3.resource('dynamodb')
      # use the DynamoDB object to select our table
      table = dynamodb.Table('HelloWorldDatabase')
      # store the current time in a human readable format in a variable
      now = strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
      
      # define the handler function that the Lambda service will use as an entry point
      def lambda_handler(event, context):
      # extract values from the event object we got from the Lambda service and store in a variable
          name = event['firstName'] +' '+ event['lastName']
      # write name and time to the DynamoDB table using the object we instantiated and save response in a variable
          response = table.put_item(
              Item={
                  'ID': name,
                  'LatestGreetingTime':now
                  })
      # return a properly formatted JSON object
          return {
              'statusCode': 200,
              'body': json.dumps('Hello from Lambda, ' + name)
          }

      3.ページの上部にあるオレンジの [保存] ボタンをクリックします。

    • JavaScript
      1. [設定] タブをクリックします。
      2. 関数のコードを次のように置き換えます。
      // Include the AWS SDK module
      const AWS = require('aws-sdk');
      // Instantiate a DynamoDB document client with the SDK
      let dynamodb = new AWS.DynamoDB.DocumentClient();
      // Use built-in module to get current date & time
      let date = new Date();
      // Store date and time in human-readable format in a variable
      let now = date.toISOString();
      // Define handler function, the entry point to our code for the Lambda service
      // We receive the object that triggers the function as a parameter
      exports.handler = async (event) => {
          // Extract values from event and format as strings
          let name = JSON.stringify(`Hello from Lambda, ${event.firstName} ${event.lastName}`);
          // Create JSON object with parameters for DynamoDB and store in a variable
          let params = {
              TableName:'HelloWorldDatabase',
              Item: {
                  'ID': name,
                  'LatestGreetingTime': now
              }
          };
          // Using await, make sure object writes to DynamoDB table before continuing execution
          await dynamodb.put(params).promise();
          // Create a JSON object with our response and store it in a constant
          const response = {
              statusCode: 200,
              body: name
          };
          // Return the response constant
          return response;
      };

      3.ページの上部にあるオレンジの [保存] ボタンをクリックします。

    • Java
      1. [設定] タブをクリックします。
      2. [関数コード] に移動し、次の JAR ファイルアップロードします。(このチュートリアルでは、デプロイパッケージの作成はスキップします)。
      3. 「ハンドラー」を com.example.app.SavePersonHandler::handleRequest更新します。
      4. ページの上部にあるオレンジの [保存] ボタンをクリックします。
  • 変更をテストする
    1. の [テスト] ボタンをクリックします。
    2. グリーンの背景の「実行結果: 成功」メッセージが表示されます。
    3. 新しいブラウザタブで、DynamoDB コンソールを開きます。
    4. 左側のナビゲーションバーの [テーブル] をクリックします。
    5. このモジュールの前半で作成した HelloWorldDatabaseクリックします。
    6. 右側の [アイテム] タブをクリックします。
    7. テストイベントに一致するアイテムがここに表示されます。ここで紹介した例を使用している場合、アイテム ID は「Ada Lovelace」になります。
    8. Lambda 関数が実行されるたびに、DynamoDB テーブルが更新されます。同じ名前を使用すると、タイムスタンプのみが変更されます。

アプリケーションのアーキテクチャ

モジュール 4 が完了したところで、アーキテクチャの現況を見てみましょう。

full-stack amplify console arch diagram module 4

このモジュールに、DynamoDB (ストレージ用) と IAM (アクセス許可を安全に管理するため) の 2 つのサービスを追加しました。どちらも Lambda 関数に接続されているため、データベースに書き込むことができます。最後のステップは、コードをクライアントに追加して、API Gateway を呼び出すことです。

このモジュールは役に立ちましたか?

ありがとうございます
このチュートリアルで良かった点をお聞かせください。
閉じる
ご期待に添えず申し訳ありません
古い説明、わかりにくい説明、間違った説明はございませんでしたか? このチュートリアルの改善のために、ぜひフィードバックをお寄せください。
閉じる

ウェブアプリケーションに対話性を追加する