AWSDynamoDBとLambdaを使用してサーバーレスログインサービスを構築する

それは2022年であり、サーバーレスはもはや技術オタクによって投げ出される派手な用語ではありません。ますます多くの人々が、それが高速で高度にスケーラブルなアプリケーションを構築するための道であることに気づいています。

この記事では、AWSで人気のある2つのサービスを使用して、サーバーレスログインシステムをゼロから構築することに焦点を当てます。

タイトルを読んだので、これら2つをすでに経験している場合は、そうではないと思いますが、次のチュートリアルは適切ではない可能性があります。開始する前に、このプロジェクトのAWSアカウントが必要です。ここで、アカウントにサインアップできます。これから構築するシステムを見てみましょう。

ご覧のとおり、DynamoDBに接続するラムダにアクセスするためにAPIゲートウェイを使用する基本的なログインサービスを構築します。プロジェクトには3つのエンドポイントがあります。最初のエンドポイントは、新しいユーザーを登録し、データベースに詳細を保存するためのものです。2つ目は、ユーザーログイン用で、ユーザーにJWTトークンを発行します。そして3つ目は、トークンが有効であることを確認することです。始めましょう。

1.DynamoDBテーブルを作成する

これから行う最初のステップは、ユーザーデータを保存するDynamoDBテーブルを作成することです。

前述のように、DynamoDBはNoSQLデータベースであり、データは主に主キーを使用して保存およびクエリされます。主キーはパーティションキーになり、場合によってはパーティションキーとソートキーの組み合わせになります。

DynamoDBは、パーティションキーの値を、データが保存されるパーティションを決定する内部ハッシュ関数への入力として使用します。この記事でカバーするには多すぎるので、ここでキーの詳細を読むことができます。

テーブルを作成するには、AWSコンソールに移動し、上部の検索ボックスでDynamoDBを検索して、検索結果から選択します。DynamoDBダッシュボードが表示されたら、[テーブルの作成]オプション(1.1)をクリックします。

1.1

これにより、テーブル名や主キー(1.2)などのテーブルの詳細を入力するように求めるページが表示されます。

ここでは、テーブルにuser-tableという名前を付け、usernameをパーティションキーとして定義します。これは、ユーザーの検索に使用するものです。ソートキーはオプションであることがわかります。単純なアプリケーションでは必要ないため、空白のままにします。

1.2

残りの設定はデフォルト値のままにして、ページの最後にある[テーブルの作成]をクリックできます。これにより、すぐにテーブルが作成されます。DBの準備ができたので、次のステップに進みましょう。

2.IAMロールの作成

IAMロールを作成するには、上部の検索ボックスでIAMを検索し、ダッシュボードが表示されたら、左側のパネル(2.1)から[ロール]に移動して新しいロールを作成し、[ロールの作成]をクリックします。

2.1

ステップ1では、一般的なユースケース(2.2)からLambdaを選択できます。これは、私たちが自分の役割を使用するためのものであり、次のステップに進みます。

2.2

次のステップでは、役割の権限を追加する必要があります。このプロジェクトでは、2つの権限を追加します。

1つはDynamoDB用で、もう1つはCloudWatch用です。それらを追加するには、検索ボックスでDynamo DBを検索し、リスト(2.3)からDynamoDBフルアクセス許可を選択します。

2.3

次に、CloudWatchフルアクセスを検索して追加します。CloudWatchを使用して、ラムダ関数からのログを確認します。

次のステップで、作成するロールに名前を付け、ページの最後にある[ロールの作成]をクリックします。

これにより、ラムダに接続するIAMロールが作成され、DynamoDBおよびCloudWatchにシームレスに接続できるようになります。次のステップに進みましょう。

 

3.ラムダを作成します

次に、APIのバックエンドとして機能するラムダを作成しましょう。上部の検索ボックスでラムダを検索し、ラムダダッシュボードが表示されたら[役割の作成]をクリックします。

次のステップでは、ラムダサービスに名前を付け、デフォルトのランタイムをNode.jsのままにします。これは、このプロジェクトで使用するものです。

