Eu desenvolvi um serviço de provisionamento sob encomenda para Tableau Server usando um serviço Flask no Google Cloud Executar. Eu uso um recipiente janela de encaixe para implantar o meu serviço no Google.
O serviço funciona bem quando eu executar o recipiente localmente com carteiro, no entanto, eu recebo o erro abaixo quando eu enviar a solicitação para o serviço implantado no Cloud Executar.
<title>requests.exceptions.ConnectionError: HTTPConnectionPool(host='<mytableauserver.com>', port=80): Max retries
exceeded with url: /api/2.4/serverInfo (Caused by NewConnectionError('<urllib3.connection.HTTPConnection
object at 0x3ed0efc890d0>: 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" ]
O que parece estranho é o fato de que eu possa assinar no servidor localmente na primeira tentativa (eu acho), mas quando tentar alcançar o Run Nuvem, parece ser tentar várias vezes até que ele falhar. Eu uso mesmo código em todos os recipientes.
Com base nos casos de erro e semelhantes:
Falha ao estabelecer uma nova ligação: [Errno 111] Conexão recusada '))
Parece que o seu Python cliente não está sendo capaz de conectar seu Tableau Server com o seu Nuvem Run. De acordo com o artigo Por que estou recebendo [ErrNo 111] Conexão erros recusado em meus logs de aplicativos? :
Ou o agente não está em execução, ou o cliente tracer do seu aplicativo não está configurado corretamente. Por padrão, as bibliotecas de cliente tracer submeter à localhost na porta 8126. Se este não é o lugar onde o seu agente está escutando-talvez de escuta em algum recipiente Docker adjacente ao seu recipiente ponto de aplicação seu cliente tracer para onde ele está correndo, por exemplo tracer.configure (host = "172.17.0.1").
Pesquisando por casos semelhantes de este erro, eu poderia encontrar algumas soluções para este erro, que eu recomendo que você dê uma olhada nisso.
- Python cliente não conseguiu estabelecer uma nova conexão
- Falha ao estabelecer uma nova ligação: [Errno 111] Conexão recusada # 4092
- Falha ao estabelecer uma nova ligação: [Errno 111] Conexão recusada # 484
- documentação janela de encaixe-dd-agente
Deixe-me saber se a informação que ajudou!