[英]Overwrite S3 endpoint using Boto3 configuration file
我正在嘗試使用配置文件( ~/aws/confg
)覆蓋boto3
某些變量。 在我的用例中,我想使用fakes3
服務並將 S3 請求發送到本地主機。
在boto
(不是boto3
)中,我可以在~/.boto
創建一個類似於這個的配置:
[s3]
host = localhost
calling_format = boto.s3.connection.OrdinaryCallingFormat
[Boto]
is_secure = False
客戶端可以成功獲取所需的更改,而不是將流量發送到真正的 S3 服務,而是將其發送到本地主機。
>>> import boto
>>> boto.connect_s3()
S3Connection:localhost
>>>
我試圖使用boto3
庫實現類似的結果。 通過查看源代碼,我發現我可以使用~/aws/config
位置。 我還在botocore
unittests
文件夾中找到了一個示例配置。
我試圖修改配置以實現所需的行為。 但不幸的是它不起作用。
這是配置:
[default]
aws_access_key_id = XXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYY
region = us-east-1
is_secure = False
s3 =
host = localhost
clients
變量?您不能在配置文件中設置主機,但是您可以使用 boto3 從您的代碼中覆蓋它。
import boto3
session = boto3.session.Session()
s3_client = session.client(
service_name='s3',
aws_access_key_id='aaa',
aws_secret_access_key='bbb',
endpoint_url='http://localhost',
)
然后你就可以像往常一樣互動了。
print(s3_client.list_buckets())
boto3
僅從該配置文件中讀取 s3 的簽名版本。 您可能想要打開一個功能請求,但現在您可以通過以下方式處理自定義端點:
import boto3
from botocore.utils import fix_s3_host
resource = boto3.resource(service_name='s3', endpoint_url='http://localhost')
resource.meta.client.meta.events.unregister('before-sign.s3', fix_s3_host)
關於元這一點很重要,因為boto3
自動改變端點your_bucket_name.s3.amazonaws.com
當它認為合適的1 。 如果您將同時使用自己的主機和 s3,您可能希望覆蓋該功能而不是完全刪除它。
使用 boto3 資源:
import boto3
# use third party object storage
s3 = boto3.resource('s3', endpoint_url='https://URL:443',
aws_access_key_id = 'AccessKey',
aws_secret_access_key = 'SecertKey')
# Print out bucket names
for bucket in s3.buckets.all():
print(bucket.name)
其它的辦法:
import boto3
s3client = boto3.client('s3', endpoint_url='http://X.X.x.X:8080/',
aws_access_key_id = 'XXXXXXX',
aws_secret_access_key = 'XXXXXXXX')
bucket_name = 'aaaaa'
s3client.create_bucket(Bucket=bucket_name)
我剛剛向 boto3 提交了一個 PR 以添加一個 env var 以允許您覆蓋 endpoint_url 如果您需要使用使用 boto3 的依賴模塊(在這種情況下您可能無法直接修改對 boto3.client 的調用)
s3_client = boto3.client(
"s3",
"us-east-1",
aws_access_key_id="test_id",
aws_secret_access_key="test_key",
endpoint_url="https://localhost:7000",
use_ssl=True,
verify=False,
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.