PythonまたはRubyを使用してビルドしている場合は、ここで変更できます。次に、[デフォルトの実行ロールのタイトルを変更]をクリックし、[既存のロールを使用する]を選択します。

次に、前の手順で作成した役割を、そのすぐ下のドロップダウンから選択します。これらすべてが(3.1)に入力されたら、create functionをクリックすると、すぐにラムダが作成されます。

3.1

 

4.APIゲートウェイを作成します

次に、アプリケーションがサービスにアクセスするための「玄関ドア」として機能するAPIゲートウェイを作成します。API Gatewayを検索し、ダッシュボードページで[APIの作成]をクリックします。

次のステップでは、作成するAPIのタイプを選択します。表示されたオプションのリストからRESTAPIを選択し、build(4.1)をクリックしてください。

4.1

次のページで、ゲートウェイの名前を指定します。残りのデフォルトはそのままにして、[APIの作成(4.2)]をクリックします。

4.2

次に、アプリケーションで使用するエンドポイントを作成しましょう。まず、アクションをクリックして、このAPIでリソースを作成します(4.3)

4.3

リソース名を指定し、そのパスを定義します。ここでは、ログイン用に1つ作成するので、パスはになり/loginます。任意のパスを定義できます。フロントエンドでのCORSの問題を回避するために、必ず[ APIゲートウェイCORSを有効にする]をクリックし、[リソースの作成](4.4)をクリックしてください。

4.4

次に、このリソースの下にメソッドを作成しましょう。最初にリソースを選択し、アクション(4.5)からメソッドの作成をクリックします

4.5

メソッドのリストから、投稿(4.6)を選択します。これはAPIエンドポイントに使用するものであるため、その横にあるチェックマークをクリックします。

4.6

セットアップでは、Use Lambda proxy Integrationをチェックして、リクエストがラムダ(4.7)にプロキシされていることを確認してください。また、下のドロップダウンから以前に作成したものと同じラムダを選択します。残りのオプションはデフォルトのままにして、[保存]をクリックできます。

4.7

同じ手順に従って、3つのエンドポイントを作成します

  • ログインする
  • 登録
  • 確認。

完了したら、ルートリソースを選択し、アクションのリストから[APIのデプロイ]を選択します。

4.9

展開ステージに名前と説明を付けます。デプロイをクリックすると、APIが数秒でデプロイされます。

4.10

結果のページで、後で使用するために呼び出しURLをコピーします。これがAPIのベースURLになります。

4.11

 

5.バックエンドサービスを作成します

このステップでは、ログインサービスのロジックを含む実際のバックエンドをコーディングします。これをローカルで実行し、後でラムダにデプロイできます。開始するには、VS Codeで新しい空のプロジェクトを作成し、npminitを実行してNodeJSプロジェクトを 初期化します。最終的なフォルダ構造は次のようになります。

次に、index.jsをラムダ関数のハンドラーとして構成しましょう。index.jsを開き、次のコードを追加します。

const registerPath = "/register";
const loginPath = "/login";
const verifyPath = "/verify";

const registerService = require("./functions/register");

const loginService = require("./functions/login");

const verifyService = require("./functions/verify");

const util = require("./helpers/utils/util");

exports.handler = async (event) => {
  console.log(" Request Event : ", event);
  const { httpMethod, resource } = event;
  const requestBody = JSON.parse(event.body);
  let response;
  switch (true) {
    case httpMethod === "POST" && resource === registerPath:
      response = await registerService.register(requestBody);
      break;
    case httpMethod === "POST" && resource === loginPath:
      response = await loginService.login(requestBody);
      break;
    case httpMethod === "POST" && resource === verifyPath:
      response = await verifyService.verify(requestBody);
      break;
    default:
      response = util.buildResponse(404, "404 Not Found ");
  }
  return response;
};

