我有一个带有给定access_key和的 S3 存储桶secret_access_key。我使用以下代码成功将文件上传到我的 S3 存储桶中。
import boto3
import os
client = boto3.client('s3',
aws_access_key_id = access_key,
aws_secret_access_key = secret_access_key)
upload_file_bucket = 'my-bucket'
upload_file_key = 'my_folder/' + str(my_file)
client.upload_file(file, upload_file_bucket, upload_file_key)
Run Code Online (Sandbox Code Playgroud)
现在,我想将 my_file 上传到新团队拥有的另一个存储桶中。因此,我无权访问access_key和secret_access_key。使用 boto3 和 Python 进行跨账户文件上传的最佳实践是什么?
标题说明了一切 - 我想将 pytorch 模型保存在 s3 存储桶中。我尝试的是以下内容:
import boto3
s3 = boto3.client('s3')
saved_model = model.to_json()
output_model_file = output_folder + "pytorch_model.json"
s3.put_object(Bucket="power-plant-embeddings", Key=output_model_file, Body=saved_model)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,因为.to_json()仅适用于张量流模型。有谁知道如何在pytorch中做到这一点?
使用 boto3.dynamodb.condition.Key 的 begins_with 方法过滤结果的最佳方法是什么?
import boto3
from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('MyTable')
response = table.query(KeyConditionExpression=Key('myPrimaryKey').begins_with('americas'))
Run Code Online (Sandbox Code Playgroud)
结果虽然条件支持begins_with,但是查询不支持。不能在主键或排序键上使用begins_with吗?
给定如下代码:
def do_stuff():
session = boto3.session.Session()
client = session.client(service_name="secretsmanager", region_name=region_name)
client.get_secret_value(SecretId=sendgrid_api_key_arn)
Run Code Online (Sandbox Code Playgroud)
我如何模拟
client.get_secret_value("some-value")返回一些值
我如何模拟它以抛出异常
@patch("boto3.session")
def test_get_sendgrid_api_key_secret_when_client_error(mock_session):
session = mock_session.Session();
client = session.client()
client.get_secret_value().return_value =
{"SecretString": "my-secret"} <- this is wrapped in a MagicMock which is useless.
Run Code Online (Sandbox Code Playgroud) 环境。
jupyterlab,Python 3.8。
ubuntu 20.04LTS。
(客户端:macos bigsur / google chrome)。
使用boto3。
情况。
我构建了 docker 镜像并将其成功推送到 ECR。
该图像具有 awslambdaric 并包含 aws-lambda-rie。
我可以使用 AWS Lambda 控制台部署该映像。
我想。
使用 boto3(=python 代码)将其部署到 lambda。
问题。
按照 boto3 手册,部署 lambda 如下:
import boto3
lambdac = boto3.client('lambda')
dic = {
'FunctionName':'lambda-name',
# 'Runtime':'python3.8',
'Role':'my-role-arn',
'Code':{'ImageUri':uri},
}
lambdac.create_function(**dic)
Run Code Online (Sandbox Code Playgroud)
这会出错。
它需要Runtime,所以我添加了runtime(我认为docker容器版本不需要runtime)。
并运行,并返回另一个错误。
InvalidParameterValueException: An error occurred (InvalidParameterValueException) when calling the CreateFunction operation: Runtime and Handler are mandatory parameters for functions created with deployment packages.
Run Code Online (Sandbox Code Playgroud)
这个错误让我想到“不支持 …
我有一个 Amazon S3 存储桶my-bucket和文件夹my-folder。
我希望我的脚本根据my-folder. 因此,我想检查是否为my-folder空且不包含任何文件的条件。
我该怎么做呢?
不幸的是,我尝试搜索文档和其他 Stack Overflow 帖子,但似乎找不到类似的内容。
从 .aws 中的“凭据”读取时,我可以将对象从本地上传到我的云 S3 存储桶,但是为了解决这个问题,有一个与“凭据”格式相同的文件,称为“tester”我无法让它读取它,即使它与凭据完全相同。
如果我这样做:
# Upload the file
s3_client = boto3.client(
's3',
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
aws_session_token=SESSION_TOKEN,
)
Run Code Online (Sandbox Code Playgroud)
我应该在 ACCESS_KEY、SECRET_KEY、SESSION_TOKEN 中放入什么?我不想对我的凭据进行硬编码,但我希望它不从 .aws 中的凭据读取,而是从另一个名为“tester”的文件读取,该文件具有相同的凭据。
注意:“tester”文件与我的 Mac 上的 python/Boto3 程序位于同一位置。
根据ListObjectsV2 - Amazon Simple Storage Service文档,当我指定 aPrefix和 a时Delimiter,我应该在响应中获取一个内容元素,并以 ETag 作为前缀。
<Contents>
<Key>photos/2006/</Key>
<LastModified>2016-04-30T23:51:29.000Z</LastModified>
<ETag>"d41d8cd98f00b204e9800998ecf8427e"</ETag>
<Size>0</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
Run Code Online (Sandbox Code Playgroud)
我尝试使用 python sdk (boto3) 来运行它。
client.list_objects_v2(Bucket='bucketname', Prefix = "folder1-folder2-", Delimiter = "-")
Run Code Online (Sandbox Code Playgroud)
但在响应字典中,我找不到内容键。示例中响应的所有其他字段均存在。
dict_keys(['ResponseMetadata', 'IsTruncated', 'Name', 'Prefix', 'Delimiter', 'MaxKeys', 'CommonPrefixes', 'EncodingType', 'KeyCount'])
Run Code Online (Sandbox Code Playgroud)
这是 API 调用的响应中不再存在的内容吗?或者这是 SDK 没有显示的内容。还有一个后续问题,如果是 sdk 方面的问题,我如何进行 api 调用来返回该字段。
我试图使用 python 和 boto3 从 S3 存储桶中的文件夹结构中读取文件。
我想返回布尔值,无论报告是否存在于 S3 存储桶中。
import boto3
import json
S3_BUCKET_NAME = ''
KEY = '@@@/%%%.json'
def notification():
report = get_report()
print(report)
def get_report():
s3_client = boto3.client('s3')
response = s3_client.get_object(Bucket=S3_BUCKET_NAME, Prefix=PREFIX, Key=KEY)
data = response['Body'].read()
report = json.loads(data)
return report
Run Code Online (Sandbox Code Playgroud)
如何检查报告是否存在并返回布尔值?
Python
运行查询的方法
def function(run_query)
//topic = arn return from topic name
topic.publish(message)
pass
Run Code Online (Sandbox Code Playgroud)
我正在使用 boto3 资源方法。有很多使用 boto3.client 的示例,但使用 boto3 资源方法实现 sns 方法的示例有限。
boto3 ×10
python ×9
amazon-s3 ×6
amazon-sns ×1
aws-cli ×1
aws-lambda ×1
bucket ×1
docker ×1
pytest ×1
pytest-mock ×1
pytorch ×1