サーバーレスってなに?サーバーレスでインフラコストを削減できる?
従来、アプリケーションをデプロイする場合、通常は AWS などのホスティング プロバイダーを見つけて、アプリケーションを開発し、セットアップしたサーバーにデプロイします。
アプリケーションに必要な負荷分散、自動スケーリング、更新、管理などの複数のサーバーのセットアップが発生します。これを「サーバーフル」アーキテクチャと呼びます。
一方で、「サーバーレス」アーキテクチャは、クラウドにある完全に管理されたサービスのみを使用することを目的としています。
「サーバーフル」な方法で十分ではないでしょうか?「サーバーレス」開発がもたらす利点を見てみましょう。
サーバーレス(serverless)とは
サーバーレスはサーバーがないことを意味するわけではありません。 簡単にいうと、サーバーを気にせずにコードを実行する方法です。つまり、フロントエンド開発者がメンテナンスする責任がないことを意味します。
サーバーレスは、クラウド管理サービスによるコード実行を活用します。そのため、開発者はコードが実行される基盤となるインフラストラクチャを設計する必要がなく、非常に拡張性のあるコスト効率の高いアプリケーションを構築するソフトウェア アーキテクチャ設計パターンです。
従来型の開発の課題
従来型の開発(「サーバーフル」アーキテクチャ)にはいくつかの課題があります。特に以下の点で、サーバーレスと比較して効率が悪い部分があります。
1. サーバー管理の手間
従来型のアプローチでは、アプリケーションをホスティングするためにサーバーのセットアップや管理が必要です。
サーバーの構成:サーバーの選定、インストール、設定、パッチ適用、セキュリティ対策。
スケーリング:トラフィックが増えるとサーバーを追加で設定する必要があり、手動スケーリングではリソースの無駄が生じやすい。
メンテナンス:サーバーのアップデート、監視、障害対応などが発生する。
2. 初期コスト
サーバーを導入するには、物理的なサーバーや仮想マシンの費用がかかります。さらに、バックアップ、データベース、ロードバランサー、ファイアウォールなども必要で、これらの設定と運用に費用と時間がかかります。
3. 運用コスト
アプリケーションが成長するにつれて、サーバーの台数やデプロイの複雑さが増すため、運用面での負担が増大します。異なるサーバー間の同期や、さまざまな技術スタックの連携が必要になると、さらに運用が煩雑になります。
つまり、ホスティングの部分に時間がかかります。アプリケーションがちょっとしたタスクをやるためにサーバー全体をセットアップするには、やりすぎです。
やりすぎかどうかが、サーバーレスを検討する上で重要です。too muchであれば、サーバレスは一つの選択肢です。
サーバーレス(serverless)のメリット
サーバーレスは、バックエンドのインフラ管理をクラウドプロバイダーに任せ、開発者がアプリケーションのコードに集中できるアプローチです。
従来の「サーバーフル」な方法では、サーバーのセットアップや管理が必要ですが、サーバーレスではこれらの作業がクラウド側で自動化されるため、インフラコストの削減と管理負担の軽減が期待できます。
サーバーレスアーキテクチャを採用したプラットフォームを紹介します。
プラットフォーム | 特徴 | 対応言語 | フレームワーク | 料金 | 利用シーン |
Netlify | - フロントエンド向けに最適 - Gitと自動デプロイ統合 - サーバーレス関数の実装が簡単 | - JavaScript (Node.js) | - Nuxt.js - Gatsby - Hugo - React | - 無料プランあり - 有料プランは$19/月 | - 静的ウェブサイト - Jamstackプロジェクト |
Vercel | - Next.jsとの強い統合 - グローバルCDNでの配信 - サーバーレス関数やエッジ処理もサポート | - Node.js, Go, Python, Ruby | - Next.js - Gatsby - React | - 無料プランあり - 有料プランは$20/月 | - Next.jsを使ったウェブアプリ - プロトタイプ開発 |
Google Cloud Functions | - イベントドリブン型サーバーレス関数 - Google Cloudとの強力な統合 | - Node.js, Python, Go, Java, .NET, Ruby, PHP | - 直接のフレームワーク統合はなし | - 無料枠あり(1Mリクエスト/月) - 有料: $0.40/100万リクエスト | - トリガーベースのイベント処理 - 機械学習モデルのホスティング |
Azure Functions | - HTTPやタイマートリガーなど多様なイベント - Azureサービスとの強い連携 | - C#, JavaScript, Python, Java, PowerShell, TypeScript | - 直接のフレームワーク統合はなし | - 無料枠あり(100万リクエスト/月) - 有料: $0.20/100万リクエスト | - Microsoft技術を活用したシステム - トリガーベースのアプリケーション |
IBM Cloud Functions | - Apache OpenWhiskベース - IBM WatsonとAI機能の連携が可能 | - Node.js, Python, Java, Swift | - 直接のフレームワーク統合はなし | - 無料枠あり - 有料プランは従量課金制 | - AIを組み込んだアプリケーション - データ解析、API構築 |
Cloudflare Workers | - エッジコンピューティング - 超高速デプロイとレスポンスが可能 | - JavaScript, TypeScript | - 直接のフレームワーク統合はなし | - 無料枠あり(100,000リクエスト/月) - 有料プラン: $5/月 | - パフォーマンスが重要なAPI - グローバル展開が必要なアプリケーション |
Ramda | - 関数型プログラミングのためのライブラリ - 関数型スタイルでの開発が可能 | - JavaScript | - 特定のフレームワークとの統合はなし | - ライセンス料金が発生する場合がある | - 関数型プログラミングのコーディング - サーバーレスアプリケーションのビジネスロジック処理 |
「特定のフレームワークとの統合はなし」は、特定のフレームワークに対する特別な機能やプリセットは提供していません。そのため、これらのフレームワークを利用する際は、フレームワークのビルドやデプロイのプロセスを手動で管理する必要があります。
Netlifyなどのプラットフォームは、特定のフレームワーク(例えば、Nuxt.jsやNext.jsなど)と直接的に統合されており、フレームワークに特化した機能や最適化が提供されています。これにより、開発者はそのフレームワークを利用する際に、プラットフォームの特性を最大限に活用できます。
FLOURISHでは、Netlifyを使ったサーバレス開発に多くの事例がございます。
サーバーフル開発 vs サーバーレス開発
例えば、多くの企業でコーポレートサイトに活用しているwordpress。サーバーにはAWSのサーバーやVPSなどを使っていることも多いのではないでしょうか。
今回は、コーポレートサイトの開発をユースケースに、それぞれの開発手法の違いと、インフラコストを紹介したいと思います。
サーバーフル開発の例: AWS上でのWordPressを利用したコーポレートサイト
AWSのEC2インスタンスにWordpressをホスティングし、コーポレートサイトを構築する企業は多く存在します。このケースのアプリケーション構成、開発フローを簡易に作成しました。
1. アプリケーションの構成:
CMS: WordPress
ホスティング: AWS EC2
データベース: Amazon RDS (MySQL)
セキュリティ: AWS IAM、セキュリティグループ
バックアップ: AWS Backup
2. 開発フロー:
サーバーセットアップ: AWS EC2インスタンスを作成し、WordPressのインストールを行います。
データベース設定: Amazon RDSを使用してMySQLデータベースをセットアップし、WordPressと接続します。
セキュリティ設定: AWS IAMでユーザー権限を管理し、セキュリティグループでネットワークセキュリティを構成します。
バックアップと管理: AWS Backupを使用して定期的なバックアップを設定し、サーバーの保守を行います。
サーバーレス開発の例: NetlifyとContentfulの利用したコーポレートサイト
Wordpressを用いたコーポレートサイトで発生しやすいのは、サイバー攻撃です。続いて、IAMロールが上手く設定できず、複数人での作業が上手くいかなかったり、サーバー構成を引き継げなかったりすることです。報告や提案がしっかりわかりやすいベンダーや、コラボレーションにも積極的なベンダーを活用すると良いでしょう。
1. アプリケーションの構成:
CMS: Contentful
ホスティング: Netlify
デプロイ: GitHubとの連携
2. 開発フロー:
コンテンツ管理: ヘッドレスCMSであるContentfulでコンテンツを作成し、管理します。
フロントエンド構築: フロントエンドをReactやGatsbyなどで構築し、Netlifyでホスティングします。
自動デプロイ: GitHubリポジトリとの連携を使用して、コードの変更が自動的にNetlifyにデプロイされます。
スケーリング: Netlifyが自動的にスケーリングを管理し、トラフィックの変動に対応します。
サーバー、データベース、セキュリティなどの設定が多く、管理の手間がかかります。トラフィックの増加に応じて、サーバーのスケーリングも手動で必要です。そのため、固定のサーバーコストやデータベースの管理コストが発生します。 一方で、サーバレスは、サーバーやデータベースの管理が不要で、コンテンツ管理に集中できます。トラフィックの増加に応じて自動でスケーリングされるため、手動での対応が不要です。
例に挙げたコーポレートサイトは、アプリケーションとして行うタスクはそんなに多くありません。AWSでイチからサーバーを立てて、稼働させるには「too much!」と捉えることもできます。迅速に稼働させ、サーバー管理を削減し、中長期的にリソースをマーケティング等に割くような戦略で、サーバレスを選択することはオススメです。