ご覧のとおり、ハンドラーを作成しています。ハンドラーは、APIゲートウェイで定義したパスに対してリクエストメソッドを照合し、対応するサービスを呼び出します。個別のサービスを作成します-

  • / register —リクエスト本文から名前、ユーザー名、パスワードを取得し、DBに新しいユーザーを作成します。成功するとユーザー名を返します。
  • ログイン—リクエスト本文からユーザー名とパスワードを取得し、既存のユーザーのDBと照合します。成功するとユーザー名とJWTトークンを返します。
  • verify —リクエスト本文からユーザー名とJWTトークンを取得し、それをデコードしてトークンが有効であることを確認します。成功した場合は、確認済みのメッセージとユーザー情報を返します。

これらのメソッドのコードは、ここgithubにあります。

プロジェクトの重要な部分は、DynamoDBテーブルに接続して新しいユーザーを作成し、ログイン時にユーザーのクレデンシャルを比較するDBヘルパーです。このために、フォルダーuser.js内にヘルパーを作成します。dbHelper

このヘルパーには2つのメソッドが含まれます。1つはユーザー名である主キーを比較してユーザーが存在するかどうかを確認するためのメソッドです。そして、同じ主キーを使用して新しいユーザーを保存する2番目の方法。

// Load the AWS SDK for Node.js
const AWS = require("aws-sdk");

// Set the region
AWS.config.update({ region: "us-east-1" });

// Create DynamoDB document client
const dynamoDB = new AWS.DynamoDB.DocumentClient({ apiVersion: "2012-08-10" });

const userTable = "user-table";

exports.getUser = async (username) => {
  const params = {
    TableName: userTable,
    Key: {
      username: username,
    },
  };
  return await dynamoDB
    .get(params)
    .promise()
    .then(
      (response) => {
        return response.Item;
      },
      (error) => {
        console.log("Error fetching user", error);
      }
    );
};

exports.saveUser = async (user) => {
  const params = {
    TableName: userTable,
    Key: {
      username: user.username,
    },
    Item: user,
  };

  return await dynamoDB
    .put(params)
    .promise()
    .then(
      (response) => {
        return true;
      },
      (error) => {
        console.log("Error saving user", error);
      }
    );
};

またauth、ログインおよび検証中にJWTトークンを生成および検証するためのヘルパーを作成します。npmライブラリを使用してjsonwebtoken、定義したJWTシークレットを使用してアクセストークンを生成しています。トークンの有効期限は今のところ1時間に設定しますが、必要に応じて変更できます。

const jwt = require("jsonwebtoken");

exports.generateToken = (userInfo) => {
  if (!userInfo) {
    return null;
  }

  return jwt.sign(userInfo, process.env.JWT_SECRET, {
    expiresIn: "1h",
  });
};

exports.verifyToken = (username, token) => {
  return jwt.verify(token, process.env.JWT_SECRET, (error, response) => {
    if (error) {
      return {
        verified: false,
        message: "Invalid token",
        error: error,
      };
    }

    if (response.username !== username) {
      return {
        verified: false,
        message: "Invalid user",
      };
    }

    return {
      verified: true,
      message: "verified",
    };
  });
};

ここで注意すべきことの1つは、JWTトークンのエンコードに環境変数を使用していることですJWT_SECRET。これは後で定義します。このプロジェクトでは3つのnpmパッケージを使用しました-

  • aws-sdk —DynamoDBに接続するため。
  • bcryptjs —ユーザーのパスワードをDBに保存する前に暗号化するため。
  • jsonwebtoken—JWTトークンを生成および検証します。

プロジェクトの完全なコードは、このGitHubリポジトリにあります。

 

6.コードをラムダにデプロイします

プロジェクトをラムダにアップロードする前に、npm i使用しているパッケージをインストールするために実行したことを確認してください。CLI、VS Code Extension、サーバーレスなど、コードラムダをアップロードする方法は複数あります。ここでは、コンソールから手動でコードをアップロードします。npmパッケージをインストールした後にコマンドを実行してzip -r ./archive.zip *、プロジェクトをラムダ用にzip形式で圧縮します。

それでは、AWSコンソールのラムダに戻りましょう。ここでは、ラムダのコードタブの下にあるオプション(6.1)からのアップロードを見つけることができます。それをクリックして、作成したプロジェクトからzipファイルをアップロードします。

これにより、コードがアップロードされ、すぐにラムダがデプロイされます。既存のラムダの新しいバージョンをアップロードする場合、アプリから呼び出すときにその変更が反映されるまでに1分かかる場合があることに注意してください。

