最近Webフレームワークをちゃんと勉強したくてDjango Girlsチュートリアルをやりました。
Webシステムを作ったことはあるけど、Webフレームワークを触ったことない自分でもわかりやすくてよいチュートリアルでした。
話は変わって2018年7月にAWS Fargateが東京リージョンに出てきた影響もあって、
AWSのコンテナサービスもいろいろ触って動かしています。
勉強がてらDjangoをElastic Container Service(ECS)上で動かす環境を構築しました。
今回構築したAWS環境はCloudFormation(CFn)で作成しており、テンプレートはGitHubで公開しています。
AWS構成図
今回構築するAWSの構成はこんな感じです。
Elastic Load Balancerを前段に置いて、動的ポートマッピングを利用してEC2上で動作しているECSのタスクへアクセスできるようにしています。
Elastic Container Repository(ECR)の作成
CFnテンプレート( cloudformation/template-for-ecr.yml )を使用して、CFnスタックを作成してECRを構築します。
CFn動作完了後に、ECRへのpushコマンドがアウトプットされるようになっています。
AWSのデフォルトプロファイルを環境変数に設定したうえで、ECRのプッシュコマンドを実行すると、ECRにDockerイメージが構築できます。
$ export AWS_DEFAULT_PROFILE=<<YOUR PROFILE>>
$ <<PushCommandsForEcrをコピー&ペーストして実行>>
Elastic Container Service(ECS)の作成
CFnテンプレート( cloudformation/template.yml )を使用して、CFnスタックを作成してECSほか必要な環境を構築します。
CFn動作完了後に、ELBのURLがアウトプットされるようになっています。
URLにアクセスしてDjangoの動作を確認できます。
動作確認
URLにアクセスするとDjangoが動いていることを確認できます。
URLの後ろに admin/
を追記してアクセスするとDjango管理サイトが開きます。
ユーザー名とパスワードは以下の通り設定しています。
- USER: test
- PASS: test-password
ログインしてトップページ右上の +
ボタンをクリックするとブログの投稿ができます。
投稿するとトップページに反映されますが、SQLiteで動作しているため、ECSのタスクが止まると投稿したデータはすべて消えてしまいます。
所感
とりあえず、AWS ECSを利用してDjangoを動かすことができました。
ECSの概念は動かして見ないとわからないところが多いなーと感じたので、ガシガシ動かしていきたいです。
本番運用で使うには次のようなことをまだまだ考えていかないといけませんが、とりあえず動かせるところまでいけたので満足です。
- RDSとの接続
- ログの保存をどうしていくか
- 運用監視
- エラー発生時のハンドリング