かなりご無沙汰です。
BeanstalkのMulti-Container DockerをPython Flaskを使って試してみたので
備忘録もかねての投稿になります。
※備忘録なのでメモレベルの記事なのはご容赦を。
連載一覧
Beanstalkとは
BenastalkはAWSのサービスを利用した
Webアプリケーションやバッチアプリケーションの環境を手軽に作ってくれるサービスです。
通常、AWSを利用してアプリケーションを構築する場合は
EC2インスタンスを立て、ミドルウェアやプログラム一式をセットアップし、
ロードバランサー(ELB/ALB)を立てEC2に紐付けを行い、
負荷に応じて自動的にインスタンスを増減する設定を行う・・・など
たくさんの工程が必要になります。
Beanstalkではこれらを手軽にセットアップすることができます。
また、JavaのアプリケーションであればApache/Tomcatは自動で構築され
warファイルをアップロードするだけで動作が可能で、
Python(Flask/django)ではApache/uWGISが自動構築されるので
プログラム一式をアップロードするだけで動きます。
より自由度の高い環境を用意する場合はDockerを利用することで
EC2上に任意のDockerコンテナを複数立ち上げることができます。
今回はそのMulti-Container Docker構成について書いていきます。
構成説明
構成としてはBeanstalk上にNginxのコンテナとuWSGIのコンテナを立ち上げます。
ざっくりとした構成イメージは以下。
今回はDBは利用しません。BeanstalkはRDSも立ち上げられますが
Beanstalkの環境を終了させるとRDSも終了してしまうようなので
RDSを立ち上げる場合はBeanstalkとは別で立ち上げると良いでしょう。
また、multi container dockerの場合はコンテナを落とすと
ログなども消失してしまうのでCloudWatchLogsと連動させます。
今回は基本的にCLIにて構築を進めて行きます。
そのためAWS CLIなどは設定済みの前提。
Benastalk専用のコマンドラインツールはこちらからセットアップしてください。
Beanstalkの用語や初期設定
Beanstalkでは重要なこととして
【アプリケーション】【環境】という概念があります。
一般的なシステム開発では本番(商用)環境、結合試験環境、受入環境・・・など
1つシステム(サブシステム)内に複数のシステムセットがあると思います。
これが【環境】。
ですのでそれぞれの環境ごとに上述の絵にあるAWSサービスが存在します。
この環境をグルーピングした単位が【アプリケーション】となります。
アプリケーションを作る場合はEBコマンドラインツールを利用しますが
コマンドを実行するカレントディレクトリが重要です。
このディレクトリにあるファイルがBeanstalkのEC2サーバに配備されます。
また、ディレクトリに特定のファイルがあるとアプリケーション初期化時に
自動でその構成のEC2を作成してくれます。以下が一例。
- application.pyはあればPythonの実行環境
- DockerfileであればシングルコンテナのDocker構成
- Dockerrun.aws.jsonがあればマルチコンテナのDocker構成
今回はDockerrun.aws.jsonを利用しますが
このファイルの詳細は次回以降でお伝えします。
Beanstalkの初期設定手順
eb init
を実行します。AWSプロファイルを分ける場合は[--profile matsui]などをしましょう。
対話にていくつか質問されます。
- ap-northeast-1 : Asia Pacific (Tokyo)
・
・
・
(default is 3): 9
リージョンの設定では東京リージョンを選びます。
Enter Application Name
(default is "xxxxxxx"):
アプリケーションの名前を設定します。
デフォルトでは実行しているディレクトリの名前になりますので
問題ないのであれば空白でEnterを。変更の必要があれば変えてください。
It appears you are using Multi-container Docker. Is this correct?
(Y/n): Y
先ほどお伝えしたようにDockerrun.aws.jsonファイルがあるので推測してくれました。
問題ないのでYを設定します。
Do you want to set up SSH for your instances?
(Y/n): Y
SSHでEC2(Dockerのホストサーバ)に繋ぐ必要があるか聞かれます。
繋ぎたいのでYとしましょう。すると・・・
Select a keypair.
- xxxxxx
- [ Create new KeyPair ]
(default is 1): 1
SSHのkeypairが聞かれます。AWSアカウントに登録済みのものが出ますので
適切なものを選択してください。ここで設定したkeypairの秘密鍵(pemファイル)は
ローカルに「~/.ssh/」に置いておく必要があります。
ここに置くと環境作成後に「eb ssh」コマンドで自動的にその鍵が選択されて接続することができます。
ここまで行くと環境が出来上がりますのでAWSのWebコンソールからBeanstalkの
東京リージョンの画面を見るとアプリケーションが作成されていることが確認できます。
(左上の「xxxxx」がアプリケーション名)
続きは次回に!