無セルアプリケーションの再定義


Serverlessは、あなたがより速く変化することに革新して、応じることができるように、より多くの機敏なアプリケーションを構築することができるサービス、実行と戦略を記述する方法です.
Serverlessの定義AWS
長い間、私は全く無力な眺めを全く持っていた.私はAWSラムダとDynamoDBを大量に使用し、APIゲートウェイを使ってまとめました.開発生産性は屋根を通して、人生は素晴らしい.
まではなかった.
私は非常に可変的な負荷を持っていた新しいプロジェクトに取り組んでいました.
ラムダは素晴らしいです、そして、proviconedされた並行性でそれは潜在的な展望からOKでしたが、ビジネスはより欲しかったです.私は考えを知らなかった.
Serverlessの私の親密な見解は、私が冷たいスタートの壁とアプリケーションを追跡して、可能な限り多くのパフォーマンスをeekアウトしている壁に対して頭を叩き続けました.イライラする時間だった.私はラムダは素晴らしいが、顧客の要件を満たすことができなかった知っていた.マイデフ

初期簡素化アーキテクチャ

アプローチの変化


私がAWSポッドキャストエピソードにリストしたとき、それは変わりましたepisode #448 AWSコピートについて話します.2つの理由があった.
  • 私は常にECSの大ファンでしたが、クラスタ構成、ネットワークと一般的な管理は常にブロッカーです.私は公然とネットワーキングとサーバー管理が私のskillsetの弱い部分であると認めます、そして、私は決して学びませんでした.CLIからAWSベストプラクティス環境への展開は、完全にそのブロックを削除します.
  • AWSラムダよりもServerlessになる方が多い.
  • そして、それは本当に私を打った2番目のポイントです.そして、Serverlessな環境でアプリケーションを配備する1つ以上の方法があります.私はあなたのfargateを見ている、あなたはアプリランナー.
    copilot文書から直接テキストを取る - リクエスト駆動されたWebサービスAWSアプリランナーサービスは自動的にあなたのインスタンスは、トラフィックがない場合、ベースラインインスタンスにトラフィックをスケールに基づいてスケール.このオプションは、リクエストボリュームまたは要求の低いボリュームで突然のバーストを持つHTTPサービスに対してより費用対効果が高い.
    リクエストボリュームまたは低リクエストボリュームにおける突然のバースト - それはちょうどまさに私が探しているように聞こえるか.
    それで、それは私に何を与えますか?それは簡単に私たちは簡単に使用するCLIから、常に根底にあるインフラストラクチャについて多くを心配する必要なく、アプリケーションを展開する方法を提供します.
    これは、Serverlessの私の定義が変わったとき、そして、開口部AWS引用が多くの感覚を作ったときです.現在、私はServerlessを定義します
    「操作上の複雑さを詳述して、開発者と建築家がビジネス価値に集中するどんな管理サービスでも」
    AWSラムダからAzure関数までHerokuへ.すべてのこれらのサービスは、開発者のための障壁を削除するプラットフォームを提供し、彼らはちょうど野生に自分のコードを取得することができます.
    より高いスケールでは、より細かな制御のための議論があるかもしれません.しかし、初期のスタートアップと小さな会社のために、私はあなたの製品をそこに得るより良いより合理的な方法を考えることができません.

    建築の変化



    一目で違う何かがない間、1つの本当に重要な区別があります.
    その区別はクライアントの要求を処理しているラムダ関数を置き換えるAWSアプリランナーです.
    人々のためにAWS App Runner , これは完全に管理された方法では、下にあるサーバーを管理する必要がないAWSでコンテナを実行します.単にCPUとメモリの必要量を設定し、オフに行く.
    他のアーキテクチャは同じです.非同期イベント駆動タスクは、ラムダによって処理されます.これはラムダが本来意図したユースケースのようです.イベントが起こるまで何もしないで座るデカップリングされたイベントハンドラのセット(そして、ほとんどお金を原価計算)は、彼らがそれに応じて反応することに興味があります.
    これがシステムのために意味することは、エンドユーザがアプリケーションにアクセスしたときに、低レイテンシーAPI応答を得ることです.アプリケーションランナータスクは、サーバーを実行するのと同じ方法で'常にon 'です.
    トレードオフここでは、アプリのランナーは1時間当たり課金されているコストの増加です.あなたのアプリケーションが実際に要求対座って、要求を到着するのを待つとき、コストはわずかに異なります.残りのAPIについては、それは24日1日365日です.ラムダモデルと少し異なる.
    そして、それが何になるかは、「それに依存する」という古い反応です.すべてはユースケースによる.
    ラムダは、最初の起動時のより高い待ち時間がOKである限り、アプリケーション全体を実行する完全に実行可能な方法です.高ボリュームAPIのために、これはおそらく機能が常に暖かいとして問題ではありません.
    しかし、低使用率の低いアプリケーションの私の特定のユースケースの場合、コストトレードオフは、エンドユーザーが最高の経験を持っていることを確認するために受け入れるために喜んでいるものです.
    顧客は常に最初に来る.
    将来のアプリケーション、特にイベント駆動型のファッションに組み込まれたアプリケーションのために、これは私の事実上のアーキテクチャになっています.Fargate/AWSアプリランナークライアントのアプリケーション、ラムダサービスのためのラムダより少ないレイテンシ駆動され、より多くのイベント駆動されます.

    実際に


    今すぐ簡単にどのように簡単にそれはAWSコピロとApprunnerを開始することです.そのために、私は注文管理サービスを使用しますnode-restaurant リポジトリ.
    もともと、このアプリケーションは完全にラムダ関数から構築されました.残りのAPIは現在、エクスプレスとして実行されます.JSアプリケーションは、ラムダで実行している任意のバックグラウンドイベントハンドラで.私は既にいくつかのローカルテストのために使用したdockerfileを持っていたので、私は同様にそれを使用してコピローを配線することができます.だから、コピートから始めるには、単に走る.
    
    copilot init
    
    
    CLIは、チュートリアルを参照してください.
  • リクエスト駆動Webサービス
  • 名前アプリケーション(順序API)重要な注意事項は、Apprunnerは、アプリケーション名とサービス名である名前フィールドに最大の長さを持っています
  • Dockerfileを選択してください.
  • テスト環境に対するはい
  • 分または2回後に、Dockerビルドコマンドの出力を開始し、展開の開始を見る必要があります.ここで注意してください、あなたがapprunnerに押し出す最初の時、それはインフラを供給するのにかなり時間がかかります.コーヒーや何かをつかむし、後で戻ってくる.
    
    ✔ Proposing infrastructure changes for stack node-restaurant-test-order-api
    - Creating the infrastructure for stack node-restaurant-test-order-api            [create complete]  [317.2s]
      - An IAM Role for App Runner to use on your behalf to pull your image from ECR  [create complete]  [17.9s]
      - An Addons CloudFormation Stack for your additional AWS resources              [create complete]  [28.7s]
      - An IAM role to control permissions for the containers in your service         [create complete]  [17.9s]
      - An App Runner service to run and manage your containers                       [create complete]  [285.9s]
    
    
    
    完了すると、アプリのランナーUIに頭をオフにし、Voila APIのリクエストを提供する準備が整いました.
    私の以前のポイントに戻って来て、すべては常に依存する!すべてのサービスに対する利点とトレードオフがあります.それはちょうど顧客使用ケースに依存します.