serverless frameworkを使って本格的なAPIサーバーを構築(魅力編)
最近、推しメンの serverless framework の記事の第1弾です。
保守メンテが楽になりつつも、実戦で速攻で構築ができます。
目次
- serverless frameworkを使って本格的なAPIサーバーを構築(魅力編)← 今ここ
- serverless frameworkを使って本格的なAPIサーバーを構築(ハンズオン編)
- serverless frameworkを使って本格的なAPIサーバーを構築(Express編)
- serverless frameworkを使って本格的なAPIサーバーを構築(テストコード編)
こんにちは!某会社のインフラエンジニアをしておりますが、最近は サーバーレス という言葉が流行ってますね。
今回は、serverless frameworkで 「 lambda + APIGateway + DynamoDB 」 の構成でいくつかサービスを作ったので、利点などをまとめていけたらと思います。
サーバーレスとserverless framework
まずサーバーレスとは
サーバーの管理が不要になる
- サーバーレスアーキテクチャでは、管理するサーバーがないため、サーバー管理から開放され、その分管理コストがかからなくなります。物理的なサーバーの管理はクラウド事業者に一任できるので、故障やパッチ適用の心配をする必要はありません。
また、一般にコード実行サービスは高い可用性を持っているため、オンプレミスサーバーよりも障害耐性が高くなるでしょう。
アプリ開発において便利
- APIサーバーとして、ハッカソン用に作ったアプリの運用など、ほとんどアクセスがないようなAPIサーバーをずっと放置しておくのは大変お金がかかります。
従来の冗長化構成に比べ安価
- EC2 + RDS環境を構築したときに、ある程度の規模であれば安価に済ますことができます。
サーバーの脆弱性を突いた攻撃が効かない
-
セキュリティ被害の多くはサーバーOSやミドルウェアの脆弱性を突いた攻撃ですが、公開ネットワーク上にサーバーが無いので、一般的なサーバーの脆弱性を突く攻撃が効きません。
-
Amazonのプラットフォームに脆弱性が無いとは言えませんが、プラットフォーム仕様が公開されていないので脆弱性を探すことが難しく、一般的なサーバーOSより脆弱性被害の可能性は少ないと考えられます。
サーバーが落ちることがない
-
サーバーが無いのでサーバーダウンの概念がありません。
-
厳密にはAmazonがダウンすれば共倒れしますが、どのプラットフォームもサービス本体がダウンすれば同じことが言えるので、世界的インフラのAWSと、自社サーバーや一般企業のレンタルサーバーのどちらを信用するか、という話になります。
放置できる
- セキュリティパッチや、サーバー自体の管理が発生しないためある程度放置できます。
インフラエンジニアがいなくてもスケールする
- lambdaは最大で3000も同時に実行できます。
- dynamodbは、キャパシティユニットとオートスケールの設定がかんたんにできます。
- S3で静的コンテンツを配信したとしても障害確率はかなり低いです。
とにかく安い!
-
サーバーは初期導入コストが高く、必要になるサーバースペックも事前に見積もっておかなければいけません。物理障害時のパーツ交換費用なども必要です。
クラウドサーバーにしても、起動している時間は料金がかかるため、閑散時などは100%コストを活用できているとはいえません。 -
一方、コード実行サービスであれば、実際にコードを実行した時間に応じて課金されるため、ムダなコストが発生しません。初期導入コストもかからないため、システムの規模に合わせて柔軟にスケールできます。
保守メンテが楽
- セキュリテイパッチやサーバー管理などのメンテが不要になります。
APIGateway+DynamoDB+Lambda手動構築の苦悩
- serverless framework を使わずに「lambda + APIGateway + DynamoDB」を構築しようとすると、ほぼボタン操作で設定しないといけないです。
- どのステージをデプロイするのか、設定した項目・手順を忘れた。もとに戻したい、引き継ぎを行いたいなどいろいろなケースが考えられます
再現性がない
- これに尽きると思います。
- 基本的にAPIGatewayの設定などはボタン操作です。もちろんgit管理などできない。
ステージの作成、レスポンスコード、methodの作成など操作を間違えても元に戻すことが難しくなり、実装コスト、人件費、考えるだけで大変なことが多すぎます。(大変だった。)
よって保守性・メンテ・引き継ぎが難しくなっていました。
そこでserverless frameworkの出番です!!
- 基本的にAWSコンソールでのボタン操作は不要!!
-
serverless.ymlですべて管理・設定ができる => 設定をgit管理できる
- aws cloudformationの形式と似ているため、最悪それを真似できます(cloudformationよりかんたん!)
- コマンド1発でデプロイとロールバックが可能
- 公式リポジトリにサンプルが沢山!!(こまりません)
- プラグインもたくさん(ぶっちゃけ使わなくても高機能!!)
- Expressと組み合わせると、超便利!!!!!(後日記事を書きます)
注意点など
- iamのadmin権限が必要です。
- Cloudfrontは設定できません。