[英]boto3 upload_file, how to pass aws keys?
我目前正在使用此boto3 upload_file 文檔中的 upload_file function 將 CSV 從 AWS 並行集群(?)實例上傳到 S3 存儲桶。
import logging
import boto3
from botocore.exceptions import ClientError
def upload_file(file_name, bucket, object_name=None):
"""Upload a file to an S3 bucket
:param file_name: File to upload
:param bucket: Bucket to upload to
:param object_name: S3 object name. If not specified then file_name is used
:return: True if file was uploaded, else False
"""
# If S3 object_name was not specified, use file_name
if object_name is None:
object_name = file_name
# Upload the file
s3_client = boto3.client('s3')
try:
response = s3_client.upload_file(file_name, bucket, object_name)
except ClientError as e:
logging.error(e)
return False
return True
在該文檔 url 上,它還列出了一個 ExtraArgs 參數
s3.upload_file('FILE_NAME', 'BUCKET_NAME', 'OBJECT_NAME', ExtraArgs={'Metadata': {'mykey': 'myvalue'}} )
這是我的嘗試/理解:
所以,我正在嘗試將我的 aws_access_key_id 和 aws_secret_access_key 添加到 ExtraArgs,但這是正確的方法嗎?
upload_file(year_month + ".csv", "bucket", "object_name" + year_month + ".csv", ExtraArgs={'Metadata': {'aws_access_key_id': 'X', 'aws_secret_access_key': 'Y'}})
因為這不起作用:
upload_file(year_month + ".csv", "bucket", "object_name" + year_month + ".csv")
謝謝
正如其他用戶建議的那樣,最好的方法是在環境變量或角色中配置您的訪問密鑰(如果是 AWS 內部的資源,如 Lambda、EC2 實例等),但如果您 go 用於不良做法或只是在本地應用程序上工作,將這些數據作為變量包含在代碼中的方式是
s3_client = boto3.client('s3', aws_zone, aws_access_key_id=key_id, aws_secret_access_key=access_key)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.