我正在尝试找到一种更快的方法来使用 Amazon 的 AWS SDK 对 s3 存储桶中的所有对象进行计数。
private static int getBucketFileCount(AmazonS3 s3, ListObjectsV2Request req) {
ListObjectsV2Result result;
int fileCount = 0;
log.info("Counting s3 files");
do {
result = s3.listObjectsV2(req);
for (S3ObjectSummary objectSummary : result.getObjectSummaries()) {
fileCount++;
}
req.setContinuationToken(result.getNextContinuationToken());
} while (result.isTruncated() == true);
return fileCount;
}
Run Code Online (Sandbox Code Playgroud)
然而,这种方法非常慢,我还没有找到正确的方法。我找到了另一个有帮助的答案,但无法准确地弄清楚实现方式。 getObjectSummaries 能否获取存储在 S3 存储桶中的对象数量?
如何在当前的实现中使用getNextMarker()函数?我需要改变什么?
我正在尝试使用 C# athena 驱动程序执行 athena 查询。
Amazon.Athena.Model.ResultConfiguration resultConfig = new Amazon.Athena.Model.ResultConfiguration();
resultConfig.OutputLocation = "https://s3.us-east-2.amazonaws.com/testbucket/one/2018-02-06/";
//other inputs i have tried
//"s3://testbucket/one/2018-02-06/"
//testbucket
//Populate the request object
Amazon.Athena.Model.StartQueryExecutionRequest queryExec = new Amazon.Athena.Model.StartQueryExecutionRequest();
queryExec.QueryString = query.QueryString;
queryExec.QueryExecutionContext = queryExecutionContext;
queryExec.ResultConfiguration = resultConfig;
StartQueryExecutionResponse athenaResponse = athenaClient.StartQueryExecution(queryExec);//throws exception
Run Code Online (Sandbox Code Playgroud)
不同情况的例外:
outputLocation 不是有效的 S3 路径。提供https://s3.us-east-2.amazonaws.com/testbucket/one/2018-02-06/
无法验证/创建输出存储桶 testbucket。提供 s3://testbucket/one/2018-02-06/
无法验证/创建输出存储桶 testbucket。提供测试桶
有人可以帮我找到正确的 s3 格式吗?
提前致谢。
我有一个将一些文件上传(复制)到另一个AWS账户中的S3存储桶中的应用程序,我使用来自AWS开发工具包(Nodejs)的copyObject命令
var params = {
Bucket: "MyBucket_AccountB",
CopySource: encodeURI('/Accunt_A_Bocket/file.png'),
Key: "file.png",
ACL: 'bucket-owner-full-control'
};
s3.copyObject(params, function(err, datas) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(datas); // successful response
});
Run Code Online (Sandbox Code Playgroud)
假设此代码是从另一个AWS帐户运行的,AWS_ACCOUNT_A则文件上传到中的S3存储桶AWS_ACCOUNT_B情况是,当文件上传到此存储桶时,该文件的所有权仍然是AWS_ACCOUNT_A。
我想知道AWS_ACCOUNT_B在上传文件时该如何赋予文件所有权。这里有人可以给我一些指导吗?
更新:
我使用了这个政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::MY_ACCOUNT_B_ID:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::MYBUCKET_IN_ACCOUNT_A",
"arn:aws:s3:::MYBUCKET_IN_ACCOUNT_A/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
但上传的文件仍归拥有Account_A,我在政策中做错了什么吗?
我有一个s3存储桶,其中存储要由我的 pyspark 代码处理的数据文件。我要访问的文件夹是:
s3a://bucket_name/data/
Run Code Online (Sandbox Code Playgroud)
此文件夹包含文件夹。我的目标是访问此目录中最后添加的文件夹的内容。由于某些原因,我不想使用 boto。有什么方法可以访问文件夹列表,以便我可以选择我想访问的文件夹。如果我指定文件夹,我可以访问文件,但我想让它动态。
我正在使用nodejs服务器进行视频流传输。我已将Amazon S3存储桶用作视频存储。当nodejs在Amazon EC2实例中运行时。为了响应客户端的请求流式传输特定的视频文件,需要先将文件从S3存储桶下载到EC2实例(nodejs服务器),这是一个耗时的过程,客户端必须在第一个视频文件之前等待几秒钟。视频段从nodejs发送到客户端。我正在寻找一种删除下载时间间隔的方法。我的问题是:
1#是否可以直接从S3存储桶流式传输?
要么
2#S3存储是否允许获取存储文件的小块而不是下载整个文件?
注意:iOS视频播放器应使用视频流。我是视频流和S3存储的新手。
请给我建议这种情况下最好的解决方案。
如何列出打开版本控制标志的所有 s3 存储桶名称?
我有 100 个 s3 存储桶。某些存储桶已打开版本控制标志。我想使用 boto3 列出所有这些存储桶名称。
我在下面给出了我的 python 代码片段。
import boto3
REGION = "us-east-1"
s3client = boto3.client('s3',region_name=REGION)
for bucket in s3client.list_buckets()['Buckets']:
bucket = bucket['Name']
response = s3client.get_bucket_versioning(Bucket=bucket)
if 'Status' in response and response['Status'] == 'Enabled':
print(bucket)
Run Code Online (Sandbox Code Playgroud) 我正在使用这个功能:
s3 = boto3.resource('s3')
bucket_tagging = s3.BucketTagging(bucket)
Set_Tag = bucket_tagging.put(Tagging={'TagSet':[{'Key':'Owner', 'Value': owner}]})
Run Code Online (Sandbox Code Playgroud)
它正在删除现有标签,我只能看到一个标签。
我可以过滤特定日期的数据,但不能过滤日期范围的数据。例如,使用 AWS CLI 从 2019 年 9 月 12 日到 2019 年 9 月 15 日
例如。要过滤 2019 年的数据,我使用 --recursive --exclude "*" --include " 2019 "
我们在用例中使用版本s3存储桶。
我们将经常更新同一文件。
我想知道s3存储桶可以处理多少个相同文件版本。
我不知道如果存在限制,版本s3可以处理的最大文件数是否将删除最旧的版本。