2017-10-13 1 views
1

최근 로컬 컴퓨터에 mysql 데이터베이스의 데이터를 읽고 Google big 쿼리에 삽입하는 python 코드를 개발했습니다. 인증 서비스 계정을 사용합니다. 목적과 내 코드를 오류없이 성공적으로 실행할 수 있습니다. 이제 도커 파이썬 컨테이너에서 스크립트를 실행하려고합니다. 코드를 실행하면 사용자와 시스템 간의 상호 작용없이 자동으로 처리하는 방법을 잘 모르는 인증 메시지를 받게됩니다.docker를 사용하여 google big query에 데이터를 읽고 쓰는 python 스크립트 처리

메시지는 다음과 같습니다

"이 응용 프로그램에 권한을 부여하기 위해 URL을 방문하십시오 https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=4xxxxxxxk0tmvj2m941jhre2nbqka17vqxxfxxx.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%xxxxxxxb&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fbigquery&state=kszePnO3tOxxxxxx&prompt=consent&access_type=offline 이 인증 코드를 입력 : 역 추적 (가장 최근의 호출 마지막) : ... .........

는 EOFError : EOF 라인을 "

내 파이썬 코드를 읽을 때 :

import mysql.connector 
import pandas as pd 
from oauth2client.client import GoogleCredentials 
from bigquery import get_client 
import os 
import urllib.request 

service_account = '[email protected]' 
key = 'xxxxxxxxx.p12' 
project_id = 'xxxxxxxxx' 
db = mysql.connector.connect(user=$user, 
password=$password,host=$host,database=$database) 
df= pd.read_sql(sql_query,db) 
.... 
client = get_client(project_id, service_account=service_account, 
private_key_file=key, readonly=False) 

#Push dataframe to google bigquery 
df.to_gbq('GoogleBQDatbaseName.TableName',projectid,verbose=True,if_exists='append') 

스크립트에서이 인증 문제를 자동으로 처리 할 수있는 방법에 대한 제안. 내가 같은 일을 당신에게

답변

1

감사, 그래서 구글의 인증과 dockerfile의 일부는 다음과 같습니다

RUN apt-get install -y software-properties-common curl 

RUN export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"; echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list 

RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - 

RUN apt-get update && apt-get -y install google-cloud-sdk 

COPY YOUR_JSON_KEY_HERE.json /keys/ANY_NAME.json 

ENV GOOGLE_APPLICATION_CREDENTIALS ANY_NAME.json 

RUN gcloud auth activate-service-account --key-file=/keys/ANY_NAME.json 

그래서 당신이 구글에서 서비스 계정 중앙 Google 클라우드 콘솔에서 JSON 키를 얻을 만들어야합니다. 또한 내가

FROM ubuntu:16.04 

을 사용하고 그리고 파이썬 스크립트에서이 경우에 당신은 인증을 구글하지 않을 수 있습니다. 코드의이 부분이 필요하지 않다는 것을 의미합니다.

client = get_client(project_id, service_account=service_account, private_key_file=key, readonly=False) 
+0

바실리 ... 솔루션을 사용해 주셔서 감사합니다. 불행히도, 지금은 충분한 권한이 없기 때문에 서비스 계정에 대한 JSON 파일을 만들 수 없습니다. 나는 단지 내 프로젝트에 p12 파일, 프로젝트 ID 및 서비스 계정 이메일 파일을 가지고 있습니다. 내 로컬 시스템에서 제대로 작동하므로 JSON 파일을 작성하지 않고 도커에서이를 처리 할 수있는 솔루션이 있다고 생각했습니다. 로컬 Mac 컴퓨터. –

+0

json 대신 p12 키 파일을 사용해 볼 수도 있지만 작동 여부는 모르겠습니다. –

관련 문제