标签: boto3

如何获得boto3 Collection的大小?

我一直在使用的方法是将Collection转换为List并查询长度:

s3 = boto3.resource('s3')
bucket = s3.Bucket('my_bucket')
size = len(list(bucket.objects.all()))
Run Code Online (Sandbox Code Playgroud)

然而,这迫使整个系列的解决方案并且首先避免了使用Collection的好处.有一个更好的方法吗?

python collections boto3

17
推荐指数
2
解决办法
1万
查看次数

使用Boto 3显示EC2实例名称

我不确定如何使用AWS EC2显示我的实例的名称 boto3

这是我的一些代码:

import boto3

ec2 = boto3.resource('ec2', region_name='us-west-2')
vpc = ec2.Vpc("vpc-21c15555")
for i in vpc.instances.all():
    print(i)
Run Code Online (Sandbox Code Playgroud)

我得到的回报是

...
...
...
ec2.Instance(id='i-d77ed20c')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我可以改变ii.id或者i.instance_type当我尝试时,name我得到:

AttributeError: 'ec2.Instance' object has no attribute 'name'

获取实例名称的正确方法是什么?

python amazon-ec2 amazon-web-services python-3.x boto3

17
推荐指数
2
解决办法
3万
查看次数

boto3 list_objects和list_objects_v2有什么区别?

我正在尝试使用python在Amazon s3存储桶中列出对象boto3.

它似乎boto3有2个函数用于列出存储桶中的对象:list_objects()list_objects_v2().

2和使用one之间的好处有什么区别?

python amazon-s3 boto3

17
推荐指数
1
解决办法
1万
查看次数

PyCharm intellisense为boto3

在PyCharm中看到完整的intellisense(代码完成)选项时遇到问题.在Windows上使用python 3.4.建议部分工作:

import boto3
s = boto3.Session()  (boto3. will bring up list of methods/params of object boto3)
ec2 = s.resource('ec2') (resource is a suggested method!)
ec2. <<<< this brings up nothing. For some reason PyCharm cant detect that ec2 object would have 
Run Code Online (Sandbox Code Playgroud)

虽然我可以单独处理文档,但intellisense是一个很好的功能!

我有类似的问题让它完成lxml语法,但我认为那是因为我必须直接安装lxml作为二进制(太多的箍跳过窗口通过点子安装它)

其他人遇到类似的问题?

当我们在这里时,我看到很多不同的库使用awscli与python:boto,boto3,troposphere等.使用一个优于另一个有什么优点.亚马逊声称boto3是优于boto的方法,但是对于我使用较旧的boto可以很容易地使用启动/停止ec2实例.

python boto pycharm aws-cli boto3

16
推荐指数
3
解决办法
7337
查看次数

请求中包含的安全令牌已过期

我有一个脚本可以从 Cloudwatch 中提取大量指标用于我们自己的内部报告。

该脚本迭代特定区域中的所有 EC2 实例,并要求提供过去 2 周的 5 个 cloudwatch 指标(所有可用统计数据)(每 5 天间隔 5 分钟,正好是 1440 配额)。我正在使用一个假设的会话:

session = Session(aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=regionName)
sts = session.client('sts')
response = sts.assume_role(
    RoleArn=arn, # External role arn
    RoleSessionName='role-name',
    ExternalId='<some-id-here>',
)
tempAccessKeyId = response['Credentials']['AccessKeyId']
tempSecretAccessKey = response['Credentials']['SecretAccessKey']
tempSessionToken = response['Credentials']['SessionToken']
assumedSession = Session(
    aws_access_key_id=tempAccessKeyId,
    aws_secret_access_key=tempSecretAccessKey,
    aws_session_token=tempSessionToken,
    region_name=regionName)
Run Code Online (Sandbox Code Playgroud)

在运行脚本时,我遇到了这个异常:

botocore.exceptions.ClientError: An error occurred (ExpiredToken) when calling the GetMetricStatistics operation: The security token included in the request is expired
Run Code Online (Sandbox Code Playgroud)

有没有办法确保令牌在运行脚本时不会过期?我正在使用 boto3。

amazon-web-services boto3

16
推荐指数
3
解决办法
7万
查看次数

在 AWS S3 上将数据从一个文件夹移动/复制到另一个文件夹

我正在寻找在 AWS S3 存储桶上将数据从一个文件夹移动/复制到另一个文件夹的所有方法。


方法 1:通过 AWS CLI(最简单)

在你的实例上下载并安装 awscli,我在这里使用 windows(64 位链接)并运行“asw configure”来填写你的配置,然后在 cmd 上运行这个单一的命令

aws s3 cp s3://from-source/ s3://to-destination/ --recursive
Run Code Online (Sandbox Code Playgroud)

