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へのアクセスを許可しているので、これは動作します:
私の出力は、次のとおりです。
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にアクセスしようとするとどうなりますか?
私はこれに新しいですし、多分私は何かを逃しています - しかし、私は "プロジェクト"は問題なしで他のすべての資産にアクセスできると仮定しました。私はこの事実ではない大きな理由があると確信していますが、それは私にとって失われます!