6.1zipをラムダにアップロードする

 

7.秘密鍵を構成します

JWT_SECRET手順6で覚えている場合は、JWTトークンをエンコードするための環境変数を定義する必要があります。Lambdaでこの環境変数を構成しましょう。[構成]タブに移動し、左側のメニューから[環境変数]を選択します。

[編集]をクリックして、コード(7.1)で使用したのと同じ名前の新しい環境変数を作成します。秘密鍵を定義することはできますが、これを他の人と共有したり、コードに鍵の値を保持したりしないでください。このキーを保存すると、APIの準備が整います。

7.1

 

8.Postmanからのテスト

次に、郵便配達員からAPIを1つずつ取得し、すべてがスムーズに実行されているかどうかを確認します。手順4の最後にコピーしたAPIURLを使用するか、APIゲートウェイに移動してURL(4.11)をコピーできます。

まず、registerAPIを使用して新しいユーザーを作成しましょう。ご覧のとおり、名前、ユーザー名、パスワードを入力として渡し、成功すると作成されたユーザー名を返します(8.1)

8.1

また、ユーザーがDynamoDBテーブルを作成していることを確認しましょう。コンソールからテーブルに移動し、テーブルアイテムの探索(8.2)をクリックします。スキャンを実行すると、ユーザーエントリがテーブルに作成されていることがわかります。

8.2

同じクレデンシャルを使用してログインAPIを試して、アクセストークン(8.3)を生成できます。

8.3

最後に、verify APIを使用して、ユーザーに対してトークンを検証します(8.4)。

8.4

ここで完全なpostmanコレクションをインポートできますが、APIURLでベースURLを更新することを忘れないでください。

このストーリーは、もともとhttps://betterprogramming.pub/build-a-serverless-login-service-using-aws-dynamodb-and-lambda-d2ee9bc2e60eで公開されました

#serverless #token #aws #dynamodb #lambda 

What is GEEK

Buddha Community

AWSDynamoDBとLambdaを使用してサーバーレスログインサービスを構築する

AWSDynamoDBとLambdaを使用してサーバーレスログインサービスを構築する

それは2022年であり、サーバーレスはもはや技術オタクによって投げ出される派手な用語ではありません。ますます多くの人々が、それが高速で高度にスケーラブルなアプリケーションを構築するための道であることに気づいています。

この記事では、AWSで人気のある2つのサービスを使用して、サーバーレスログインシステムをゼロから構築することに焦点を当てます。

タイトルを読んだので、これら2つをすでに経験している場合は、そうではないと思いますが、次のチュートリアルは適切ではない可能性があります。開始する前に、このプロジェクトのAWSアカウントが必要です。ここで、アカウントにサインアップできます。これから構築するシステムを見てみましょう。

ご覧のとおり、DynamoDBに接続するラムダにアクセスするためにAPIゲートウェイを使用する基本的なログインサービスを構築します。プロジェクトには3つのエンドポイントがあります。最初のエンドポイントは、新しいユーザーを登録し、データベースに詳細を保存するためのものです。2つ目は、ユーザーログイン用で、ユーザーにJWTトークンを発行します。そして3つ目は、トークンが有効であることを確認することです。始めましょう。

1.DynamoDBテーブルを作成する

これから行う最初のステップは、ユーザーデータを保存するDynamoDBテーブルを作成することです。

前述のように、DynamoDBはNoSQLデータベースであり、データは主に主キーを使用して保存およびクエリされます。主キーはパーティションキーになり、場合によってはパーティションキーとソートキーの組み合わせになります。

DynamoDBは、パーティションキーの値を、データが保存されるパーティションを決定する内部ハッシュ関数への入力として使用します。この記事でカバーするには多すぎるので、ここでキーの詳細を読むことができます。

テーブルを作成するには、AWSコンソールに移動し、上部の検索ボックスでDynamoDBを検索して、検索結果から選択します。DynamoDBダッシュボードが表示されたら、[テーブルの作成]オプション(1.1)をクリックします。

1.1

