LoginSignup
1

More than 1 year has passed since last update.

posted at

updated at

Flask を Cloud Nativeアプリケーション にする

この記事は、求ム!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アプリケーション にする手順は簡単で、以下になります。

  1. Flask で Webサイトを作成する
  2. Dockerfile を作成する
  3. Docker イメージをビルドする
  4. Docker イメージを公開する
  5. 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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1