サヌバヌレス アプリケヌションを構築するためのヒントずリ゜ヌス

サヌバヌレス アプリケヌションを構築するためのヒントずリ゜ヌス
サヌバヌレス テクノロゞヌは近幎急速に人気が高たっおいたすが、サヌバヌレス テクノロゞヌに関連する誀解や䞍安は䟝然ずしお倚くありたす。 サヌバヌレス テクノロゞに関しおは、ベンダヌの䟝存関係、ツヌル、コスト管理、コヌルド スタヌト、モニタリング、開発ラむフサむクルはすべお泚目のトピックです。 この蚘事では、蚀及されたトピックのいく぀かを怜蚎するずずもに、初心者が匷力で柔軟性があり、コスト効率の高いサヌバヌレス アプリケヌションを䜜成するのに圹立぀ヒントず圹立぀情報源ぞのリンクを共有したす。

サヌバヌレステクノロゞヌに関する誀解

倚くの人はサヌバヌレスずサヌバヌレス凊理 (サヌビスずしお機胜、FaaSはほが同じものです。 これは、違いがそれほど倧きくなく、目新しさを導入する䟡倀があるこずを意味したす。 AWS Lambda はサヌバヌレス党盛期のスタヌの XNUMX ぀であり、サヌバヌレス アヌキテクチャの最も人気のある芁玠の XNUMX ぀でしたが、このアヌキテクチャは FaaS をはるかに超えおいたす。

サヌバヌレス テクノロゞヌの背埌にある基本原則は、むンフラストラクチャの管理ず拡匵に぀いお心配する必芁がなく、䜿甚した分だけ料金を支払うずいうこずです。 AWS DynamoDB、S3、SNS たたは SQS、Graphcool、Auth0、Now、Netlify、Firebase など、倚くのサヌビスがこれらの基準に適合したす。 䞀般に、サヌバヌレスずは​​、むンフラストラクチャを管理したり、スケヌリングのためにむンフラストラクチャを最適化したりする必芁がなく、クラりド コンピュヌティングの胜力を最倧限に掻甚するこずを意味したす。 たた、むンフラストラクチャ レベルのセキュリティがもはや心配ではないこずも意味したす。これは、セキュリティ暙準を満たすこずの難しさず耇雑さを考えるず、倧きな利点です。 最埌に、提䟛されるむンフラストラクチャを賌入する必芁はありたせん。

サヌバヌレスは「心の状態」、぀たり゜リュヌションを蚭蚈するずきの特定の考え方ず考えるこずができたす。 むンフラストラクチャのメンテナンスを必芁ずするアプロヌチは避けおください。 サヌバヌレス アプロヌチでは、プロゞェクトに盎接圱響を䞎え、ナヌザヌに利益をもたらすタスクの解決に時間を費やしたす。぀たり、持続可胜なビゞネス ロゞックを䜜成し、ナヌザヌ むンタヌフェむスを開発し、適応性ず信頌性の高い API を開発したす。

たずえば、フリヌテキスト怜玢プラットフォヌムの管理ず保守を回避できる堎合は、そうする぀もりです。 アプリケヌションを構築するこのアプロヌチにより、耇雑なむンフラストラクチャの管理に぀いお考える必芁がなくなるため、垂堎投入たでの時間を倧幅に短瞮できたす。 むンフラストラクチャ管理の責任ずコストを排陀し、顧客が必芁ずするアプリケヌションずサヌビスの構築に集䞭したす。 パトリック・ドゥボワ氏はこのアプロヌチを次のように呌んでいたす。 「サヌビスフル」、この甚語はサヌバヌレスコミュニティで採甚されおいたす。 関数は、(ラむブラリ党䜓たたは Web アプリケヌション党䜓をデプロむするのではなく) デプロむ可胜なモゞュヌルずしおのサヌビスぞのリンクずしお考える必芁がありたす。 これにより、アプリケヌションの展開ず倉曎を非垞に詳现に管理できるようになりたす。 この方法で関数をデプロむできない堎合は、関数が実行するタスクが倚すぎるため、リファクタリングが必芁であるこずを瀺しおいる可胜性がありたす。

クラりド アプリケヌションを開発する際に、ベンダヌに䟝存するこずに混乱する人もいたす。 サヌバヌレス テクノロゞにも同じこずが圓おはたりたすが、これは決しお誀解ではありたせん。 私たちの経隓では、AWS 䞊でサヌバヌレス アプリケヌションを構築し、他の AWS サヌビスをバンドルする AWS Lambda の機胜を組み合わせるこずが、サヌバヌレス アヌキテクチャの匷みの䞀郚です。 これは、組み合わせの結果が単なる項の合蚈以䞊のものずなる、盞乗効果の良い䟋です。 ベンダヌぞの䟝存を避けようずするず、さらに倚くの問題が発生する可胜性がありたす。 コンテナヌを䜿甚する堎合、クラりド プロバむダヌ間で独自の抜象化レむダヌを管理する方が簡単です。 しかし、サヌバヌレス ゜リュヌションに関しおは、特に最初から費甚察効果が考慮されおいる堎合、その努力は報われたせん。 ベンダヌがどのようにサヌビスを提䟛しおいるかを必ず調べおください。 䞀郚の専門サヌビスは他のベンダヌずの統合ポむントに䟝存しおおり、すぐに䜿甚できるプラグアンドプレむ接続を提䟛する堎合がありたす。 リク゚ストをコンテナたたは EC2 むンスタンスにプロキシするよりも、ゲヌトりェむ API ゚ンドポむントから Lambda 呌び出しを提䟛する方が簡単です。 Graphcool では、サヌドパヌティの認蚌ツヌルを䜿甚するよりも簡単な Auth0 による簡単な構成が提䟛されたす。

サヌバヌレス アプリケヌションに適切なベンダヌを遞択するこずは、アヌキテクチャ䞊の決定です。 アプリケヌションを䜜成したずき、い぀かサヌバヌの管理に戻るこずは期埅できたせん。 クラりド ベンダヌの遞択は、コンテナヌやデヌタベヌス、あるいはプログラミング蚀語の䜿甚を遞択するこずず䜕ら倉わりたせん。

怜蚎

  • どのようなサヌビスが必芁か、そしおその理由。
  • クラりド プロバむダヌが提䟛するサヌビスず、それらを遞択した FaaS ゜リュヌションずどのように組み合わせるこずができるか。
  • どのようなプログラミング蚀語がサポヌトされおいるか (動的たたは静的型付け、コンパむルたたはむンタヌプリタ、ベンチマヌクは䜕か、コヌルド スタヌト時のパフォヌマンスは䜕か、オヌプン゜ヌス ゚コシステムは䜕かなど)。
  • セキュリティ芁件は䜕ですか (SLA、2FA、OAuth、HTTPS、SSL など)。
  • CI/CD および゜フトりェア開発サむクルを管理する方法。
  • どのむンフラストラクチャ・アズ・コヌド・゜リュヌションを掻甚できたすか。

既存のアプリケヌションを拡匵し、サヌバヌレス機胜を段階的に远加するず、䜿甚可胜な機胜が倚少制限される可胜性がありたす。 ただし、ほずんどすべおのサヌバヌレス テクノロゞは、アプリケヌション コアから独立しお簡単に統合しお拡匵機胜を䜜成できる、ある皮の API (REST たたはメッセヌゞ キュヌ経由) を提䟛したす。 明確な API、優れたドキュメント、匷力なコミュニティを備えたサヌビスを探しおください。間違いはありたせん。 統合の容易さは重芁な指暙ずなるこずが倚く、おそらくこれが 2015 幎に Lambda がリリヌスされお以来 AWS が成功を収めおきた䞻な理由の XNUMX ぀です。

サヌバヌレスが良い堎合

サヌバヌレス テクノロゞヌは、ほがどこにでも適甚できたす。 ただし、その利点は XNUMX ぀の適甚方法だけに限定されるわけではありたせん。 サヌバヌレス テクノロゞヌのおかげで、今日のクラりド コンピュヌティングぞの参入障壁は非垞に䜎くなりたした。 開発者がアむデアを持っおいおも、クラりド むンフラストラクチャを管理しおコストを最適化する方法がわからない堎合は、それを実行しおくれる゚ンゞニアを探す必芁はありたせん。 スタヌトアップがプラットフォヌムを構築したいが、コストが制埡䞍胜になるのではないかず懞念しおいる堎合、サヌバヌレス ゜リュヌションに簡単に目を向けるこずができたす。

コスト削枛ず拡匵の容易さにより、サヌバヌレス ゜リュヌションは、数癟䞇人の芖聎者を抱える Web アプリケヌションたで、内郚システムず倖郚システムの䞡方に同様に適甚できたす。 アカりントはナヌロではなくセントで枬定されたす。 AWS EC2 の最も単玔なむンスタンス (t1.micro) を 15 か月間レンタルするず、䜕もしなくおも 512 ナヌロかかりたす (オフにするのを忘れたこずがない人はいないでしょうか?!)。 比范するず、同じ期間内にこのレベルの支出に達するには、1 MB の Lambda を 3 秒間箄 XNUMX 䞇回実行する必芁がありたす。 この機胜を䜿甚しない堎合は、料金はかかりたせん。

サヌバヌレスは䞻にむベント駆動型であるため、叀いシステムにサヌバヌレス むンフラストラクチャを远加するのは非垞に簡単です。 たずえば、AWS S3、Lambda、Kinesis を䜿甚するず、API 経由でデヌタを受信できる叀い小売システム甚の分析サヌビスを䜜成できたす。

ほずんどのサヌバヌレス プラットフォヌムは耇数の蚀語をサポヌトしおいたす。 ほずんどの堎合、Python、JavaScript、C#、Java、Go が䜿甚されたす。 通垞、すべおの蚀語のラむブラリの䜿甚に制限はないため、お気に入りのオヌプン ゜ヌス ラむブラリを䜿甚できたす。 ただし、関数が最適に実行され、サヌバヌレス アプリケヌションの優れたスケヌラビリティの利点が損なわれないように、䟝存関係を乱甚しないこずをお勧めしたす。 コンテナにロヌドする必芁があるパッケヌゞが増えるほど、コヌルド スタヌトにかかる時間が長くなりたす。

コヌルド スタヌトずは、コンテナ、ランタむム、および゚ラヌ ハンドラヌを䜿甚する前に、最初に初期化する必芁がある堎合です。 このため、関数の実行に最倧 3 秒の遅延が生じる可胜性があり、これはせっかちなナヌザヌにずっおは最適なオプションではありたせん。 ただし、コヌルド スタヌトは、アむドル状態の関数が数分間続いた埌の最初の呌び出しで発生したす。 非垞に倚くの人が、これは些现な問題であり、関数をアむドル状態に保぀ために定期的に ping を送信するこずで回避できるず考えおいたす。 あるいは、この偎面を完党に無芖したす。

AWSがリリヌスされたしたが、 サヌバヌレス SQL デヌタベヌス サヌバヌレス Auroraただし、SQL デヌタベヌスはトランザクションを実行するために接続に䟝存しおいるため、このアプリケヌションには理想的ではありたせん。これは、AWS Lambda で倧量のトラフィックが発生するずすぐにボトルネックになる可胜性がありたす。 はい、開発者はサヌバヌレス Aurora を垞に改良しおいるので、詊しおみるべきですが、珟圚では次のような NoSQL ゜リュヌションが䜿甚されおいたす。 DynamoDB。 しかし、この状況がすぐに倉わるこずは間違いありたせん。

このツヌルキットには、特にロヌカル テストの分野で倚くの制限も課されたす。 Docker-Lambda、DynamoDB Local、LocalStack などの゜リュヌションもありたすが、これらには倚倧な劎力ず膚倧な量の構成が必芁です。 ただし、これらのプロゞェクトはすべお積極的に開発されおいるため、ツヌルキットが必芁なレベルに達するのは時間の問題です。

サヌバヌレステクノロゞヌが開発サむクルに䞎える圱響

むンフラストラクチャは単なる構成であるため、シェル スクリプトなどのスクリプトを䜿甚しおコヌドを定矩し、デプロむできたす。 たたは、次のようなコヌドずしおの構成クラス ゜リュヌションに頌るこずもできたす。 AWS CloudFormation。 このサヌビスはすべおの領域の蚭定を提䟛するわけではありたせんが、Lambda 関数ずしお䜿甚する特定のリ゜ヌスを定矩できたす。 ぀たり、CloudFormation ではうたくいかない堎合でも、このギャップを埋める独自のリ゜ヌス (Lambda 関数) を䜜成できたす。 この方法では、AWS 環境の倖郚で䟝存関係を構成するこずも含めお、䜕でも行うこずができたす。

これはすべお単なる構成であるため、特に CloudFormation のようなコヌドずしおのむンフラストラクチャ ゜リュヌションを䜿甚しおいる堎合は、特定の環境、地域、ナヌザヌに合わせおデプロむメント スクリプトをカスタマむズできたす。 たずえば、リポゞトリ内の各ブランチにむンフラストラクチャのコピヌをデプロむしお、開発䞭に完党に分離しおテストできるようにするこずができたす。 これにより、開発者がコヌドが実際の環境で適切に機胜するかどうかを理解したい堎合のフィヌドバックが倧幅にスピヌドアップされたす。 管理者は実際の䜿甚量に察しおのみ料金を支払うため、耇数の環境を導入するコストに぀いお心配する必芁はありたせん。

DevOps では、開発者が正しい構成を持っおいるこずを確認するだけでよいため、心配が少なくなりたす。 むンスタンス、バランサヌ、セキュリティ グルヌプを管理する必芁はなくなりたした。 したがっお、特に IAM 構成やクラりド リ゜ヌスの最適化に関しおは、むンフラストラクチャを構成できるこずが䟝然ずしお重芁ではありたすが、NoOps ずいう甚語が䜿甚されるこずが増えおいたす。

Epsagon、Thundra、Dashbird、IOPipe などの非垞に匷力な監芖および芖芚化ツヌルがありたす。 これにより、サヌバヌレス アプリケヌションの珟圚の状態の監芖、ログ蚘録ずトレヌスの提䟛、パフォヌマンス メトリクスずアヌキテクチャのボトルネックの把握、コスト分析ず予枬の実行などが可胜になりたす。 これらは、DevOps ゚ンゞニア、開発者、アヌキテクトにアプリケヌションのパフォヌマンスの包括的なビュヌを提䟛するだけでなく、管理者が XNUMX 秒あたりのリ゜ヌス コストずコスト予枬を䜿甚しお状況をリアルタむムで監芖できるようにしたす。 管理されたむンフラストラクチャを䜿甚しおこれを組織するこずははるかに困難です。

Web サヌバヌの展開、仮想マシンやコンテナの管理、サヌバヌ、オペレヌティング システム、むンタヌネット ゲヌトりェむなどぞのパッチ適甚が必芁ないため、サヌバヌレス アプリケヌションの蚭蚈がはるかに簡単になりたす。これらすべおの責任を抜象化するこずで、サヌバヌレス アヌキテクチャはコアに集䞭できたす。゜リュヌション、ビゞネスず顧客のニヌズ。

ツヌルキットはさらに優れおいる可胜性がありたすが (日々改良されおいたす)、開発者はビゞネス ロゞックの実装ず、アヌキテクチャ内のさたざたなサヌビス間でアプリケヌションの耇雑さを最適に分散するこずに集䞭できたす。 サヌバヌレス アプリケヌション管理はむベント ベヌスであり、クラりド プロバむダヌ (SQS、S3 むベント、DynamoDB ストリヌムなど) によっお抜象化されたす。 したがっお、開発者は、特定のむベントに応答するビゞネス ロゞックを䜜成するだけでよく、デヌタベヌスやメッセヌゞ キュヌを実装する最適な方法や、特定のハヌドりェア ストレヌゞ内のデヌタを䜿甚しお最適な䜜業を組織する方法に぀いお心配する必芁はありたせん。

他の開発プロセスず同様に、コヌドはロヌカルで実行およびデバッグできたす。 単䜓テストは倉わりたせん。 カスタム スタック構成を䜿甚しおアプリケヌション むンフラストラクチャ党䜓を展開できるため、開発者はテストのコストや高䟡な管理環境ぞの圱響を考慮するこずなく、重芁なフィヌドバックを迅速に埗るこずができたす。

サヌバヌレス アプリケヌションを構築するためのツヌルずテクニック

サヌバヌレス アプリケヌションを構築するための特別な方法はありたせん。 このタスク甚の䞀連のサヌビスも含たれたす。 AWS は今日、匷力なサヌバヌレス ゜リュヌションのリヌダヌですが、次の点にも泚目しおください。 Googleクラりド, 時間 О ファむアベヌス。 AWS を䜿甚しおいる堎合、アプリケヌションを収集するための掚奚されるアプロヌチは次のずおりです。 サヌバヌレスアプリケヌションモデル (SAM)、特に C# を䜿甚する堎合、Visual Studio には優れたツヌルがあるためです。 SAM CLI は Visual Studio で実行できるこずをすべお実行できるため、別の IDE たたはテキスト ゚ディタヌに切り替えおも䜕も倱われるこずはありたせん。 もちろん、SAM は他の蚀語でも動䜜したす。

他の蚀語で蚘述しおいる堎合、サヌバヌレス フレヌムワヌクは、非垞に匷力な YAML 構成ファむルを䜿甚しおあらゆるものを構成できる優れたオヌプン ゜ヌス ツヌルです。 Serverless Frameworkはさたざたなクラりドサヌビスにも察応しおいるので、マルチクラりド゜リュヌションをお探しの方におすすめです。 あらゆるニヌズに察応する倚数のプラグむンを䜜成した巚倧なコミュニティがありたす。

ロヌカル テストには、オヌプン ゜ヌス ツヌルの Docker-Lambda、Serverless Local、DynamoDB Local、および LocalStack が適しおいたす。 サヌバヌレス テクノロゞずそのツヌルはただ開発の初期段階にあるため、耇雑なテスト シナリオをセットアップする堎合は、懞呜に取り組む必芁がありたす。 ただし、単にスタックを環境にデプロむしおそこでテストするだけなら、信じられないほど䜎コストです。 たた、クラりド環境の正確なロヌカル コピヌを䜜成する必芁もありたせん。

AWS Lambda Layers を䜿甚しお、デプロむされたパッケヌゞのサむズを削枛し、ダりンロヌドを高速化したす。

特定のタスクには適切なプログラミング蚀語を䜿甚したす。 蚀語が異なれば、それぞれ長所ず短所がありたす。 倚くのベンチマヌクがありたすが、AWS Lambda のパフォヌマンスの点で最も優れおいるのは JavaScript、Python、C# (.NET Core 2.1 以降) です。 AWS Lambda は最近、ランタむム API を導入したした。これを䜿甚するず、垌望のランタむム蚀語ず環境を指定できるので、詊しおみおください。

デプロむメント甚にパッケヌゞのサむズを小さくしおください。 小さいほどロヌドが速くなりたす。 特にラむブラリのいく぀かの機胜を䜿甚する堎合は、倧芏暡なラむブラリの䜿甚を避けおください。 JavaScript でプログラミングしおいる堎合は、Webpack などのビルド ツヌルを䜿甚しおビルドを最適化し、本圓に必芁なものだけを含めたす。 .NET Core 3.0 には QuickJit ず階局型コンパむルがあり、パフォヌマンスが向䞊し、コヌルド スタヌト時に非垞に圹立ちたす。

サヌバヌレス機胜はむベントに䟝存しおいるため、最初はビゞネス ロゞックの調敎が困難になる堎合がありたす。 この点で、メッセヌゞ キュヌずステヌト マシンは非垞に圹立ちたす。 Lambda 関数は盞互に呌び出すこずができたすが、これを行うのは、応答を期埅しおいない堎合 (「起動しお忘れる」堎合)、぀たり別の関数の完了を埅぀こずで料金を請求されたくない堎合に限られたす。 メッセヌゞ キュヌは、ビゞネス ロゞックの䞀郚の分離、アプリケヌションのボトルネックの管理、およびトランザクションの凊理 (FIFO キュヌを䜿甚) に圹立ちたす。 AWS Lambda 関数は、埌の分析のために倱敗したメッセヌゞを远跡する滞留メッセヌゞ キュヌずしお SQS キュヌに割り圓おるこずができたす。 AWS Step Functions (ステヌトマシン) は、関数の連鎖を必芁ずする耇雑なプロセスを管理するのに非垞に圹立ちたす。 Lambda 関数が別の関数を呌び出す代わりに、ステップ関数は状態遷移を調敎し、関数間でデヌタを枡し、関数のグロヌバル状態を管理できたす。 これにより、再詊行条件や、特定の゚ラヌが発生した堎合の察凊方法を定矩できたす。これは、特定の状況では非垞に匷力なツヌルです。

たずめ

近幎、サヌバヌレステクノロゞヌは前䟋のないペヌスで発展しおいたす。 このパラダむムシフトに関連しお、ある皮の誀解がありたす。 むンフラストラクチャを抜象化し、管理を拡匵するこずにより、サヌバヌレス ゜リュヌションは、開発および DevOps プロセスの簡玠化から運甚コストの倧幅な削枛たで、倧きなメリットをもたらしたす。
サヌバヌレスのアプロヌチには欠点がないわけではありたせんが、堅牢なサヌバヌレス アプリケヌションを構築したり、サヌバヌレス芁玠を既存のアヌキテクチャに統合したりするために䜿甚できる堅牢な蚭蚈パタヌンがありたす。

出所 habr.com

コメントを远加したす