これにより、テーブル名や主キー(1.2)などのテーブルの詳細を入力するように求めるページが表示されます。

ここでは、テーブルにuser-tableという名前を付け、usernameをパーティションキーとして定義します。これは、ユーザーの検索に使用するものです。ソートキーはオプションであることがわかります。単純なアプリケーションでは必要ないため、空白のままにします。

1.2

残りの設定はデフォルト値のままにして、ページの最後にある[テーブルの作成]をクリックできます。これにより、すぐにテーブルが作成されます。DBの準備ができたので、次のステップに進みましょう。

2.IAMロールの作成

IAMロールを作成するには、上部の検索ボックスでIAMを検索し、ダッシュボードが表示されたら、左側のパネル(2.1)から[ロール]に移動して新しいロールを作成し、[ロールの作成]をクリックします。

2.1

ステップ1では、一般的なユースケース(2.2)からLambdaを選択できます。これは、私たちが自分の役割を使用するためのものであり、次のステップに進みます。

2.2

次のステップでは、役割の権限を追加する必要があります。このプロジェクトでは、2つの権限を追加します。

1つはDynamoDB用で、もう1つはCloudWatch用です。それらを追加するには、検索ボックスでDynamo DBを検索し、リスト(2.3)からDynamoDBフルアクセス許可を選択します。

2.3

次に、CloudWatchフルアクセスを検索して追加します。CloudWatchを使用して、ラムダ関数からのログを確認します。

次のステップで、作成するロールに名前を付け、ページの最後にある[ロールの作成]をクリックします。

これにより、ラムダに接続するIAMロールが作成され、DynamoDBおよびCloudWatchにシームレスに接続できるようになります。次のステップに進みましょう。

 

3.ラムダを作成します

次に、APIのバックエンドとして機能するラムダを作成しましょう。上部の検索ボックスでラムダを検索し、ラムダダッシュボードが表示されたら[役割の作成]をクリックします。

次のステップでは、ラムダサービスに名前を付け、デフォルトのランタイムをNode.jsのままにします。これは、このプロジェクトで使用するものです。

PythonまたはRubyを使用してビルドしている場合は、ここで変更できます。次に、[デフォルトの実行ロールのタイトルを変更]をクリックし、[既存のロールを使用する]を選択します。

次に、前の手順で作成した役割を、そのすぐ下のドロップダウンから選択します。これらすべてが(3.1)に入力されたら、create functionをクリックすると、すぐにラムダが作成されます。

3.1

 

4.APIゲートウェイを作成します

次に、アプリケーションがサービスにアクセスするための「玄関ドア」として機能するAPIゲートウェイを作成します。API Gatewayを検索し、ダッシュボードページで[APIの作成]をクリックします。

次のステップでは、作成するAPIのタイプを選択します。表示されたオプションのリストからRESTAPIを選択し、build(4.1)をクリックしてください。

4.1

次のページで、ゲートウェイの名前を指定します。残りのデフォルトはそのままにして、[APIの作成(4.2)]をクリックします。

4.2

次に、アプリケーションで使用するエンドポイントを作成しましょう。まず、アクションをクリックして、このAPIでリソースを作成します(4.3)

4.3

リソース名を指定し、そのパスを定義します。ここでは、ログイン用に1つ作成するので、パスはになり/loginます。任意のパスを定義できます。フロントエンドでのCORSの問題を回避するために、必ず[ APIゲートウェイCORSを有効にする]をクリックし、[リソースの作成](4.4)をクリックしてください。

4.4

次に、このリソースの下にメソッドを作成しましょう。最初にリソースを選択し、アクション(4.5)からメソッドの作成をクリックします

4.5

メソッドのリストから、投稿(4.6)を選択します。これはAPIエンドポイントに使用するものであるため、その横にあるチェックマークをクリックします。

4.6

セットアップでは、Use Lambda proxy Integrationをチェックして、リクエストがラムダ(4.7)にプロキシされていることを確認してください。また、下のドロップダウンから以前に作成したものと同じラムダを選択します。残りのオプションはデフォルトのままにして、[保存]をクリックできます。

4.7

