簡體   English   中英

使用 Boto3 配置文件覆蓋 S3 端點

[英]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

題:

  1. 如何使用配置文件覆蓋clients變量?
  2. 在哪里可以找到配置的允許變量的完整列表?

您不能在配置文件中設置主機,但是您可以使用 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 的調用)

https://github.com/boto/boto3/pull/2746

https://github.com/rwillmer/boto3

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM