AWSにおける基本Webアプリケーションの導入


今回の実験では、HelloworldをレンダリングするWebアプリケーションを作成します.
実践を通して学ぶ.
1.Webアプリケーションの作成
2.Webアプリケーションをサーバリースバックエンドに接続する
3.APIとデータベースを使用してWebアプリケーションにインタラクティブ機能を追加
私は勉強します.

モジュール1:Webアプリケーションの作成


AWS Amplifコンソールを使用して、Webアプリケーションに静的リソースを導入します.
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>

<body>
    Hello World
</body>
</html>
メモ帳に作成してインデックスします.htmlファイル名で保存および圧縮します.
Amplifyコンソールに入り、Deploy with Git providerを選択します.

次のように設定します.

「パブリッシュ」(Deploy)をクリックするとこの内容が表示され、ドメインへのリンクには「HELLOWLD」が表示されます.

モジュール2:サーバリース関数の作成


このモジュールでは、Webページにインタラクティブな機能を追加するための簡単なPythonコードを作成します.サーバリース関数をAWS Lambdaサービスとして記述します.これは、コンピューティングサービスがオンデマンドで実行するコードです.
AWS Lambdaコンソールにログインし、関数を作成します.

次の関数コードが書かれたコードです.

次のように変更します.
# import the JSON utility package since we will be working with a JSON object
import json
# define the handler function that the Lambda service will use an entry point
def lambda_handler(event, context):
# extract values from the event object we got from the Lambda service
    name = event['firstName'] +' '+ event['lastName']
# return a properly formatted JSON object
    return {
    'statusCode': 200,
    'body': json.dumps('Hello from Lambda, ' + name)
    }
次に、「作成」(Generate)をクリックして作成します.
![]
テストを行うために、任意の設定名の解雇イベントJSONを以下のように変更することもできます.

灰色のテストをクリックします.成功すると、次のようになります.

モジュール3:サーバリース関数をWebアプリケーションに接続する


このモジュールはAmazon APIゲートウェイを使用してRESTful APIを生成し、Webクライアント上でLambda関数を呼び出すことができます.APIゲートウェイは、モジュール1が生成したHTMLクライアントとモジュール2が生成したサーバリースバックエンドとの間の中間層の役割である.
RESTful API RESTとは?
「Representation State Transfer」を表し、Webサービスのアーキテクチャパターンを作成します.
新しいREST APIの作成
APIゲートウェイコンソールにログインして以下の設定を行います!
特に、[終点タイプ](End Type)ドロップダウンメニューで[エッジ最適化](Edge Optimization)を選択します.edge最適化エンドポイントは、地理的に分散したクライアントに最適です.

新しいリソースとメソッドの作成
APIにおけるハイパーテキスト転送プロトコル(HTTP)メソッドの定義
APIでCORSを有効にしてWebサイトで使用
CORSとは?
ドメインまたはポートが他のサーバリソースを要求するメカニズム
左側のナビゲーション・ペインで、Helloworld APIの下にあるリソースをクリックします.
そしてメソッド作成中にPOSTをクリック!

次に、次の手順に従って、「CORSを有効にし、既存のCORSヘッダーを置換」ボタンをクリックします.

では、以下に示すように、方法の変更を確認するメッセージが表示されます.[OK]をクリックします.

APIの導入
「≪タスク|Tasks|Financial_Close≫」で「≪APIデプロイメント|API Deployment|Financial_Close≫」を選択し、「≪デプロイメント・ステップ|Deployment Step|Financial_Close≫」で「≪新規ステップ|New Step|Financial_Close≫」を設定します.
API検証
次の内容を本文フィールドに貼り付けます.
{
    "firstName":"Grace",
    "lastName":"Hopper"
}
テストをクリックします.応答にコード200が含まれている場合、テストは以下のように完了します.

モジュール4:データテーブルの作成


このモジュールでは、Amazon DynamoDBを使用して、データを保持するテーブルを作成します.AWS IAMサービスを使用して、サービスを安全に許可して対話します.モジュール2で生成されたLambda関数は、新しく作成されたDynamodBテーブルにIAMポリシーによってデータを書き込むことを可能にする.これでpythonをLambda関数として使用します.
DYNAMODBテーブルの作成
Amazon DynamodBコンソールにログインし、テーブルを作成します.Amazonリソース名をコピーします.一般情報-その他情報-ARN

IAMポリシーを作成しLambda関数に追加
Lambda関数を編集してテーブルにデータを書き込みます.AWS Lambdaコンソールを開きます.
次に、「関数を生成する権限」をクリックし、インライン・ポリシーを追加します.
以下のコードを作成し、コピーした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"
}
]
}

次に、ポリシーを生成し、次の操作を行います.

Lambda関数を変更してDynamodBテーブルにデータを書き込む
Lambda関数のコードを次のように変更します.
# 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)
    }
そしてテストします.成功すれば、結果は以下の通りです.

さらに、テストイベントに一致するアイテムがDynamodBコンソールアイテムバーに表示されます.ここで説明した例を使用すると、プロジェクトIDは「AdaLovelace」となります.

モジュール5:Webアプリケーションへのインタラクティブ機能の追加


このモジュールは、モジュール1によって生成された静的ウェブサイトを更新し、モジュール3によって生成されたREST APIを呼び出す.これにより、ユーザ入力テキストを表示する機能が追加される.
Amplifyコンソールを使用したWebアプリケーションの更新
モジュール1のコードを次のように変更します.
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
    <!-- Add some CSS to change client UI -->
    <style>
    body {
        background-color: #232F3E;
        }
    label, button {
        color: #FF9900;
        font-family: Arial, Helvetica, sans-serif;
        font-size: 20px;
        margin-left: 40px;
        }
     input {
        color: #232F3E;
        font-family: Arial, Helvetica, sans-serif;
        font-size: 20px;
        margin-left: 20px;
        }
    </style>
    <script>
        // define the callAPI function that takes a first name and last name as parameters
        var callAPI = (firstName,lastName)=>{
            // instantiate a headers object
            var myHeaders = new Headers();
            // add content type header to object
            myHeaders.append("Content-Type", "application/json");
            // using built in JSON utility package turn object to string and store in a variable
            var raw = JSON.stringify({"firstName":firstName,"lastName":lastName});
            // create a JSON object with parameters for API call and store in a variable
            var requestOptions = {
                method: 'POST',
                headers: myHeaders,
                body: raw,
                redirect: 'follow'
            };
            // make API call with parameters and use promises to get response
            fetch("YOUR-API-INVOKE-URL", requestOptions)
            .then(response => response.text())
            .then(result => alert(JSON.parse(result).body))
            .catch(error => console.log('error', error));
        }
    </script>
</head>
<body>
    <form>
        <label>First Name :</label>
        <input type="text" id="fName">
        <label>Last Name :</label>
        <input type="text" id="lName">
        <!-- set button onClick method to call function we defined passing input values as parameters -->
        <button type="button" onclick="callAPI(document.getElementById('fName').value,document.getElementById('lName').value)">Call API</button>
    </form>
</body>
</html>
入れて、新しいファイルを作成して、圧縮して保存します.
次にAmplifyコンソールを開いてファイルをアップロードします.

更新されたWebアプリケーションのテスト
ドメインにアクセスするURLは以下の通りです.

では、Webアプリケーションの作成が完了します.