Я понимаю, у нас есть пара ответов на эту ошибку. Тем не менее, моя проблема другая, поэтому вопрос.
Я загружаю аудиофайлы из файла raspberry pi в экземпляр AWS-S3. Загрузка работает без проблем, когда я запускаю скрипт вручную. Однако тот же сценарий при запуске через экземпляр crontab выдает вышеуказанную ошибку.
Мой код Python выглядит следующим образом:
import boto3
import argparse
import os
ap=argparse.ArgumentParser()
ap.add_argument("-f","--filetoupload", required=True, help="file to upload")
args=vars(ap.parse_args())
file = os.path.basename(args['filetoupload'])
client=boto3.client('s3', region_name='ap-south-1')
print("[INFO:] Uploading file to cloud")
client.upload_file(args['filetoupload'],'MyS3Bucket',file)
print("[INFO:] File upload completed successfully")
Я вызываю этот скрипт на python в скрипте bash.
python /home/pi/s3upload.py --filetoupload /home/pi/upload/${FILENAME}.mp3
Файл mp3 создается и, как сказано выше, когда я запускаю его вручную, он запускается без проблем.
Я проверил файлы config
и credentials
в папке .aws
. Как указано в других ответах в SO, они начинаются со значения по умолчанию и имеют правильные учетные данные.
Полное сообщение об ошибке выглядит следующим образом:
[INFO:] Uploading file to cloud
Traceback (most recent call last):
File "/home/pi/s3upload.py", line 10, in <module>
client.upload_file(args['filetoupload'],'MyS3Bucket',file)
File "/usr/local/lib/python2.7/dist-packages/boto3/s3/inject.py", line 110, in upload_file
extra_args=ExtraArgs, callback=Callback)
File "/usr/local/lib/python2.7/dist-packages/boto3/s3/transfer.py", line 279, in upload_file
future.result()
File "/usr/local/lib/python2.7/dist-packages/s3transfer/futures.py", line 73, in result
return self._coordinator.result()
File "/usr/local/lib/python2.7/dist-packages/s3transfer/futures.py", line 233, in result
raise self._exception
botocore.exceptions.NoCredentialsError: Unable to locate credentials
script finished