2015-12-15 33 views
1

爲什麼我的S3複製命令發生了紅移給出這個錯誤?這是coppy命令:S3複製命令給出了錯誤+如何從複製命令中帶走密鑰

COPY dbtablename from 's3://rcname/foldername/file.csv CREDENTIALS 'aws_access_key_id=xxxxxxx;aws_secret_access_key=yyyyyyy/zzzz' CSV IGNOREHEADER 1; 

我的錯誤是:

psycopg2.ProgrammingError: syntax error at or near "aws_access_key_id" 
LINE 1: ...rcname/foldername/file.csv CREDENTIALS 'aws_access... 

我有第二個問題:如何從我的複製命令刪除鍵。我正在使用python和與S3的關係我使用Boto3和AWS CLI Keyring來加密我的密鑰,所以我不必將密鑰放在我的代碼中

現在我想對複製命令(紅移)。但我找不到一個好的選擇。有人知道如何做到這一點?

回答

1

如果你已經有了AWS CLI置,並遵循http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html的步驟,那麼你將在你的主目錄下的兩個文件已經具有證書:

~/.aws/config 

~/.aws/credentials 

您可以在python中使用boto從這些文件中訪問aws_access_key_idaws_secret_access_key

具體來說,

import boto 
from boto import ec2 
ec2 = boto.ec2.connect_to_region('us-west-2', profile_name='default') 

access_key = ec2.gs_access_key_id 
secret_key = ec2.gs_secret_access_key 

現在是直接在你的代碼中插入這些按鍵:

query = ''' 
COPY dbtablename 
from 's3://rcname/foldername/file.csv' 
CREDENTIALS 
'aws_access_key_id={access_key};aws_secret_access_key={secret_key}' 
CSV 
IGNOREHEADER 1; 
'''.format(access_key=access_key,secret_key=secret_key) 

對於如何做到這一點其他語言的例子見https://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs

+0

boto3呢? – GNIUS

+0

它的工作原理。但我仍然收到錯誤「psycopg2.ProgrammingError:語法錯誤在或接近」aws_access_key_id「 LINE 1:... rcname/foldername/file.csv CREDENTIALS'aws_access ...」 – GNIUS

+0

錯誤是一樣的,只有現在在第5行,因爲我以前寫的關於1號線查詢: psycopg2.ProgrammingError:語法錯誤或接近 「aws_access_key_id」 LINE 5:「aws_access_key_id = XXXXXX; aws_secret_access_ke ... ^ – GNIUS