2017-04-14 13 views
1

TL; DR: はどのように私は35.185.*Googleクラウドは - のpythonと同じプロジェクト内のPostgreSQLデータベースに接続し

へのIPアクセスを許可することなく、同じ「プロジェクト」でGCEインスタンスからPostgresのDBに接続します

print "importing" 
import pandas as pd 
import urllib 
import json 
from sqlalchemy import * 
from sqlalchemy import create_engine 
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey 
print "done importing" 
conn_string = 'postgresql://my_user:[email protected]/postgres' 
print "connecting" 
engine = create_engine(conn_string, echo=True) 
print "engine created" 
engine.connect() 
print "engine connected" 

print "getting data" 
data=json.loads(urllib.urlopen("http://ip.jsontest.com").read()) 
df=pd.DataFrame([data]) 
print "data retrieved" 
df.to_sql('insert_test',engine, index=False, schema='public', chunksize=500, 
            if_exists='append') 
:========

こんにちは、

私はローカルで動作する非常に簡単なテストスクリプトを持っています

は今、私は明示的に私のIPのためのDBへのアクセスを許可しているので、これは動作します: enter image description here

私の出力は、次のとおりです。

importing 
done importing 
connecting 
engine created 
2017-04-14 10:17:38,319 INFO sqlalchemy.engine.base.Engine select version() 
2017-04-14 10:17:38,323 INFO sqlalchemy.engine.base.Engine {} 
2017-04-14 10:17:38,381 INFO sqlalchemy.engine.base.Engine select current_schema() 
2017-04-14 10:17:38,385 INFO sqlalchemy.engine.base.Engine {} 
2017-04-14 10:17:38,440 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 
2017-04-14 10:17:38,447 INFO sqlalchemy.engine.base.Engine {} 
2017-04-14 10:17:38,483 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1 
2017-04-14 10:17:38,490 INFO sqlalchemy.engine.base.Engine {} 
2017-04-14 10:17:38,568 INFO sqlalchemy.engine.base.Engine show standard_conforming_strings 
2017-04-14 10:17:38,575 INFO sqlalchemy.engine.base.Engine {} 
engine connected 
getting data 
data retrieved 
2017-04-14 10:17:38,750 INFO sqlalchemy.engine.base.Engine select relname from pg_class c join pg_namespace n on n.oid=c.relnamespace where n.nspname=%(schema)s and relname=%(name)s 
2017-04-14 10:17:38,753 INFO sqlalchemy.engine.base.Engine {'name': u'insert_test', 'schema': u'public'} 
2017-04-14 10:17:38,832 INFO sqlalchemy.engine.base.Engine BEGIN (implicit) 
2017-04-14 10:17:38,841 INFO sqlalchemy.engine.base.Engine INSERT INTO public.insert_test (ip) VALUES (%(ip)s) 
2017-04-14 10:17:38,848 INFO sqlalchemy.engine.base.Engine {'ip': u'my_local_ip'} 
2017-04-14 10:17:38,903 INFO sqlalchemy.engine.base.Engine COMMIT 

私はGCEインスタンスにこのスクリプトを移動して、それを実行すると:

$ python hello_db.py 

私の出力は以下の通りです:

File "/home/user/anaconda2/lib/python2.7/site-packages/psycopg2-2.7.1-py2.7-linux-x86_64.egg/psycopg2/__init__.py", line 130, in connect 
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync) 
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection timed out 
     Is the server running on host "ip.of.my.db" and accepting 
     TCP/IP connections on port 5432? 

DBインスタンスと計算エンジンインスタンスは、同じ "プロジェクト"の一部です。

私は走ったので、私はIpのを知っている私のインスタンスIPが35.185.foo.blah.whateverで見ることができます:私は、タスクを分散し、クラウドを使用するために多くのインスタンスを起動すると、私のインスタンスのIP考える

wget "http://ip.jsontest.com" 

はおそらく、動的になりますどのようにこれらのインスタンスのすべてに対してアクセスを許可するのですか?

35.185.*を許可すると、gceの他の人が自分のDBにアクセスしようとするとどうなりますか?

私はこれに新しいですし、多分私は何かを逃しています - しかし、私は "プロジェクト"は問題なしで他のすべての資産にアクセスできると仮定しました。私はこの事実ではない大きな理由があると確信していますが、それは私にとって失われます!

答えて

0

This linkは、この問題を解決するために必要なドキュメントでした。

関連する問題