このモジュールでは、AWS Lambda および Amazon DynamoDB を使用してウェブアプリケーションのリクエストを処理するためのバックエンドプロセスを構築します。最初のモジュールにデプロイしたブラウザ アプリケーションで、ユーザーは 選択した場所にunicorn が送信されるようにリクエストできるようになります。これらのリクエストを実行するために、ブラウザで実行しているJavaScript は、クラウドで実行されているサービスを呼び出す必要があります。

Serverless_Web_App_LP_assets-04

ユーザーが unicorn をリクエストするたびに呼び出される Lambda 関数を実装します。この関数は、フリートから unicorn を選択し、DynamoDB テーブルにリクエストを記録し、次にディスパッチされている unicorn についての詳細によってフロントエンドアプリケーションに応答します。

この関数は、Amazon API Gateway を使用して、ブラウザから呼び出されます。次のモジュールで、その接続を実装します。このモジュールについて、分離して、関数をテストするだけです。

モジュールを完了するための時間:30 分

使用されるサービス:AWS Lambda、Amazon DynamoDB


サーバーレスバックエンドプロセスを作成するには、以下の詳細な手順に従ってください。各ステップの番号をクリックして、セクションを展開してください。

  • ステップ 1.Amazon DynamoDB テーブルを作成する

    Amazon DynamoDB コンソールを使用して、新しい DynamoDB テーブルを作成します。テーブルを Rides という名前にし、文字列型の RideId というパーティションキーを提供します。テーブル名およびパーティションキーでは、大文字と小文字が区別されます。提供された正確な ID を使用していることを確認します。他のすべての設定についてデフォルトを使用します。

    テーブルを作成した後、次のステップで使用するために ARN を書き留めます。


    1. AWS マネジメントコンソールから、 [Services (サービス)] を選択し、次に [Databases (データベース) ] の下で、 [DynamoDB] を選択します。

    2. [Create table (テーブルを作成)] を選択します。

    3. テーブル名として Rides を入力します。 このフィールドでは、大文字と小文字が区別されます。

    4. Partition key (パーティションキー) として [String (文字列)] を選択 します。このフィールドでは、大文字と小文字が区別されます。

    5. [Use default settings (デフォルトの設定を使用)] ボックスにチェックマークを入れ、 [Create (作成)] を選択します。

    6. 新しいテーブルの [Overview (概要) ] セクションの下部にスクロールし、 [ARN] を書き留めてください 。次のセクションでこれを使用します。

  • ステップ 2.Lambda 関数用の IAM ロールを作成する

    各 Lambda 関数には、それに関連付けられたIAM ロールがあります。このロールは、関数が、他のどんなAWSサービスと相互作用することができるかを定義します。このワークショップの目的のために、Lambda 関数に Amazon CloudWatch Logs にログを書く許可を与え、また DynamoDB テーブルにアイテムを書くアクセス許可を与える IAM ロールを作成する必要があります。

    IAM コンソールを使用して、新しいロールを作成します。それに WildRydesLambda という名前を付け、ロールタイプとして [AWS Lambda] を選択します。Amazon CloudWatch Logs に書き込む許可をユーザーの関数に与え、DynamoDB テーブルに項目を入力するポリシーを追加する必要があります。

    このロールに AWSLambdaBasicExecutionRole という管理ポリシーをアタッチし、必要な CloudWatch Logs のアクセス許可を付与します。また、前のセクションで作成したテーブルのために ddb:PutItem アクションを可能にする、ロールのカスタムメイドのインラインポリシーを作成します。


    1. AWS マネジメントコンソールから、 [Services (サービス)] をクリックし、次にセキュリティ、アイデンティティ、およびコンプライアンスのセクションで [IAM] を選択します。

    2. 左のナビゲーションバーで [Roles (ロール)] を選択し、続いて [Create New Role (新しいロールを作成)] を選択します。

    3. ロールタイプとして [AWS Lambda] を選択します。

      注意:ロールタイプを選択すると、AWS サービスが、ユーザーの代わりにこのロールを引き受けることができるロールの信頼ポリシーが自動的に作成されます。CLI、AWS CloudFormation または別のメカニズムを使用してこのロールを作成する場合は、直接信頼ポリシーを指定するようにします。

    4. [Filter (フィルター)] テキストボックスにAWSLambdaBasicExecutionRoleと入力し、そのロールの隣にあるチェックボックスをオンにします。

    5. [Next Step (次のステップ)] を選択します。

    6. [Role Name (ロール名)] としてWildRydesLambdaと入力します。

    7. [Create Role (ロールを作成)] を選択します。

    8. [Roles (ロール) ] ページのフィルターボックスに WildRydesLambda と入力し、先ほど作成したロールを選択します。

    9. [Permissions (許可) ] タブで、 [Inline Policies (インラインポリシー)] セクションを展開し、 [click here (ここをクリック)] リンクを選択して、新しいインラインポリシーを作成します。

    10. [Policy Generator (ポリシージェネレーター)] が選択されていることを確認し、[Select (選択)] を選択します。

    11. [AWS Service] ドロップダウンから [Amazon DynamoDB] を選択します。

    12. [Actions (アクション) ] リストから [PutItem (アイテムを置く)] を選択します。

    13. [Amazon Resource Name (ARN) (Amazon リソースネーム (ARN))] フィールドに、前のセクションで作成したテーブルのARN を貼り付けます。

    14. [Add Statement (ステートメントを追加)] を選択します。

    15. [Next Step (次のステップ)]、次いで [Apply Policy (ポリシーを適用する)] を選択します。

  • ステップ 3.リクエストを処理するために Lambda 関数を作成する

    AWS Lambda は、HTTP リクエストなどのイベントへの応答で、ユーザーのコードを実行します。このステップでは、unicorn をディスパッチするためにウェブアプリケーションからAPI リクエストを処理する主要な関数を構築します。次のモジュールでは、ユーザーのブラウザから呼び出すことができる HTTP エンドポイントを公開する RESTful API を作成するために、Amazon API Gateway を使用します。ここでは、次に、ウェブアプリケーションのために完全に機能するバックエンドを作成するために、APIにこのステップで作成した Lambda 関数を接続します。

    AWS Lambda コンソールを使用して、API リクエストを処理する RequestUnicorn という名前の新しい Lambda 関数を作成します。ファンクションコードのために、 提供された requestUnicorn.js の実装例を使用します。そのファイルから、AWS Lambda コンソールのエディタにコピーアンドペーストするだけです。

    前のセクションで作成した WildRydesLambda IAM ロールを使用するよう関数が設定されていることを確認します。


    1. [Services (サービス)] を選択し、次にコンピューティングセクションで [Lambda] を選択 します。

    2. [Create function (関数を作成)] を選択します。

    3. [Author from scratch (スクラッチからの作成者)] を選択します。

    4.  [Name (名前)] フィールドに RequestUnicorn と入力します。

    5. [Existing Role (既存のロール) ] ドロップダウンでWildRydesLambdaを選択します。

    6. [Create function (関数の作成)] を選択します。

    7. requestUnicorn.js からコードをコピーして、コード入力エリアに貼り付けます。

    8. [Runtime (ランタイム)] の下で、[Node.js 6.10] が選択されていることを確認します。

    9. [Handler (ハンドラー)] フィールドで index.handler をデフォルトのままにします。

  • ステップ 4.実装のテスト

    このモジュールのために、AWS Lambda コンソールを使用して構築した関数をテストします。次のモジュールに、最初のモジュールにデプロイしたブラウザベースのアプリケーションから関数を呼び出せるように、API GatewayによるREST APIを追加します。


    1. [Select a test event (テストイベントを選択)] ドロップダウンを選択し、次に [Configure test event (テストイベントを構成)] を選択します。

    2. 以下のテストイベントをエディタにコピーアンドペーストします。

    {
        "path": "/ride",
        "httpMethod": "POST",
        "headers": {
            "Accept": "*/*",
            "Authorization": "eyJraWQiOiJLTzRVMWZs",
            "content-type": "application/json; charset=UTF-8"
        },
        "queryStringParameters": null,
        "pathParameters": null,
        "requestContext": {
            "authorizer": {
                "claims": {
                    "cognito:username": "the_username"
                }
            }
        },
        "body": "{\"PickupLocation\":{\"Latitude\":47.6174755835663,\"Longitude\":-122.28837066650185}}"
    }
    1. イベント名を入力し、[Create (作成)] を選択し、次に [test (テスト)] を選択します。

    2. 実行が成功したこと、および関数の結果が次のようになることを確認します。

    {
        "statusCode": 201,
        "body": "{\"RideId\":\"SvLnijIAtg6inAFUBRT+Fg==\",\"Unicorn\":{\"Name\":\"Rocinante\",\"Color\":\"Yellow\",\"Gender\":\"Female\"},\"Eta\":\"30 seconds\"}",
        "headers": {
            "Access-Control-Allow-Origin": "*"
        }
    }