同じ手順に従って、3つのエンドポイントを作成します

  • ログインする
  • 登録
  • 確認。

完了したら、ルートリソースを選択し、アクションのリストから[APIのデプロイ]を選択します。

4.9

展開ステージに名前と説明を付けます。デプロイをクリックすると、APIが数秒でデプロイされます。

4.10

結果のページで、後で使用するために呼び出しURLをコピーします。これがAPIのベースURLになります。

4.11

 

5.バックエンドサービスを作成します

このステップでは、ログインサービスのロジックを含む実際のバックエンドをコーディングします。これをローカルで実行し、後でラムダにデプロイできます。開始するには、VS Codeで新しい空のプロジェクトを作成し、npminitを実行してNodeJSプロジェクトを 初期化します。最終的なフォルダ構造は次のようになります。

次に、index.jsをラムダ関数のハンドラーとして構成しましょう。index.jsを開き、次のコードを追加します。

const registerPath = "/register";
const loginPath = "/login";
const verifyPath = "/verify";

const registerService = require("./functions/register");

const loginService = require("./functions/login");

const verifyService = require("./functions/verify");

const util = require("./helpers/utils/util");

exports.handler = async (event) => {
  console.log(" Request Event : ", event);
  const { httpMethod, resource } = event;
  const requestBody = JSON.parse(event.body);
  let response;
  switch (true) {
    case httpMethod === "POST" && resource === registerPath:
      response = await registerService.register(requestBody);
      break;
    case httpMethod === "POST" && resource === loginPath:
      response = await loginService.login(requestBody);
      break;
    case httpMethod === "POST" && resource === verifyPath:
      response = await verifyService.verify(requestBody);
      break;
    default:
      response = util.buildResponse(404, "404 Not Found ");
  }
  return response;
};

ご覧のとおり、ハンドラーを作成しています。ハンドラーは、APIゲートウェイで定義したパスに対してリクエストメソッドを照合し、対応するサービスを呼び出します。個別のサービスを作成します-

  • / register —リクエスト本文から名前、ユーザー名、パスワードを取得し、DBに新しいユーザーを作成します。成功するとユーザー名を返します。
  • ログイン—リクエスト本文からユーザー名とパスワードを取得し、既存のユーザーのDBと照合します。成功するとユーザー名とJWTトークンを返します。
  • verify —リクエスト本文からユーザー名とJWTトークンを取得し、それをデコードしてトークンが有効であることを確認します。成功した場合は、確認済みのメッセージとユーザー情報を返します。

これらのメソッドのコードは、ここgithubにあります。

プロジェクトの重要な部分は、DynamoDBテーブルに接続して新しいユーザーを作成し、ログイン時にユーザーのクレデンシャルを比較するDBヘルパーです。このために、フォルダーuser.js内にヘルパーを作成します。dbHelper

このヘルパーには2つのメソッドが含まれます。1つはユーザー名である主キーを比較してユーザーが存在するかどうかを確認するためのメソッドです。そして、同じ主キーを使用して新しいユーザーを保存する2番目の方法。

// Load the AWS SDK for Node.js
const AWS = require("aws-sdk");

// Set the region
AWS.config.update({ region: "us-east-1" });

// Create DynamoDB document client
const dynamoDB = new AWS.DynamoDB.DocumentClient({ apiVersion: "2012-08-10" });

const userTable = "user-table";

exports.getUser = async (username) => {
  const params = {
    TableName: userTable,
    Key: {
      username: username,
    },
  };
  return await dynamoDB
    .get(params)
    .promise()
    .then(
      (response) => {
        return response.Item;
      },
      (error) => {
        console.log("Error fetching user", error);
      }
    );
};

exports.saveUser = async (user) => {
  const params = {
    TableName: userTable,
    Key: {
      username: user.username,
    },
    Item: user,
  };

  return await dynamoDB
    .put(params)
    .promise()
    .then(
      (response) => {
        return true;
      },
      (error) => {
        console.log("Error saving user", error);
      }
    );
};

