AWS Elastic Beanstalkを使ってDjangoアプリをデプロイしてみた(前編)
読者の皆様の中には、システムやアプリ開発でAWSを使って実装している方も多いかと思います。
私自身も、スクラップ&ビルドでいろいろなシステムやアプリを作っています。
いずれも、趣味の範囲でやっているものなので、どれも作り込みは甘く、文字通りスクラップしているようなことが多いです(笑)
そんな中、なぜAWSを活用するようになったか、そして、今回、AWS Elastic Beanstalkを使ってみてどう感じたか、簡単に書いてみようかと思います。
目次
そもそもAWSってなに?
当ブログをご覧いただいている皆様はご存じだと思いますが、改めて、AWSとは何かというところからおさらいしていきます。
まず、AWSはAmazon Web Servicesの略で、みなさんご存じ、Amazonが提供しているクラウドサービスです。
クラウドサービスとしての有名どころでは、同じ米国発のMicrosoft AzureやGCP(Google Cloud Platform)、中国のAlibaba Cloudがありますが、2019年度の世界シェアではAWSが首位です。
そもそもクラウドサービス?って思う方もいると思うので、その点も補足します。
早く本題に!と思う方もいるかもしれませんが、もう少しだけ、お付き合いください。
クラウドサービスとは
今思えば社会人になったばかりで、ITのIの字も知らず、ましてやクラウドも知らなかった頃が懐かしいです。
クラウドとは、企業が用意したリソース(サーバをはじめとした機器からソフトウェアまで)を利用者が契約した分だけ、インターネット経由で自由に利用できるサービスのことです。
AWSを例に挙げると、Amazonが用意するリソース(サーバをはじめとした機器からソフトウェアまで)が、まるでクラウド、つまり雲のように莫大で、利用者から誰でもアクセスできる様を表しているんじゃないかと、個人的には解釈しています。
そして、クラウドとひとえに言っても、種類があるので、軽くおさらいしてみます。
IaaS、PaaS、SaaSとは
クラウドサービスは大きく分けて、IaaS(Infrastructure as a Service)、PaaS(Platform as a Service)、SaaS(Software as a Service)に分けられます。
以下の図は、これらに加えオンプレミスを並べた時、ユーザが管理する範囲を青、サービスが管理してくれる範囲を示したものです。
図はRedHat参照
それぞれのサービスの特徴を簡単にまとめます。
- IaaS
PaaS
AWSを例に挙げると、以下のような分類です。 - IaaS - EC2 - PaaS - Elastic Beanstalk - SaaS - AmazonFSxなど
補足として、WordPressの構築などでよく利用されるレンタルサーバについても触れておきます。
レンタルサーバと言えば、とりあえずエックスサーバー!みたいに思う人も多いかと思いますが他にも
などたくさんのサービスがあります。
そしてこれらも、ユーザにインフラを提供するIaaSに分類できなくもなさそうですが、レンタルサーバはあくまで共有であり、リソース利用の柔軟性に難があると考えていただければと思います。
参考として、IDCフロンティアの説明記事を掲載しておきます。
勉強目的で使うAWSの利点
自身の端末のリソースを食いつぶさない
筆者も、少し前は、VirtualboxやVMwareWorkstationなどを使って、自身の端末上に仮想マシンを立てて、検証などを行っていました。
ただ、スペックもりもりのPCを使っているわけでもなかったので、ファンがワンワン言って、しまいには固まることも。。。
といった感じで、端末のリソース消費が一因となり、オンラインのリソースを活用できるAWSを最近は利用しています。
ただ、毎回EC2を立ち上げてOSを乗っけて、ということを繰り返してばかりで、多数リリースされているAWSサービスのことを理解するきっかけがありませんでした。
そこで今回、アプリケーションを別の方法で、AWSに乗っけられないかと思い、Elastic Beanstalkを利用してみました。
唯一の難点はお金がかかること
そんな、AWSですが、やはりお金がかかることは難点かなと思っています。
もちろん当たり前なことではあるのですが、パソコン買うのにお金かかってるのにまたかかるのかよーみたいになる気持ちもわかります(笑)
最近はサブスクリプション型のサービスも増えてきて、「購入しても自分のものにならない」文化が定着してきているように感じるので、徐々にこの辺りの抵抗もなくなってくるのかなと思います。
また、AWSには無料枠があります。
以下に掲載の条件の範囲以内であれば、無料で利用できるので、ぜひご活用いただくとよいかなと思います。
とはいえ、1年というのはあっという間に過ぎるもので、気づいたら課金額が増えていることが多いです。。
「EC2を停止し忘れる。」「EC2は停止したけど、RDSの課金が続いている」など、検証が終わったのにもかかわらず、課金が続いていくことはしばしば。
どれを使っているか使っていないかというのを考えるのは、非常に面倒だと感じていました。
こんな状況で利用を考えたのがElastic Beanstalkです。
Elastic Beanstalkを選んだ理由
今回、Elastic Beanstalkを使ってみたきっかけは、ずばり、「インフラを気にしないでよい」です。
先ほど述べた通り、EC2やRDSを設定して、必要に応じてスケールアップやスケールアウトをして、、という作業がまぁめんどくさい!
目的が、クラウドでのインフラの構築であれば、それでも良いのかもしれませんが、アプリケーションの開発や検証が今の自分のモチベーションなので、そこを気にしない世界を体験してみたかったというのが本音です。
実際に、筆者もAWSが提供する無償ハンズオントレーニングを実施して、インフラ周り含めた構築を体験した後で、AWS Elastic Beanstalkを使ってみましたが、手軽さが段違いでした。
AWS Hands-on for Beginners | AWS
以下、AWS Elastic Beanstalkからの引用です。
Elastic Beanstalk で追加料金は発生しません。アプリケーションの保存、実行に必要な AWS リソース(EC2 インスタンス、S3 バケットなど)に対してのみ料金が発生します。実際に使用した分に対してのみ料金が発生します。最低料金や前払いの義務はありません。
料金 - AWS Elastic Beanstalk | AWS
この説明にもある通り、デプロイ後、最小構成で、インフラが設定されて、その後Auto Scalingグループに基づいて、インスタンスの拡張を行ってくれます。
この点が、アプリケーションの開発や検証においては、ストレスを低減してくれるのではないかと思っている部分です。
まとめ
本当はElastic Beanstalkにアプリをデプロイするところまでを書こうとしたのですが、その前段でもりもりになってしまいました。。
次回の記事では、実際に実行してみた流れを踏まえてご紹介できればと思いますので、よろしくお願いします!