クラウドを使いこなす - マネージド/サーバーレスで運用/保守中心の作業から脱却し、機能開発/サービス提供に注力したいと考える企業が増えています。情報はあちこちにあるけれどどこから始めたら良いかわからない、そんな開発者のための「今から始めるサーバーレス」情報です(随時更新)。
サーバーレスを始めよう ≫ エンジニア/開発者の方へ | アーキテクトの方へ | プロジェクト責任者の方へ
- まずは体験 - 最初は「Hello World!」
- 記述したコードがそのまま動く - 当たり前のことですが、この手順ではサーバーの準備も実行環境の設定もしていません。実際の処理実行時に必要なサーバーリソースが自動割り当てられているのです。それでいて、冗長化が考慮された構成になっています。
- 一つのアプリケーションを作る
- Hands-on for Beginners (5-10分 × 11本)
- 初めての動的 Web アプリ構築(2h 程度)
- サーバーレスによる処理フロー開発を体験する
- 視覚的に作るワークフロー
- 複数ファンクションをまたがるエラーフロー
「なぜサーバーレス?」 それに対する答えとなるビジネス上の意味はいくつかあります。
- 代表的な効果
- 開発生産性
[実例] 33% の生産性向上
- 運用・保守の効率化
[実例] ほぼゼロの運用作業
- アジリティ
[実例] 展開スピード 5 倍向上 - あらためて、サーバーレスを理解する
- サーバーレスのおさらい(PDF資料) - 参考ホワイトペーパー
- 企業エコノミクスの最適化
(技術的な観点から経済的な効果を解説)
次のステップ: 開発環境やフレームワークを整備するとともに、典型的なパターンを認識すれば全体デザインを迅速に進められます。
タブを選択してその情報にアクセスしてください。
-
1. 開発環境・フレームワーク、サービスの理解
- 開発環境を整える
- Serverless Application Model / SAM(紹介資料 | ハンズオン)
- クラウド上で使える開発環境: AWS Cloud9
- [Tutorial] Cloud9 を使った構築とデバッグ
- または使い慣れた開発ツールを使う
- Eclipse、Visual Studio、VS Code、IntelliJ、PyCharm
- [New] Application Composer for VS Code
お手元の PC 環境でサーバーレス
アプリの開発とデバッグを進める
手順をご紹介します。- アプリ開発のフレームワークを選ぶ :
必須ではないですが生産性や保守性でメリットがあります
- モバイルフロントエンド: Amplify - [Tutorial] (英語)
- Python向け: Chalice - [Tutorial] (英語)
- Node.js向け: Serverless Express
- Java Spring : Serverless Java Container
[参考] Serverless Express/Java Container 紹介
- Ruby on Rails ライク: Ruby on Jets
チーム開発・CI/CD 環境の整備- すでにご利用のビルド環境に組み込む
GitHub、Jenkins などと統合したパイプライン構築が可能です
- [New] SAM Pipeline(参考記事)
- モバイル Web アプリなどの個別 Project 向けお手軽版 : Amplify コンソール
- [Tutorial] フロントエンドとともにバックエンドをデプロイ
- 新規に CI/CD を作りたい人向け:
テンプレートベースのサーバーレス App 作成
ユースケースを選ぶと、対応した App テンプレートと CI/CD 環境を一気に作成。フレームワークや CI/CD 環境にこだわりがなければ便利! こちらで機能を紹介しています。
- AWS サービス別資料(BlackBelt)
- Lambda : Part1/2、Part3、Part4
- API Gateway、Step Functions
- EventBridge、SQS、SNS、MQ
- AppSync、Amplify
- Cognito
- その他の資料
- 一般書籍
- [New] AWS で実現するモダンアプリケーション入門
- Amazon Web Services を使ったサーバーレスアプリケーション開発ガイド
- まだまだあります、関連書籍 ≫ こちら - 開催セミナー情報(サーバーレスに限りません)
- AWS 主催、Loft 開催
- 開発環境を整える
-
2. ユースケースパターン
動的Webシステム、REST API、ログデータ処理、データの連続加工処理など、
やりたいこと(ユースケース)から典型的なパターンを選択して、その形/アーキテクチャをベースに検討できます。
-
3. データ設計・エラー制御・監視・再利用
- データ設計関連
- サーバーレス + RDS(利用方法 / 技術情報)
- サーバーレスアプリケーション向きの DB 設計(for DynamoDB)
- 処理フロー、エラー制御/リトライ
- [注目!] エラーハンドリング・シリーズ
- Step Functions ビジュアルエディタ
- 複数ファンクションをまたがるエラーフロー: [Tutorial]
- エラー制御の勘所とモニタリング
- DLQ を理解する - テスト: サーバーレスのテスト手法を考える
- チューニング/最適化/チェック項目
- チューニング
- Compute Optimizer
- 最適化ブログシリーズ(Part1, Part2, Part3)
- Java の階層型コンパイル(リンク)
- JVM/Scala on Lambda で大量リクエスト処理(リンク)
- 処理の並列化: Distributed Map 活用(Tutorial | 事例)
- 設定チェック: Trusted Advisor
- 設計の考慮点の抜け漏れチェック: Well-Architected
→ PDF で見る / AWS Well-Architected Tool で使う - セキュリティ: アクセス制御、データ保護、インフラ保護
- サーバーレスがやってくれること、開発者が考えるべきことの整理
→ 実践 Serverless セキュリティプラクティス
(関連ホワイトペーパー[中上級者向け]) - 監視/追跡/分析
- 全体観の解説 → Serverless モニタリング
- 関数の監視(Lambda Insights)
- アプリの分散トレース: X-Ray、CloudWatch ServiceLens
- 3rd パーティ監視ツール(Lambda Extensions 対応)
Datadog、New Relic、AppDynamics、Splunk...
- Observability ワークショップ - 成果物の再利用
- CloudFormation として再利用する
- SAM として再利用する
- Serverless Application Repository 経由で再利用する
- 開発関連
- Java で開発するなら
- AWS SDK for Java v2 : v1 よりも起動時間が改善(参考)
- [New] SnapStart でコールドスタートを改善(記事)
- 共通利用ライブラリ・ネイティブモジュールの利用
→ Lambda Layers が有用です
例: お客様による Ruby 環境での native extensions 活用
- デプロイサイズが大きくなる(ライブラリが大きい)
→ Lambda Containerイメージを使うと 10G まで対応できます
- 機械学習モデルの推論処理で大きなデータ処理領域が欲しい
→ EFS に ML モデルを配置して Lamdba からアクセスできます
→ または、一時ストレージ領域を拡大できます
- ローカル環境での開発・テスト
- ローカルPCへのサーバーレス開発環境の整備
- SAM CLI(SAM Local)
- Step Functions のローカルテスト
- DynamoDB Local または LocalStack: オープンソースプロジェクト - 本番環境を使ったテスト:
API 公開前にテスト用サーバーからのみアクセスできるようにしたい
→ リソースポリシーで設定できます - バージョン管理・ステージング
- Lambda: バージョニング、エイリアス(ステージ管理)
- API Gateway: ステージ機能
- Step Functions: バージョニング、エイリアス - 異なるバージョンへ徐々にトラフィック移行させたい
- Lambda: エイリアスを利用したトラフィックの移行
- API Gateway: Canary リリース機能の利用
- データ設計関連
-
4. その他の考慮事項
- アンチパターン
- [注目!] VPC Lambda はもうアンチパターンではなくなりました!
→ こちら(2019/09) - [注目!] Lambda + RDS はもうアンチパターンではない!
→ 利用方法 、技術情報(2020/08) - [注目!] Lambda コールドスタートはもはや対処可能です!
→ 1. Provisioned Concurrency 機能の利用(2019/12)
→ 2. 待望の SnapStart 機能(2023/01) - [参考: 旧] アンチパターンとチューニング
- 同時実行数、コールドスタートなどを解説
→ こちら(2017/06資料)
ただし、記載のアンチパターンはもう過去のものです
- [注目!] VPC Lambda はもうアンチパターンではなくなりました!
- 本番を想定した負荷テストに関する注意事項
- 毎秒 x,000 リクエストのような高負荷が予測されるケース(キャンペーン用 Web サイトなど)では、アプリケーション全体として問題ないかどうかをテストする必要があります。これはサーバーレスアプリでも例外ではありません。
- 実際に負荷をかけると、サーバーレス型サービスで設定されているデフォルトの上限設定で流量制御されてしまう可能性もありますし、サーバーレス型サービス以外の部分が詰まって処理が流れないという可能性もあります。これを確認するには、ある程度を負荷をかけてテストするのが一番です(机上の計算では見落としがよく発生します)。
- AWS の担当窓口ではこうしたご相談の対応しております。ぜひご相談ください。
- よくある質問: 技術観点
- Lambda 実行時間: 最大 15分 に処理を区切って設計する。サービス単位のマイクロ化の一つの指針として使うこともできます。
ファイル処理のケースで 15分を超えそうな場合は、分割並列実行をしてくれる Distributed Map 機能も一案です。 - Lambda 同時実行数: 初期設定はアカウントで 1,000。
上限緩和が可能です。高負荷テストなどは、徐々に負荷を上げながら緩和リクエストしていただくことをオススメします。
関数ごとに同時実行数の上限を設定して処理の優先度を管理することもできます。 - 処理が細分化すると問題が起きたときの識別やエラー制御が難しい: Step Functions を使うのが一案です。一連のフローの可視化やエラー制御として有効です。
- 処理が細分化すると問題分析やパフォーマンス分析が難しい: X-Ray や CloudWatch ServiceLens を使うのが一案です。処理横断型での処理状況の可視化ができます。
- その他: こちらも参照ください
- Lambda 実行時間: 最大 15分 に処理を区切って設計する。サービス単位のマイクロ化の一つの指針として使うこともできます。
- よくある質問: プロジェクト観点
- 見積もりが難しい
サーバーレスアプリは複数の異なる AWS サービスの組み合わせとなるので利用料の見積もり計算が煩雑になりがちです。プロジェクトの初期フェーズでまだ詳細アーキテクチャが固まっていない段階での詳細計算をやっても、ブレが出ますのでは労力に見合わない可能性があります。以下のようなテクニックを使っているお客様もいらっしゃるので参考にしてください。- 概算見積もり(およその予算感が求められる段階)では、精緻な計算をするよりも、対象ユースケースに近い見積もり例を参考に、それとご自身のケースの規模感の差異(倍率)で概算します。
- 例: 会員向けサイトを想定の場合、自身の対象のアクティブ会員が 8万だとしたら、こちらの例(アクティブ会員 1万のケース)を 8倍にして予算感を把握します。このようなユースケース別の見積もり例はいくつかあり、ユースケースパターンのページから辿ることができす。
- 概算見積もりで企画が通った後、機能確認目的も兼ねて、小さなプロトタイプを作ってみます。これでアーキテクチャの調整をしながら、小さい実負荷で費用感を確認できます。本番の想定負荷の比率を掛け算することでより実利用に近い費用予測をたてられます。
- 概算見積もり(およその予算感が求められる段階)では、精緻な計算をするよりも、対象ユースケースに近い見積もり例を参考に、それとご自身のケースの規模感の差異(倍率)で概算します。
- 見積もりが難しい
- アンチパターン
- ファンクション: AWS Lambda | API インタフェース: Amazon API Gateway | モバイル/ GraphQL: AWS AppSync | オーケストレーション/ステート管理: Step Functions | 認証/認可: Amazon Cognito | 開発環境: AWS Cloud9 | メッセージキュー: Amazon SQS | メッセージ通知: Amazon SNS | イベントバス: Amazon EventBridge
関連情報・ご相談
サーバーレスのビジネス価値を数字で理解
≫ 「サーバーレスのビジネス効果とは」
アーキテクト・設計担当にご紹介したい
全体設計の考え方のページ
≫ 「形で考えるサーバーレス設計」
資料請求やユースケース相談がしたい
≫ AWS クラウドの無料相談
技術的なディスカッションがしたい
≫ AWS Loft Tokyo - Ask an Expert
などが利用可能です