この記事は、求ム!Pythonを使ってAzureで開発する時のTips!【PR】日本マイクロソフト Advent Calendar 2020 の 9 日目です(後から追っかけで書いています)。
Flask を Cloud Nativeアプリケーション にするって話です。
※ Cloud Nativeアプリケーション開発のTips! でもあるのですが、Qiita の仕様で、いずれか一つの Advent Calendar にしか参加できないようなので、Pythonを使ってAzureで開発する時のTips!に参加しています。
What is Flask?
Flaskは、Python 用のウェブアプリケーションフレームワークです。
How to make Flask a Cloud Native application?
Flask を Cloud Nativeアプリケーション にする手順は簡単で、以下になります。
- Flask で Webサイトを作成する
- Dockerfile を作成する
- Docker イメージをビルドする
- Docker イメージを公開する
- Docker イメージを使用して、Azure Web Apps を作成する
以下に 実行コマンド例を記載します。
1. Flask で Webサイトを作成する
$ mkdir flaskwebapps
$ cd flaskwebapps
$ touch app.py
$ touch requirements.txt
app.py
を VS Code などのお好みのエディタで開き、以下のコードを追記します。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Flask!"
if __name__ == "__main__":
app.run(host='0.0.0.0')
requirements.txt
を VS Code などのお好みのエディタで開き、以下のコードを追記します。
Flask
2. Dockerfile を作成する
$ touch Dockerfile
Dockerfile
を VS Code などのお好みのエディタで開き、以下のコードを追記します。
FROM python:3.8
RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "/code/app.py"]
3. Docker イメージをビルドする
$ docker build -f Dockerfile -t flaskwebapps:latest .
4. Docker イメージを公開する
Azure Container Registry(以下ACR) や Docker Hub などに Docker イメージを公開します。
以下では、Azure CLI で ACR に公開するイメージを登録しています。
$ az acr create --resource-group [リソースグループ名] --name [ACR 名] --sku [好きなの選択] --admin-enabled true --location [リソースグループと同じ場所]
$ docker tag [タグ] [イメージ名]
$ az acr login --name [ACR 名]
$ docker push [イメージ名]
5. Docker イメージを使用して、Azure Web Apps を作成する
まず、Azure CLI で App Service Plan を作成します。
$ az appservice plan create --resource-group [リソースグループ名] --name [App Service Plan 名] --sku [B1とかS1とか指定] --location [リソースグループと同じ場所] --is-linux
Azure CLI で App Service Plan と ACR の Docker Image をパラメーターに指定して App Service を作成する
$ az webapp create --resource-group [リソースグループ名] --plan [App Service Plan名] --name [App Service 名] --deployment-container-image-name [イメージ名]
次に、Azure CLI で App Service と ACR を関連づけます。
$ az webapp config container set --name [App Service 名] --resource-group [リソースグループ名] --docker-custom-image-name [イメージ名] --docker-registry-server-url [ACR の場所] --docker-registry-server-user [ACR 名] --docker-registry-server-password [ACR の Password]
次に、Azure CLI で App Service に CD を設定します。
$ az webapp deployment container config --resource-group [リソースグループ名] --name [App Service 名] --enable-cd true
続いて、Azure CLI で ACR に Webhook を設定します。
$ az acr webhook create --name [App Service 名] --resource-group [リソースグループ名] --scope [ACR の名とタグから場所を引いたもの] --location [リソースグループと同じ場所] --uri [URI] --actions push delete