Skip to content

Latest commit

 

History

History
87 lines (80 loc) · 5.11 KB

File metadata and controls

87 lines (80 loc) · 5.11 KB

コンテナアプリ開発

コンテナの特徴(サーバー仮想化との比較)

  • サーバー仮想化(VM)
    • ハイパーバイザー上に完全なゲストOSを構築し、その上でアプリケーションを実行。各VMは独立したカーネルを持ち、ハードウェアを仮想的に分割して利用。
    • 各VMが完全なOSを必要とするため、メモリとストレージの消費量が大きい。起動に数分かかることが一般的。同じハードウェア上で稼働できるVMの数は限定的
  • コンテナ化
    • ホストOSのカーネルを共有し、プロセスレベルで分離されたユーザースペースを提供します。OSレベルでの仮想化により、より軽量な実行環境を実現。
    • OSカーネルを共有するため、メモリ使用量が大幅に削減される。秒単位での起動が可能。同じリソースでより多くのコンテナを稼働できる

コンテナアプリのメリデメ

メリット

  • 環境の一貫性
    • 開発、テスト、本番環境で同じコンテナイメージを使用することで「開発環境では動いたのに本番で動かない」問題を大幅に削減できる。依存関係やライブラリのバージョンも含めて環境を丸ごとパッケージ化できる。
  • スケーラビリティ
    • 負荷に応じてコンテナインスタンスを素早く増減できます。Kubernetesなどのオーケストレーションツールと組み合わせることで、自動スケーリングも容易に実現できます。
  • リソース効率
    • VM(サーバー仮想化)と比較して軽量で、同じハードウェアリソースでより多くのアプリケーションを稼働させることができます。起動時間も短く、メモリ使用量も少ないです。

デメリット

  • 学習コスト
    • Docker、Kubernetes、レジストリ管理など、習得すべき技術が多く、初期の学習コストが高い
  • セキュリティリスク
    • コンテナイメージに脆弱性が含まれている可能性があり、イメージの定期的な更新や脆弱性スキャンが必要

コンテナを使えるAWSのサービス

  • EKS
    • 標準的なKubernetesを使用(ポータビリティが高い)
    • 豊富なKubernetesエコシステムを活用可能
    • 高度なオートスケーリングとネットワーキング機能
    • 学習コストが高い
    • 運用が複雑
    • コストが比較的高い(コントロールプレーン料金が発生)
    • 小規模なアプリケーションには過剰な場合がある
  • ECS
    • ヘルスチェック・自己修復機能
    • CPU・メモリ・ネットワークの細かいリソース制御
    • タスク定義による宣言的な設定管理
    • 設定項目が多く、初期学習コストが高い
    • ネットワーク設定(VPC、サブネット、セキュリティグループ)の理解必須
    • IAMロール・ポリシーの適切な設定が複雑
    • トラブル発生時の調査が困難
  • Lambda
    • 完全サーバーレス
    • 使用時間のみの課金
    • 自動スケーリング
    • 運用負荷ゼロ
    • 実行時間制限(最大15分)
    • コンテナサイズ制限(10GB)
    • コールドスタートの遅延
    • 長時間実行アプリケーションには不適
  • Elastic Beanstalk
    • 従来型アプリとコンテナ両方をサポート
    • 段階的なコンテナ移行が可能
    • 豊富なプラットフォームバージョン
    • アプリケーションバージョン管理機能
    • ブルーグリーンデプロイメント
    • 設定変更の履歴管理・ロールバック
    • オーケストレーション機能が弱い
    • コンテナ機能が限定的(基本的な機能のみ)
  • App-Runner
    • 設定が非常にシンプル
    • 自動スケーリング
    • ソースコードから直接デプロイ可能
    • 運用負荷が最小限
    • 自動的なHTTPS証明書の設定
    • 完全マネージドでサーバー管理不要
    • 機能が限定的
    • 複雑なアプリケーションには不向き
    • ネットワーク設定の制限
    • 比較的安価
  • LightSail
    • 固定料金でコスト予測が容易
    • 設定が非常にシンプル
    • CDN・カスタムドメインが標準装備
    • 本格的な本番環境には不適
    • 複雑な要件に対応困難
    • 非常に基本的なコンテナ機能のみ
    • オートスケーリング機能が限定的

学習コスト: LightSail < Lambda < App Runner < Beanstalk < ECS < EKS
運用負荷: Lambda < App Runner < LightSail < Beanstalk < ECS < EKS
機能の豊富さ: EKS > ECS > Beanstalk > App Runner > Lambda > LightSail

参考文献

AWSコンテナ設計・構築[本格]入門