サーバレス練習帳

着眼大局着手小局

elastic beanstalk上にdjangoを構築する

前回、途中で脱落してしまったのだが、、、今度こそ!
serverless.hateblo.jp

今回は、AWS公式のチュートリアルに、そのまま沿ってやってみます!
これ以外のことは、やらないぞ。
Elastic Beanstalk への Django アプリケーションのデプロイ - AWS Elastic Beanstalk

前回はフォルダ構成を間違えていたかなぁ。
このstackoverflowを見ながら、再度トライしてみたい。
stackoverflow.com

./ebdjango
↓
.
├── .ebextensions
│   └── python.config
├── .elasticbeanstalk
│   ├── config
├── .git
├── .gitignore
├── manage.py
├── ebdjango
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── requirements.txt

(1) python3.6をインストール
最新は3.7なんですが、AWS EBとの相性を考えて。
3.7はアンインストールして、3.6を入れました。
www.python.org

Python 3.6.6 - 2018-06-27
Windows x86-64 executable installer
インストール時は、”Add”Python3.6 to Path"のチェックオンも忘れずに。


(2) virtualenvをインストール

C:\python>pip install virtualenv

(3) AWS ebcliをインストール

pip install awsebcli --upgrade --user

path"Python 3.6 – %USERPROFILE%\AppData\Roaming\Python\Python36\Script"も設定の事
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb-cli3-install.html

(4) virtualenvで環境を作る

C:\python>cd env0001

少し待ちます。

当該フォルダに移動してから、アクティベートしましょう。

C:\python>cd env0001
C:\python\env0001>Scripts\activate

(5)djangoを仮想環境にインストールする

(env0001) C:\python\env0001>pip install django==2.0

python3.6に対応しているのがdjango2.0だったような気がするので、このようにバージョンを指定しました。

(6)ローカルにプロジェクトを作る

(env0001) C:\python\env0001>django-admin startproject ebdjango

(7)まずはローカルで動かす

(env0001) C:\python\env0001>cd ebdjango

(env0001) C:\python\env0001\ebdjango>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
July 15, 2018 - 15:33:45
Django version 2.0, using settings 'ebdjango.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
[15/Jul/2018 15:33:49] "GET / HTTP/1.1" 200 16559
[15/Jul/2018 15:33:49] "GET /static/admin/css/fonts.css HTTP/1.1" 200 423
[15/Jul/2018 15:33:50] "GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 200 81348
[15/Jul/2018 15:33:50] "GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 200 80304
[15/Jul/2018 15:33:50] "GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 200 82564
Not Found: /favicon.ico
[15/Jul/2018 15:33:50] "GET /favicon.ico HTTP/1.1" 404 1974

(8) (CLIで初アクセスの場合)AWSのアクセスキーを払い出す
docs.aws.amazon.com
忘れないように、アクセスキーはどこかに記録しておきましょう。

(9) Elastic Beanstalk用の設定
さて、この開始位置のフォルダが重要です。仮想環境ではなく、プロジェクトフォルダの直下から始めましょう。
この例では、ebdjangoの直下です。

(env0001) C:\python\env0001>cd ebdjango
(env0001) C:\python\env0001\ebdjango>pip freeze > requirements.txt
(env0001) C:\python\env0001\ebdjango>mkdir .ebextensions

.ebextensions ディレクトリ内に、次のテキストを持つ django.config という名前の設定ファイルを追加します。

例 ~/ebdjango/.ebextensions/django.config

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango/wsgi.py

ここで、仮想環境から出ます。

(env0001) C:\python\env0001\ebdjango>..\Scripts\deactivate

まだ、フォルダの位置はプロジェクト"ebdjango"の直下ですよ。


(10) ebcli(elastic beanstalk command line interface)でサイトをデプロイする

C:\python\env0001\ebdjango>eb init -p python-3.6 ebdjango

Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
13) cn-northwest-1 : China (Ningxia)
14) us-east-2 : US East (Ohio)
15) ca-central-1 : Canada (Central)
16) eu-west-2 : EU (London)
17) eu-west-3 : EU (Paris)
(default is 3): 9
Application ebdjango has been created.

チュートリアルではオプションと書いてある"eb init"は実行せずに、次に行きます。

C:\python\env0001\ebdjango>eb create django-env

ここで数分を待つ。

環境の作成プロセスが完了したら、eb status を実行して新しい環境のドメイン名を見つけます。

~/ebdjango$ eb status

と、入力すると、、、

Environment details for: django-env
Application name: django-tutorial
...
CNAME: eb-django-app-dev.elasticbeanstalk.com

これが、欲しい文字列です。


ebdjango ディレクトリ内の settings.py ファイルを編集し、ALLOWED_HOSTS 設定を見つけ、先のCNAMEのプロパティ値を追加します。

...
ALLOWED_HOSTS = ['eb-django-app-dev.elasticbeanstalk.com']

ここで、デプロイします。

C:\python\env0001\ebdjango>eb deploy

最後に、eb openでブラウザが立ち上がります。

C:\python\env0001\ebdjango>eb open

f:id:urbanplanner:20180715160756p:plain
図:django画面

動いた~★

ここまでできて、良かったです。

さて、チュートリアルは、まだまだ続きます。

(11) 設定を変更する。
TIME_ZONE の settings.py 設定を変更する

例 ~/ebdjango/ebdjango/settings.py

...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

USE_I18N = True

USE_L10N = True

USE_TZ = True

そして、デプロイします。

C:\python\env0001\ebdjango>eb deploy

さら、ここから様々djangoアプリを作ってみますが、続きは、コチラにて。
serverless.hateblo.jp

(注意を追記
CSSを使っている場合は、以下の処理が必要です。
チュートリアルに書いてあるのですが、見落としやすいですね。

まず、settings.pyへの追記

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = 'static'

そして、静的アセットの追加。

(env0002) C:\python\env0002\ebdjango>python manage.py collectstatic