またauth、ログインおよび検証中にJWTトークンを生成および検証するためのヘルパーを作成します。npmライブラリを使用してjsonwebtoken、定義したJWTシークレットを使用してアクセストークンを生成しています。トークンの有効期限は今のところ1時間に設定しますが、必要に応じて変更できます。

const jwt = require("jsonwebtoken");

exports.generateToken = (userInfo) => {
  if (!userInfo) {
    return null;
  }

  return jwt.sign(userInfo, process.env.JWT_SECRET, {
    expiresIn: "1h",
  });
};

exports.verifyToken = (username, token) => {
  return jwt.verify(token, process.env.JWT_SECRET, (error, response) => {
    if (error) {
      return {
        verified: false,
        message: "Invalid token",
        error: error,
      };
    }

    if (response.username !== username) {
      return {
        verified: false,
        message: "Invalid user",
      };
    }

    return {
      verified: true,
      message: "verified",
    };
  });
};

ここで注意すべきことの1つは、JWTトークンのエンコードに環境変数を使用していることですJWT_SECRET。これは後で定義します。このプロジェクトでは3つのnpmパッケージを使用しました-

  • aws-sdk —DynamoDBに接続するため。
  • bcryptjs —ユーザーのパスワードをDBに保存する前に暗号化するため。
  • jsonwebtoken—JWTトークンを生成および検証します。

プロジェクトの完全なコードは、このGitHubリポジトリにあります。

 

6.コードをラムダにデプロイします

プロジェクトをラムダにアップロードする前に、npm i使用しているパッケージをインストールするために実行したことを確認してください。CLI、VS Code Extension、サーバーレスなど、コードラムダをアップロードする方法は複数あります。ここでは、コンソールから手動でコードをアップロードします。npmパッケージをインストールした後にコマンドを実行してzip -r ./archive.zip *、プロジェクトをラムダ用にzip形式で圧縮します。

それでは、AWSコンソールのラムダに戻りましょう。ここでは、ラムダのコードタブの下にあるオプション(6.1)からのアップロードを見つけることができます。それをクリックして、作成したプロジェクトからzipファイルをアップロードします。

これにより、コードがアップロードされ、すぐにラムダがデプロイされます。既存のラムダの新しいバージョンをアップロードする場合、アプリから呼び出すときにその変更が反映されるまでに1分かかる場合があることに注意してください。

6.1zipをラムダにアップロードする

 

7.秘密鍵を構成します

JWT_SECRET手順6で覚えている場合は、JWTトークンをエンコードするための環境変数を定義する必要があります。Lambdaでこの環境変数を構成しましょう。[構成]タブに移動し、左側のメニューから[環境変数]を選択します。

[編集]をクリックして、コード(7.1)で使用したのと同じ名前の新しい環境変数を作成します。秘密鍵を定義することはできますが、これを他の人と共有したり、コードに鍵の値を保持したりしないでください。このキーを保存すると、APIの準備が整います。

7.1

 

8.Postmanからのテスト

次に、郵便配達員からAPIを1つずつ取得し、すべてがスムーズに実行されているかどうかを確認します。手順4の最後にコピーしたAPIURLを使用するか、APIゲートウェイに移動してURL(4.11)をコピーできます。

まず、registerAPIを使用して新しいユーザーを作成しましょう。ご覧のとおり、名前、ユーザー名、パスワードを入力として渡し、成功すると作成されたユーザー名を返します(8.1)

8.1

また、ユーザーがDynamoDBテーブルを作成していることを確認しましょう。コンソールからテーブルに移動し、テーブルアイテムの探索(8.2)をクリックします。スキャンを実行すると、ユーザーエントリがテーブルに作成されていることがわかります。

8.2

同じクレデンシャルを使用してログインAPIを試して、アクセストークン(8.3)を生成できます。

8.3

最後に、verify APIを使用して、ユーザーに対してトークンを検証します(8.4)。

8.4

ここで完全なpostmanコレクションをインポートできますが、APIURLでベースURLを更新することを忘れないでください。

このストーリーは、もともとhttps://betterprogramming.pub/build-a-serverless-login-service-using-aws-dynamodb-and-lambda-d2ee9bc2e60eで公開されました

#serverless #token #aws #dynamodb #lambda