[AWS]AWSの起動:基本的なWebアプリケーションの導入

21858 ワード

↔▼▼このようなアーキテクチャを持つ簡単なWebアプリケーションを構築!

1.Webアプリケーションの作成


:AWS Amplifyコンソールを使用してWebアプリケーションに静的リソースを導入


1.2. Amplifyコンソールを使用したWebアプリケーションの作成


index.htmlを作成しzipファイルに圧縮
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>

<body>
    Hello World
</body>
</html>

✔️ Amplify Hosting✔️ Git 공급자 없이 배포 App Name : gettingStarted_hz환경이름 : dev
drag&drop htmlを使用します.zipを引き出す
ドメインをクリックしてhello worldのホームページが表示されたときに成功しました

2.サーバリース関数の作成


:AWS Lambdaを使用したサーバリース関数の作成



3.サーバリース関数をWebアプリケーションに接続する


:APIゲートウェイを使用したサーバリース関数の配備


3.1. 新しいREST APIの作成



3.2. 新しいリソースとメソッドの作成




3.3. APIの導入



3.4. API検証



4.データテーブルの作成


:Amazon DynamodBテーブルにデータを保持する


4.1. DYNAMODBテーブルの作成


  • ARN情報の検索
    表を作成したら、表名をクリックして[詳細]タブを展開します.
    概要>一般>その他>Amazonリソース名(ARN)
  • 4.2. IAM作成後Lambdaに追加


    **Lambdaでのアクセス権の検索タブ:構成>アクセス権

    4.3. Lambdaの変更


    HelloWorld Functionの関数を変更します.
    # 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)
        }

    testに失敗しました.チェックしてみると、dynamodb table名はHelloWorldDatabaseではなく、HelloWorldDataBaseだったので、間違いました.
    修正後の配置+テスト後にSuccededを発見!!

    4.4. 変更のテスト



    ++新しいイベントのテスト


    新しいアクティビティを追加し、dynamodbに追加するかどうかをテストします.

    試験は、firstNameおよびlastNameを簡単に変更して行った.
    結果は.

    もう一つの項目が追加されたことがわかります.

    5.Webアプリケーションにインタラクティブ機能を追加する


    :Webアプリケーションを変更してAPIを呼び出す


    5.1. Amplifyコンソールを使用したWebアプリケーションの更新


    index.htmlの変更
    ✔41行2479142自分のAPIアドレスに変更
    <!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>
    zipファイルに圧縮して再配置します.

    5.2. 更新されたWebアプリケーションのテスト


    "YOUR-API-INVOKE-URL" = Cloudfirst Name=Clubとして作成し、last Nameをクリックします.
    こんなメッセージが

    DYNAMODBに戻って表項目をリフレッシュすると、入力が正しいことが確認できます.