タグ: Elastic Beanstalk

  • 【DOP-C02】Elastic Beanstalkの概要と主要な概念についてまとめてみた

    【DOP-C02】Elastic Beanstalkの概要と主要な概念についてまとめてみた

    はじめに

    DOP-C02の勉強を進めていく中で、Elastic Beanstalkに対する理解が曖昧であることに気づきました。(というか実際に触っていないのでイメージが付かない)

    今日はElastic Beanstalkの概要についてまとめます。可能ならサンプルアプリケーションを作って理解を深めようと思います。(時間なかったのでリベンジします。)

    1. Elastic Beanstalkとは?

    AWS Elastic Beanstalk は、Web アプリケーションの

    • デプロイ
    • 管理
    • スケーリング

    を簡素化するためのフルマネージドサービスです。
    カテゴリとしては、PaaSに属します。

    開発者がアプリケーションのソースコード(ZIP ファイルや WAR ファイル)や Docker コンテナイメージをアップロードするだけで、Elastic Beanstalk は容量のプロビジョニング、ロードバランシング(ALB/NLB)、Auto Scaling による自動拡張、およびアプリケーションの正常性モニタリングを自動的に調整・実行します。

    プログラムを書いてソースコードをアップするだけで、インフラを構築してくれる夢のようなサービスです。

    1-1. Elastic Beanstalkの名前の由来

    「Beanstalk(ビーンストーク)」という名称は、英語で「豆の茎(Bean + stalk)」を意味します。
    ※ 私はてっきり「Beans + talk」(豆たちの会話?)と思っていました…笑

    この名前は、有名なイギリスの童話『ジャックと豆の木(Jack and the Beanstalk)』に由来しているとされています。
    童話の中で小さな魔法の豆を庭に撒くと、一晩で天高く雲(クラウド)まで届く巨大な茎へと成長したように、「開発者が小さなコード(豆)を投じるだけで、自動的にクラウド上の堅牢でスケーラブルなインフラストラクチャ(巨大な茎)へと成長・展開できる」というサービスコンセプトが表現されています。

    参考: AWSのサービス名の意味を掘り下げてみた ~コンピューティングサービス編~

    1-2. Elastci Beanstalkの特徴とメリット

    この章では、Elastic Beanstalkの特徴とメリットについて説明をします。

    1-2-1. 幅広いランタイム・プラットフォームのサポート:

    Elastic Beanstalkは、幅広い環境をサポートしています。
    以下の以外にもDockerコンテナ環境もサポートしています。

    • Elastic Beanstalkがサポートしているプログラミング言語
      • Java
      • .NET
      • PHP
      • Node.js
      • Python
      • Ruby
      • Go
    • Webサーバ
      • Apache
      • Nginx
      • Passenger
      • IIS

    1-2-2. インフラストラクチャに対する完全な制御権

    作成されたリソースは、通常のAWSリソースと同じようにカスタマイズができます。
    ここはLightsailとは違う点ですね。

    1-2-3. 追加料金なしの明瞭な料金体系

    Elastic Beanstalk 自体の利用に対する追加料金は発生しません。
    作成・稼働する EC2 インスタンス、ロードバランサー、S3 バケットなどの AWS リソース使用料のみが発生します。

    2. Elastic Beanstalkを理解するための主要な概念

    この章では、Elastic Beanstalkを利用するために理解する必要がある概念について説明をします。

    参考: Elastic Beanstalk の概念を理解する

    2-1. アプリケーション(Application)

    Elastic Beanstalkにおける一番大きな概念です。
    「プロジェクト全体」と理解してあげると良さそうです。

    2-2. アプリケーションバージョン(Application Version)

    デプロイ可能なコードのまとまり(ZIPファイル、WARファイル、Dockerイメージの定義等)の特定のVersionです。

    アップロードされたソースコードは内部的に Amazon S3 バケットに安全に格納され、一意のバージョンラベルで管理されます。
    なので、実体は「S3のオブジェクト」と理解してあげても良さそうです。

    2-3. 環境(Environment)

    環境は、前述のアプリケーションバージョンを実行する AWS リソース(EC2, ALB, RDSとか…)の集合です。

    1環境⇔1アプリケーションバージョンという関係性です。
    当然、複数環境(例: prd, stg, dev)を作れば、複数の環境で並列稼働できます。

    環境を作成すると、Elastic Beanstalk は、指定したアプリケーションバージョンを実行するために必要なリソースを AWS アカウントで作成します。

    2-4. 環境階層(Environment Tier)

    用途に応じたインフラのパターンです。
    環境階層は、Elastic Beanstalk がサポートするリソースを決定します。

    • WebサーバTier: HTTP(S)でホストされるWebアプリケーション
    • ワーカーTier: SQSから、キューをプルするアプリケーション
    • クラスターTier: EKSコンテナを使用するアプリケーション

    2-5. プラットフォーム

    OS、プログラミング言語の実行環境、Web サーバー、に、Elastic Beanstalk 専用コンポーネント(ヘルス管理エージェント等)が組み合わせられた実行基盤です。

    環境とごちゃごちゃになりそうですが、プラットフォームがインフラの型(クラス)であるのにたいして、環境はプラットフォームから作成されたオブジェクト と理解すると良さそうです。

    むすび

    今回は、ElasticBeanstalkの概要をまとめてみました。

    実際に触ったわけではないので問題が解けるかどうかは微妙ですが、
    まぁ一度文章にしておけば、あとで参照できますしなんとかなるでしょう。