AWSによるServerless単純な導入


Serverlessとは何か


Serverlessは、サーバーを使用しているということを意味しますが、あなたはそれらのサーバーをプロビジョニングして、管理していません、しかし、代わりに、これらのサーバーはAWS、AzureまたはGoogle雲のようなプロバイダーによって提供される雲で実行しています.彼らは動的にコードの一部を実行するためのリソースを割り当てます.ほとんどの場合、コードは、HTTPリクエスト、データベースイベント、ファイルのアップロード、またはcronジョブのようなイベントによって引き起こされるステートレスコンテナ内で実行されています.ステートレスコンテナは、独自の関数の前または後に実行する他の関数に依存できないことを意味します.毎回新しいコンテナー内の関数内ですべてが行われます.すべては、FAAS(サービスとしての機能)と呼ばれることができる一つの小さなサービス(MicroService)になります.
いくつかの人気のないServerlessな技術には、Googleのfirebase、いくつかのAWSサービス、いくつかのAzureサービス、Serverless(https://www.serverless.com)が含まれています.Serverlessは、それ自体ではサービスではなく、クラウドプロバイダーへの無用なアプリケーションを開発、配備、監視する人気のあるツールです.今回はAWSサーバレスサービスに焦点をあてます.

Serverlessの利益:

  • サーバ自身を設定する必要はありません
  • 本質的にスケーラブル
  • は、あなたが
  • を使うものの代金を払うので、コストを減らすかもしれません
  • クイック展開/更新は可能です
  • の柔軟性
  • 無記名の欠点

  • デバッギングは時々痛みでありえます
  • のベンダーLockin
  • セキュリティ問題
  • それはステートレスであり、あなたはServerless
  • ですべてを構築することはできません
  • インテグレーションテストは、より難しい
  • です

    コールドスタート


    関数がコンテナと呼ばれているたびにオンデマンドで作成され、関数が実行されます.このコンテナは呼び出しの後にしばらくの間存在し、コンテナが既に次の時間を実行している場合は応答が速くなりますが、しばらくしたらコンテナが再び削除され、関数が再び呼び出されると新しいコンテナが作成されなければなりません.

    レスレス


    アムスラムダ


    AWSコンソールにログインし、ラムダセクションに行くことで、ラムダ関数を簡単に作成できます.そこから、作成する関数をクリックして、最初の機能を作成することができます!

    今のところ、我々はあなたが好きな任意の名前を選択することができますNODEJSとの機能を作成することから始めて、あなたはオプションを選択することができます今のために選択することができます.

    実際の機能は、この画面で作成することができます2つの重要な部分は、トリガと関数コード自体です.トリガーは、例えばAPIゲートウェイ(それ以降の詳細)またはcron仕事(EventBridge)を通して、例えば、関数を呼ぶことができるかを指定します.関数コードは、実際にはノードです.JSコードは次のようになります.
    exports.handler = async (event, context) => {
        // Your code implementation 
    
        const response = {
            statusCode: 200,
            body: JSON.stringify('Hello from Lambda!'),
        };
        return response;
    };
    
    イベントオブジェクトには、関数をトリガーしたイベントに関する情報が含まれ、コンテクストオブジェクトにはラムダが実行されているランタイムに関する情報が含まれます.レスポンスは、JSON形式でステータスコードと本体で送信する応答を含んでいます.非同期関数では、応答を送信するために呼び出すことができる3番目のパラメータがあります.このコールバックをコールすると、ラムダがイベントを終了し、応答を返します.
    最後に、あなたの機能をテストする場合は、左上にテストイベントを作成し、コンソール内の機能を実行し、すべてが動作するかどうかを確認することができます!

    APIゲートウェイ


    APIゲートウェイは、AWSサービスのインターフェイスでも、外部の世界(または認証で構築されている場合、少なくともあなたのユーザー)に見えるようにします.我々は、ラムダ画面からAPIを作成するつもりですが、APIゲートウェイページから簡単にAPIを作成することができます.
    新しく作成されたラムダ関数に戻ると、左側の「トリガーを追加」ボタンをクリックし、ポップアップウィンドウで「APIゲートウェイ」を選択してトリガーを追加します.

    我々は、“我々はAPIを自動的に我々のAPIの中に我々のAPIを作成する”ボタンをクリックして“開く”を選択することができますので、今のところセキュリティのない“残りのAPI”を作成するつもりです.APIゲートウェイのページに行けば、テスト、チェック、名前変更、設定の変更などができます.

    GETリクエストの場合、おそらくメソッドリクエストの内部に移動し、おそらくボディパラメータを設定する必要があるポストリクエストのURLクエリ文字列パラメータを設定する必要があります.
    いくつかのヒント:あなたが再びあなたのAPIを展開する必要があるメソッドを変更するたびに、それは新しい変化を反映していない、それはビルトイン非常に便利なテスト機能を持って、あなたは簡単にCorsを設定する必要があります(上記のページで簡単に行うことができます).

    AWSダイナモ


    Amazonのダイナモは、ラムダ関数で一般的に使用される単純なスケーラブルなNoSQLデータベースです.これは、データを格納、検索、更新、または削除するラムダ関数の中で簡単に使用できます.非常に簡単ですので、今回はあまりにも多くの細部には入らないでしょう.
    const AWS = require('aws-sdk')
    
    AWS.config.update({ region: 'ap-northeast-1' })
    const dynamo = new AWS.DynamoDB({ apiVersion: '2012-08-10' })
    
    exports.handler = async event => {
        const params = {
            TableName: 'TABLE',
            Key: {
                KEY_NAME: { N: '001' }
            },
            ProjectionExpression: 'ATTRIBUTE_NAME'
        }
    
        dynamo.getItem(params, function(error, data) {
            if (error) {
                const response = {
                    statusCode: 400,
                    body: JSON.stringify(error)
                }
            } else {
                const response = {
                    statusCode: 200,
                    body: JSON.stringify(data.Item)
                }
            }
        })
    
        return response
    }
    
    これは、ダイナモテーブルに呼び出しを追加すると簡単な機能です.エラーの場合、エラー応答が返され、データが正常に読み出されるとデータが返されます.
    もちろん、あなたのコンソールのDynamoDBサービスに行って、CREATETABLEボタンをクリックすることで簡単に行うことができるDynamoDBテーブルを作成する必要があります.テーブル名と主キーを指定してテーブルを作成するだけです.

    仕上げノート


    一般に、CLIツールとインフラストラクチャの助けを借りて、すべてのインフラストラクチャ/関数(. serverlessまたはAWS SAM)を管理することもできます.これは、メンテナンス、シンプルさ、およびローカルで関数を実行することができます.
    カバーされていないが、他のAWSサーバーレスサービスが含まれます:AWSを増幅(AWS上のWeb/モバイルアプリケーションを構築するための開発フレームワーク)、認知(認証)、S 3(ファイルストレージ)、Cloudfront(CDN)、Route 53(DSNサービス)と証明書マネージャは、AWSサーバーレス機能を使用してプロジェクト全体を構築することを容易にします.