[Day 29] Final Project (5/5) — 部署 App 到 Google App Engine

前情提要

昨天我们成功将模型部署到 Google AI Platform 上,并且也处理了授权的问题,最後让 App 成功的运作了,今天我们要完成最後一个步骤 — 部署 app 到 App Engine,也就是完成工作流程中剩下的部分:
True workflow
最後我们就能像下图一样透过网址来存取 App 进行预测了:
app

将 App 部署到 App Engine

今天的内容会进展得比较快,要好好跟上哦:

  1. 首先在终端机执行 make gcloud-deploy,然後等个几分钟。

然後 App 就部署成功了,可以到 GCP 的主控台,应该可以看到资源的部分出现了 App Engine:
console

哈哈,到底发生了什麽事,其实当我们执行 make gcloud-deploy 会触发 Makefile (ironbird/Makefile) 里的 gcloud-deploy 指令,而它实际上会执行:

gcloud app deploy app.yaml

因为前面我们已经安装好了 Google Cloud SDK,所以我们可以使用 gcloud 的功能,而上面的指令的意思是请 Google Cloud 把该做的事情做一做,让我们本机端的 App (ironbird/app.py) 可以在 App Engine 上执行。
gcloud app deploy 实际上会完成以下几件事:

  • 把 App 放进以 ironbird/Dockerfile 定义的 Docker 容器 (container) 中。

    可以把 Docker 容器想像成一个生态瓶,里面包含了支援 App 生存的生态系,而带着这个容器就能让我们的 App 在任何能使用的 Docker 的地方跑起来。

  • 等 Docker 容器建立完成後,再把它变成 Docker 映像档 (image)。

    把它想成容器的快照版本,也就是拿到哪都不会改变。

  • 把 Docker 映像档上传到 Google Container Registry (GCR)
  • 等 Docker 映像档放进 GCR 後,它就能被部署到以 ironbird/app.yaml 定义的 App Engine 实例 (instance) 中,而 app.yaml 其实只有两行:
    runtime: custom # 想要执行我们自订的 Docker 容器
    env: flex # 想要 App Engine 有弹性一点,并安装我们需要的函式库 (requirement.txt)
    

如果今天的步骤都顺利完成的话,我们就能在以下网址使用 App 了:

http://<YOUR_PROJECT_NAME>.ue.r.appspot.com/

解密 Ironbird

ironbird 资料夹 中有数个档案,这里将它们的功用整理如下:

  • .dockerignore:在创造 Docker 容器时要忽略的档案与资料夹 (跟 .gitignore 在 commit 时的功用类似)。
  • Dockerfile:一连串关於我们的 Docker 容器该怎麽建立的指示。
  • Makefile:让我们可以使用像是 make gcloud-deploy 等简单的指令来执行更复杂的指令 (请参考 What is a Makefile and how does it work?)。
  • SessionState.py:让我们的 Streamlit app 保持状态 (不要按个钮就删掉一切) 的 Python 脚本 (请参考 Streamlit 论坛)。
  • app.py:我们使用 Streamlit 建立的 Ironbird App。
  • app.yaml:一连串关於当我们部署 App 时该建立哪种 App Engine 实例的指示。
  • requirement.txt:所有执行 app.py 所需的函式库。
  • utils.pyapp.py 会使用的帮手函式。(避免 App 变得太大)

<<:  [从0到1] C#小乳牛 练成基础程序逻辑 Day 29 - 加速器 中/英打typing games 六大推荐

>>:  [DAY 29]用GooseMod轻松改变discord主题

MyBatis 设定

MyBatis设定 ...

【day22】FCM云端通讯测试

各位如果没有关APP通知的时候,有时候我们就会收到来自APP的关怀,譬如说是有优惠活动,或是您的吴...

Day 1:前言

程序语言的种类成千上万,决定好要学哪个了吗? 在FB程序语言社团里,几乎每天都会有人提问:「我该从...

Day 12 - 物品借用纪录系统 (3) 系统完成

今天我们就把整个服务完成吧! 不知道大家顺利地收到通知了没? 我已经顺利收到罗~ 咦咦咦?发生什麽事...

DAY26 学习30天的c++

cin成员函数 除了使用setw()函数设定输出格式外,还可用cin成员函数更改cin的预设输入格式...