繁体   English   中英

如何在 Google Cloud 上提供 REST API?

[英]How to serve REST API on Google Cloud?

我在 Google Cloud 上为我的 Ubuntu 机器制作了一个 REST API。 如何将此 API 与公共 IP 地址连接?

在下面的代码中,我以 multipart/form-data 格式上传图像文件。

from flask import Flask, url_for, send_from_directory, request
import logging, os
# from werkzeug import secure_filename
import werkzeug
app = Flask(__name__)
file_handler = logging.FileHandler('server.log')
app.logger.addHandler(file_handler)
app.logger.setLevel(logging.INFO)

PROJECT_HOME = os.path.dirname(os.path.realpath(__file__))
UPLOAD_FOLDER = '{}/uploads/'.format(PROJECT_HOME)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER


def create_new_folder(local_dir):
    newpath = local_dir
    if not os.path.exists(newpath):
        os.makedirs(newpath)
    return newpath

@app.route('/Classifier01', methods = ['POST'])
def api_upload():


    app.logger.info(PROJECT_HOME)
    if request.method == 'POST':
      app.logger.info(app.config['UPLOAD_FOLDER'])

      #get image and save in ../uploads
      img = request.files['image']
      img_name = werkzeug.secure_filename(img.filename)
      create_new_folder(app.config['UPLOAD_FOLDER'])
      saved_path = os.path.join(app.config['UPLOAD_FOLDER'], img_name)
      app.logger.info("saving {}".format(saved_path))
      img.save(saved_path)

      #do some processing here

      return "I got your image"
    else:
      return "Where is the image?"

if __name__ == '__main__':
    app.run()

它从127.0.0.1:5000开始,如何在公共 IP 上创建它。

首先,启动您的应用程序以侦听 VM 的接口 -> 像这样运行app.run(host='0.0.0.0')

那么,你有2个解决方案

  • 使用 VM 的公共 IP 访问它。 不要忘记为此打开正确的防火墙规则(源 IP 范围= 0.0.0.0/0,端口 TCP 5000)。 但它并不完美。 您可以更新您的应用程序以侦听端口 80,以获取 Internet 上更标准的 API 端口。 您还可以在 VM 上插入 nginx。 在它上面,您还可以部署 SSL 证书并允许在 HTTPS 的 443 端口上访问您的服务。 pff,很多工作
  • 您可以为此使用HTTP(s) 负载平衡器 SSL 在自动管理中。 只需使用您的 VM(一个 NEG)创建一个后端、您的健康检查并设置您的前端。 这是最简单的方法!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM