Команда копирования S3 выдает ошибку + как убрать секретные ключи из команды копирования

Почему моя команда копирования 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 для шифрования моих ключей, поэтому мне не нужно помещать ключи в свой код.

Теперь я хочу сделать то же самое с командой копирования (красное смещение). Но не могу найти хорошую альтернативу. Кто-то знает, как это сделать?


person GNIUS    schedule 15.12.2015    source источник


Ответы (1)


Если вы уже настроили клиентский интерфейс aws и выполнили шаги, описанные в http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html, то в вашем домашнем каталоге будет два файла, которые уже имеют реквизиты для входа:

~/.aws/config

а также

~/.aws/credentials

Вы можете использовать boto в python для доступа к aws_access_key_id и aws_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-SDK для примеры того, как это сделать на других языках.

person Bob Baxley    schedule 15.12.2015
comment
Оно работает. Но я все еще получаю сообщение об ошибке psycopg2.ProgrammingError: синтаксическая ошибка в или около aws_access_key_id LINE 1: ...rcname/foldername/file.csv CREDENTIALS 'aws_access... - person GNIUS; 15.12.2015
comment
ошибка такая же, только теперь в строке 5, потому что ранее я написал запрос в 1 строке: psycopg2.ProgrammingError: синтаксическая ошибка в или около aws_access_key_id LINE 5: 'aws_access_key_id=xxxxxx;aws_secret_access_ke... ^ - person GNIUS; 15.12.2015
comment
нам обоим не хватало цитаты вокруг пути s3. Я отредактировал это; попробуй. - person Bob Baxley; 15.12.2015