Ошибка входа в таблицу при отправке запроса в развернутую службу в Cloud Run - PullRequest
2 голосов
/ 02 марта 2020

Я разработал специальную службу обеспечения для Tableau Server, используя службу Flask в Google Cloud Run. Я использую контейнер docker для развертывания моей службы в Google.

Служба работает нормально, когда я запускаю контейнер локально с почтальоном, однако при отправке запроса на развернутую службу я получаю сообщение об ошибке ниже. Облачный прогон.

<title>requests.exceptions.ConnectionError: HTTPConnectionPool(host='<mytableauserver.com>', port=80): Max retries
        exceeded with url: /api/2.4/serverInfo (Caused by NewConnectionError('&lt;urllib3.connection.HTTPConnection
        object at 0x3ed0efc890d0&gt;: Failed to establish a new connection: [Errno 111] Connection refused')) //
        Werkzeug Debugger</title>

app.py:

import os
import logging
from flask import Flask, jsonify, request
import provisioning

# Change the format of messages logged to Stackdriver
logging.basicConfig(format='%(message)s', level=logging.INFO)

app = Flask(__name__)

@app.route('/api/adduser', methods=['POST'])
def add():
    return jsonify(provisioning.add(request.json))

@app.route('/api/removeuser', methods=['POST'])
def remove():
    return jsonify(provisioning.remove(request.json))

@app.route('/', methods=['GET'])
def hello():
    return jsonify({'message' : 'Hello API'}) #Test Endpoint

if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0', port=int(os.environ.get('PORT', 80)))

provisioning.py:

import sys
import json
import tableauserverclient as TSC
import re


def sign_in(sitename):
    tableau_auth = TSC.PersonalAccessTokenAuth(
        token_name='<token_name>', personal_access_token='<token>', site_id=sitename)
    server = TSC.Server(
        server_address='<http://mytableauserver.com>', use_server_version=True)
    #server.add_http_options({'verify': False})
    server.auth.sign_in(auth_req=tableau_auth)
    return server  

def add(json_request):
    site = json_request["sitename"])
    session = sign_in(site) # Here is where the process fails
    site_role = json_request["rolename"]
    user = add_user_to_site(session, json_request, site_role)
    add_user_to_group(session, user, json_request)
    return json.dumps(json_request)

more code...

Dockerfile:

FROM python:3.8

ADD app.py /
ADD provisioning.py /

RUN pip install tableauserverclient
RUN pip install Flask

CMD [ "python", "./app.py" ]

То, что кажется странным, это то, что я могу войти на сервер локально с первой попытки (я полагаю), но когда я пытаюсь добраться до Cloud Run, он, кажется, пробует несколько раз, пока он не даст сбой. Я использую один и тот же код во всех контейнерах.

1 Ответ

1 голос
/ 03 марта 2020

На основании ошибки и аналогичных случаев:

Не удалось установить sh новое соединение: [Errno 111] Отказано в соединении '))

Кажется что ваш Python клиент не может подключить ваш сервер Tableau к вашему Cloud Run. Согласно статье Почему я получаю [Errno 111] Соединение отклонило ошибки в журналах моего приложения? :

Либо агент не запущен, либо клиент трассировки вашего приложения не работает ' настроен правильно. По умолчанию клиентские библиотеки tracer отправляют на localhost через порт 8126. Если это не то место, где слушает ваш агент - возможно, он слушает в каком-то контейнере Docker, смежном с вашим приложением, - укажите вашему клиенту tracer, где он работает, например, tracer .configure (hostname = "172.17.0.1").

Поиск в подобных случаях этой ошибки, я мог бы найти некоторые решения этой ошибки, что я бы рекомендовал вам взглянуть на нее.

Дайте мне знать, помогла ли вам информация!

...