Serverless - lifeisegg2k/Study GitHub Wiki

はじめに

  • 最近サーバーレスという用語は、より多くの会話で登場しています。サーバーレスコンピューティングおよびサーバーレスプラットフォームのような概念と関連する概念を明確にしてみましょう。

  • サーバーレスは、多くの場合FaaS(Functions-as-a-Service)という用語と相互交換的に使用されます。ただし、サーバーレスは、サーバーがないことを意味しません。パブリッククラウドプロバイダーが、アプリケーションを配布、実行、および管理するためのサーバーを提供するため、実際にサーバー型サーバーがたくさんあります。

  • サーバーレスコンピューティングは、開発者がソフトウェアシステムを構築して提供する方法の変化を示す新しいカテゴリです。コードでアプリケーション・インフラストラクチャーを抽象化すると、開発プロセスを大幅に簡素化しながら、新しいコストと効率の利点を得ることができます。サーバーレスコンピューティングとFaaSは、クラウドネイティブサービスとハイブリッドクラウドと一緒に次世代のエンタープライズIT時代を定義するために重要な役割をすると考えています。

  • サーバーレスプラットフォームは、ユーザーがコード関数(actionと呼ばれる)を実行し、各関数の結果を返すことができるAPIを提供します。サーバーレスプラットフォームは、開発者が機能の結果を検索することができるようにHTTPSエンドポイントを提供しています。このエンドポイントは、他の機能への入力として使用することができますので、関連する機能のシーケンス(またはチェーン)を提供しています。

  • ほとんどのサーバーレスプラットフォームでは、ユーザーは機能を実行する前に、配布(または生成)します。次に、サーバーレスプラットフォームには、機能を指示されるときに必要なすべてのコードがあります。サーバーレス機能の実行は、ユーザーがコマンドを使用して手動で起動したり、cronジョブ、ファイルのアップロード、またはイベントに応答して機能を有効にするように構成されたイベントソースによってトリガーされることがあります。

サーバーレス

サーバーに煩わされることなく、アプリケーションを構築、実行

Reference : AWS Serverless

サーバーレスについて

サーバーレスコンピューティング(またはサーバーレス)は、クラウドプロバイダー(AWS、AzureやGoogle Cloud)がリソースを動的に割り当てて、コードを実行する実行モデルです。このコードは、一般的にhttpリクエスト、データベースのイベントは、キューサービス、警告の監視、ファイルのアップロード、スケジュールされたイベント(cronジョブ)など、さまざまなイベントによってトリガすることができるステートレスコンテナ内で実行されます。クラウドに送信されるコードが実行さプロバイダは、一般的に、関数型です。したがって、サーバーレスは時々「サービス機能」または「FaaS」と呼ばれます。主なクラウドプロバイダのFaaS製品は次のとおりです。

マイクロサービス

サーバーレス環境に移行する際に直面した最大の変化は、アプリケーションを機能としてアーキテクチャが必要ということです。マイクロサービスベースのアーキテクチャを採用する必要があります。単一の機能の中で、単一のアプリケーション内でアプリケーション全体を実行し、ルーティングを直接処理することによって、問題を解決することができます。

ステートレス(stateless)関数

関数は、一般的に安全な(ほぼ)ステートレスコンテナ内で実行されます。毎回新しいコンテナ内の関数が呼び出されると、効果的に想定する必要があります。

コールドスタート(Cold Starts)

イベントに応答するために、要求に応じて提供されているコンテナ内で関数が実行されるため、これと関連の待機時間があります。これコールドスタートと呼びます。関数の実行が完了した後、コンテナが、しばらくの間維持されることがあります。この時間の間に、他のイベントがトリガされると、はるかに迅速に対応し、一般的にウォームスタートと呼ばれます。

コールドスタート期間は、特定のクラウドプロバイダーの実装に依存します。 AWS Lambdaは数百ミリ秒から数秒の間に、これをすることができます。使用されたランタイム(または言語)、関数のサイズ(パッケージ)と、もちろん、クラウドプロバイダによって異なる場合があります。クラウドプロバイダが待機時間を短縮するために、はるかに上達しながらコールドスタートは、長年に渡って大幅に改善されました。