这里cp用于复制和递归复制所有文件


方法 2:通过 AWS CLI 使用 python

import os
import awscli
if os.environ.get('LC_CTYPE', '') == 'UTF-8':
    os.environ['LC_CTYPE'] = 'en_US.UTF-8'

from awscli.clidriver import create_clidriver
driver = create_clidriver()
driver.main('s3 mv s3://staging/AwsTesting/research/    s3://staging/AwsTesting/research_archive/ --recursive'.split())
Run Code Online (Sandbox Code Playgroud)

即使这对我来说也很完美


方法 3:通过 Boto 使用 python

import boto3
s3 = boto3.resource('s3')
copy_source = {
    'Bucket': 's3://staging/',
    'Key': 'AwsTesting/research/'
}
s3.meta.client.copy(copy_source, ''s3://staging/'', 'AwsTesting/research_archive/')
Run Code Online (Sandbox Code Playgroud)

根据我的理解,我假设存储桶的“键”只是文件夹前缀,所以我在这里提到了文件夹路径

错误:

存储桶名称“s3://staging”无效:存储桶名称必须与正则表达式“^[a-zA-Z0-9.-_]{1,255}$”匹配 …

python amazon-s3 aws-cli boto3

16
推荐指数
2
解决办法
3万
查看次数

Python + Boto:botocore.exceptions.ClientError:调用HeadObject操作时发生错误(404):未找到

我正在从AWS S3 Bucket下载文件,如下所示:

import boto3

s3client = boto3.client("s3")
s3 = boto3.resource('s3')

bucket_name = 'practice_bucket'
bucket = s3.Bucket(bucket_name)

for obj in bucket.objects.all():
    filename = obj.key.rsplit('/')[-1]
    s3client.download_file(bucket_name, obj.key, "/txt/" + filename)
Run Code Online (Sandbox Code Playgroud)

当试图将一些文件放在子目录下时,例如/txt/我收到错误:botocore.exceptions.ClientError: An error occurred (404) when calling the HeadObject operation: Not Found.

奇怪的是,它适用于使用相同方法的其他文件类型,但不适用于具有.json扩展名的文件类型.

可能是什么问题?我甚至试过没有把它们放在一个绝对的子目录路径中,我没有得到任何错误,并将文件下载到与脚本下载相同的目录中.但是当我实际定义下载文件的路径时,我得到了错误.

提前谢谢你,一定要投票/接受答复

python amazon-s3 amazon-web-services python-2.7 boto3

16
推荐指数
1
解决办法
1万
查看次数

AWS BOTO3 S3 python - 调用HeadObject操作时发生错误(404):未找到

我正在尝试下载s3存储桶中的目录.我试图使用传输从S3存储桶下载目录,但我收到一个错误,因为"调用HeadObject操作时发生错误(404):未找到".请帮忙.

S3 structure:
  **Bucket
     Folder1
        File1**
Run Code Online (Sandbox Code Playgroud)

注意:尝试下载Folder1

transfer.download_file(self.bucket_name, self.dir_name, self.file_dir + self.dir_name)
Run Code Online (Sandbox Code Playgroud)

python error-handling amazon-s3 amazon-web-services boto3

16
推荐指数
1
解决办法
2万
查看次数

使用python,boto3在Amazon S3中创建目录

我知道S3存储桶实际上没有目录,因为存储空间不足.但是可以使用python/boto3创建目录programmaticaly,但我不知道如何.我在纪录片上看到了这个:

"虽然S3存储是扁平的:存储桶包含密钥,S3允许您通过在密钥中使用分隔符在存储桶上强制使用目录树结构.例如,如果您将密钥命名为'a/b/f',并使用'/ '作为分隔符,S3将认为'a'是目录,'b'是'a'的子目录,'f'是'b'中的文件."

我可以通过以下方式在S3 Bucket中创建文件:

    self.client.put_object(Bucket=bucketname,Key=filename)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何创建目录.

python amazon-s3 amazon-web-services boto3

15
推荐指数
3
解决办法
1万
查看次数

更新属性"timestamp"保留字

我需要使用boto3更新我的dynamodb表中的timestamp属性,但属性名称"timestamp"是一个保留字,因此它在SET命令上抛出错误.

table.update_item(
    Key={
        'id': item_id
    },
    UpdateExpression='SET timestamp = :val1', # this is the line giving the problem
    ExpressionAttributeValues={
        ":val1": new_timestamp
    }
)
Run Code Online (Sandbox Code Playgroud)

"errorMessage":"调用UpdateItem操作时发生错误(ValidationException):无效的UpdateExpression:属性名称是保留关键字;保留关键字:timestamp",

amazon-dynamodb boto3

15
推荐指数
1
解决办法
5820
查看次数