Невозможно загрузить изображения из S3 Bucket в Python / Код уже имеет ключи доступа - PullRequest
0 голосов
/ 07 октября 2018

Для проекта мне нужно загрузить некоторые предметы в мое ведро S3.Я уже видел подобные посты на эту тему;тем не менее, я жестко закодировал свой идентификатор ключа доступа и секретный ключ доступа в программе и все еще не могу их загрузитьPython продолжает выдавать ошибку:

"botocore.exceptions.NoCredentialsError: Невозможно найти учетные данные"

Несмотря на предоставление учетных данных, я все еще не могу загрузить.Мой код указан ниже.Может кто-нибудь помочь мне исправить это?

import boto3
import os
"""import sys
import csv
import pandas as pd
import numpy as np
import tensorflow as tf"""
import nibabel as nib
from boto3.session import Session


aws_access_key_id = '********************'
aws_secret_access_key = '****************************************'
bucket1 = 'adnimcic'
mcic = [[], [], []]
mcicc = [[], [], []]
bucket2 = 'adnimcinc'
mcinc = [[], [], []]
bucket3 = 'adniresults'
results = []
s3_client = boto3.client('s3')


#connecting to S3
session = Session(aws_access_key_id, aws_secret_access_key)
s3 = session.resource('s3')
bucket1obj = s3.Bucket(bucket1)
#bucket2obj = s3.Bucket(bucket2)
#'MCIc_Segmented/ADNI_002_S_0729_MR_MP-RAGE_REPEAT_br_raw_20070225105857428_72_S27091_I41585_be_be_pve_2.nii.gz_extracted'
def concatenate(name):
    name = name.split('.')
    name.pop()
    name = name[0] + '.' + name[1]
    name = name.split('/')
    name = name[1]
    return name

def download(bucketname, key):
    path = '/Volumes/LaCie Mac/' + concatenate(key.key)
    s3_client.download_file(bucketname, key.key, path)

for key in bucket1obj.objects.all():
    if 'pve_0' and 'extracted' in key.key:
        mcic[0].append(key)
        download(bucket1, key)
for key in bucket1obj.objects.all():
    if 'pve_1' and 'extracted' in key.key:
        mcic[1].append(key)
        download(bucket1, key)
for key in bucket1obj.objects.all():
    if 'pve_2' and 'extracted' in key.key:
        mcic[2].append(key)
        download(bucket1, key)

1 Ответ

0 голосов
/ 07 октября 2018

Глядя на ваш код, у вас есть два разных объекта S3 , s3_client и s3:

s3_client = boto3.client('s3')

...

session = Session(aws_access_key_id, aws_secret_access_key)
s3 = session.resource('s3')

...

def download(bucketname, key):
    path = '/Volumes/LaCie Mac/' + concatenate(key.key)
    s3_client.download_file(bucketname, key.key, path)

`` `

Глядя на вашкод, похоже, вы используете свои aws_access_key_id и aws_secret_access_key на своем session объекте, который вы используете на своем ресурсе s3, как и ожидалось, но вы не используете сеанс на s3_client.

Если я правильно понимаю вашу проблему, вы сможете решить эту проблему, создав клиента из сеанса, например:

session = Session(aws_access_key_id, aws_secret_access_key)
s3 = session.resource('s3')
s3_client = session.client('s3')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...