サーバーレスを使う理由

サーバーレスにより、俊敏性が強化され、総所有コストを抑えたモダンアプリケーションを構築できます。サーバーレスアプリケーションを構築することで、開発者は、クラウドでもオンプレミスでも、サーバーやランタイムの管理や操作に煩わされることなく、主力製品に集中できます。このようなオーバーヘッドの削減によって、開発者は、拡張性と信頼性の高い優れた製品の開発に費やす時間とエネルギーを取り戻すことができます。

サーバーレスの利点

サーバーの管理が不要

サーバーのプロビジョニングやメンテナンスは、必要ありません。保守および管理が必要なソフトウェアあるいはランタイムを、インストールする必要がありません。

柔軟なスケーリング

アプリケーションは、自動的にスケーリングすることも、個々のサーバー単位ではなく消費単位 (スループットやメモリなど) で切り替えて容量を調整し、スケーリングすることもできます。

価値に対する支払い

サーバー単位ではなく、安定したスループットや実行時間に対して支払います。

自動化された高可用性

サーバーレスには、可用性と耐障害性機能が組み込まれています。これらの機能は、アプリケーションを実行しているサービスがデフォルトで提供するため、設計する必要はありません。

利用可能なサービス

  • REST API
  • ユーザー認証・認可
  • Single Page Application (SPA)
  • AB テスト
  • モバイルバックエンド

Reference :目的別、サーバーレスアーキテクチャの教科書!これのときはこう!【アーキテクチャ20連発】

AWS Lambdaはなに?

AWS Lambda(またはLambda)はAWSが提供するサーバーレスコンピューティングサービスです。

Lambda Specs

  • Node.js 12.13.0, 10.16.3, and 8.10
  • Java 11 and 8
  • Python 3.8, 3.7, 3.6, and 2.7
  • .NET Core 2.1
  • Go 1.x
  • Ruby 2.5
  • Rust

Runtime Environment

  • Memory: 128MB - 3008MB, in 64 MB increments
  • Ephemeral disk space: 512MB
  • Max execution duration: 900 seconds
  • Compressed package size: 50MB
  • Uncompressed package size: 250MB

Packaging Functions

Lambda関数をパッケージ化して、AWSに送信する必要があります。これは通常、関数とそのすべての依存関係を圧縮し、S3バケットにアップロードするプロセスです。また、特定のイベントが発生したときにこのパッケージを使用することをAWSに知らせます。このプロセスを支援するために、サーバーレスフレームワークを使用します。

Execution Model

機能を実行するコンテナ(およびコンテナで使用されるリソース)は、AWSによって完全に管理されます。イベントが発生すると起動し、使用されていない場合はオフになります。元のイベントの処理中に追加の要求が行われた場合、要求を処理するために新しいコンテナーが起動されます。

Stateless Functions

上記の実行モデルにより、Lambda関数は事実上ステートレスになります。これは、Lambda関数がイベントによってトリガーされるたびに、まったく新しい環境で呼び出されることを意味します。前のイベントの実行コンテキストにアクセスできません。

サーバーレスアプリの構築

Reference : Learn to build full-stack Serverless appsを参考にサーバーレスアプリの構築してみましょう!

PDF : Learn to build full-stack Serverless apps

Lambda作成

  1. AWS マネジメントコンソールから「Lambda」選択
  2. 関数の作成
  3. 基本情報を入力

    適度うな関数名ランタイム サポート原語

    * .Net Core 2.1(C#/PowerShell)
    * Go 1.x
    * Java 8, 11
    * Node.js 10.x, 12.x
    * Python 2,7, 3.6, 3.7, 3.8
    * Ruby 2.5
    
  4. 下の関数の作成ボタン押す

詳しいチュートリアルをやってみましょう

チュートリアルをやってみましょう