标签: boto3

boto3相当于boto.utils.get_instance_metadata()?

在常规的boto 2.38中,我曾经通过boto访问实例元数据(例如获取当前的堆栈名称)

boto.utils.get_instance_metadata()
Run Code Online (Sandbox Code Playgroud)

在boto3中是否有等价物,或者我是否需要转到下层直接http地址来获取有关正在运行的实例的元数据?

amazon-web-services boto3

31
推荐指数
1
解决办法
8766
查看次数

我们如何使用boto3查询dynamodb的二级索引?

有没有办法查询global secondary index使用的dynamodb boto3.我找不到任何在线教程或资源.

amazon-web-services amazon-dynamodb boto3

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

使用Python boto3从S3读取JSON文件

我一直在S3桶"测试"中关注JSON

{
  'Details' : "Something" 
}
Run Code Online (Sandbox Code Playgroud)

我使用以下代码来读取此JSON并打印"详细信息"键

s3 = boto3.resource('s3',
                    aws_access_key_id=<access_key>,
                    aws_secret_access_key=<secret_key>
                    )
content_object = s3.Object('test', 'sample_json.txt')
file_content = content_object.get()['Body'].read().decode('utf-8')
json_content = json.loads(repr(file_content))
print(json_content['Details'])
Run Code Online (Sandbox Code Playgroud)

我收到错误,因为'字符串索引必须是整数' 我不想从S3下载文件,然后阅读..

python json amazon-s3 amazon-web-services boto3

29
推荐指数
4
解决办法
4万
查看次数

Python / Boto3:不支持浮点类型。使用 Decimal 类型代替

我使用 Python 3.7 将数据存储在 DynamoDB 数据库中,当我尝试将项目写入数据库时​​遇到以下错误消息:

Float types are not supported. Use Decimal types instead.
Run Code Online (Sandbox Code Playgroud)

我的代码:

ddb_table = my_client.Table(table_name)

with ddb_table.batch_writer() as batch:
    for item in items:
        item_to_put: dict = json.loads(json.dumps(item), parse_float=Decimal)

        # Send record to database.
        batch.put_item(Item=item_to_put)
Run Code Online (Sandbox Code Playgroud)

“items”是 Python 字典的列表。如果我打印出“item_to_put”字典的类型,它们都是 str 类型。

预先感谢您的任何帮助。

python amazon-dynamodb boto3

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

如何在亚马逊网络服务中从boto3生成网址

我在s3中有一个Bucket,我试图拉出那里的图像的url.

我正在使用boto3和boto3似乎没有实现生成url方法.

他们有一个核心方法,生成这样的URL,

import botocore.session

session = botocore.session.get_session()
client = session.create_client('s3')

presigned_url = client.generate_presigned_url(
    'get_object', Params={'Bucket': self.bucket_name, 'Key': self.key})
Run Code Online (Sandbox Code Playgroud)

我不得不做的一件事是,我必须使用会话对象发送参数和每个请求.并且上面的方法不允许我设置会话变量(即.. aws凭证)

我能得到的最接近的是这个

session = Session(aws_access_key_id='342342342342', aws_secret_access_key='3434234322', region_name='us-east-1')
    s3 = session.resource('s3')
    object = s3.Object('my-dev-bucket', 'amazonKeyString')
    print object.get()["Body"]
Run Code Online (Sandbox Code Playgroud)

这让我获得了亚马逊s3对象,这是一个被称为的对象

botocore.response.StreamingBody object at 0x7ffaff8cef50
Run Code Online (Sandbox Code Playgroud)

我可以这样得到图像的网址吗?

请帮助Prabhakar S.

python amazon-s3 boto3

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

如何从另一个AWS角色承担AWS角色?

我有两个AWS账户 - 比方说A和B.

在帐户B中,我定义了一个角色,允许从帐户A访问另一个角​​色.让我们将其称为Role-B

{
  "Version": "2012-10-17",
  "Statement": [
  {
     "Effect": "Allow",
     "Principal": {
         "AWS": "arn:aws:iam::********:role/RoleA"
     },
    "Action": "sts:AssumeRole"
  }]
}
Run Code Online (Sandbox Code Playgroud)

在帐户A中,我定义了一个允许root用户承担角色的角色.让我们称之为Role-A

{
  "Version": "2012-10-17",
  "Statement": [
  {
     "Effect": "Allow",
     "Principal": {
         "AWS": "arn:aws:iam::********:root"
     },
    "Action": "sts:AssumeRole"
  }]
}
Run Code Online (Sandbox Code Playgroud)

角色A附加了以下策略

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::****:role/RoleB",
            "Effect": "Allow"
       }]
 }
Run Code Online (Sandbox Code Playgroud)

作为帐户A中的用户,我假设了角色-A.现在使用这个临时凭证,我想假设角色B并访问帐户B拥有的资源.我有以下代码

client = boto3.client('sts')

firewall_role_object = client.assume_role(
    RoleArn=INTERMEDIARY_IAM_ROLE_ARN,
    RoleSessionName=str("default"),
    DurationSeconds=3600)

firewall_credentials = firewall_role_object['Credentials']

firewall_client = boto3.client(
    'sts',
    aws_access_key_id=firewall_credentials['AccessKeyId'],
    aws_secret_access_key=firewall_credentials['SecretAccessKey'],
    aws_session_token=firewall_credentials['SessionToken'], )

optimizely_role_object = firewall_client.assume_role(
    RoleArn=CUSTOMER_IAM_ROLE_ARN,
    RoleSessionName=str("default"), …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services amazon-iam boto3

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

使用Boto3配置文件覆盖S3端点

概述:

我正在尝试boto3使用配置文件(~/aws/confg)覆盖某些变量.在我的用例中,我想使用fakes3服务并将S3请求发送到localhost.

例:

boto(不boto3)中,我可以创建一个~/.boto与此类似的配置:

[s3]
host = localhost
calling_format = boto.s3.connection.OrdinaryCallingFormat

[Boto]
is_secure = False
Run Code Online (Sandbox Code Playgroud)

客户端可以成功获取所需的更改,而不是将流量发送到真正的S3服务,它会将其发送到localhost.

>>> import boto
>>> boto.connect_s3()
S3Connection:localhost
>>> 
Run Code Online (Sandbox Code Playgroud)

我做了什么:

我试图用boto3库来实现类似的结果.通过查看源代码,我发现我可以使用~/aws/config位置.我还在unittests文件夹中找到了一个示例配置botocore.

我试图修改配置以实现所需的行为.但不幸的是它不起作用.

这是配置:

[default]
aws_access_key_id = XXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYY
region = us-east-1
is_secure = False
s3 =
    host = localhost
Run Code Online (Sandbox Code Playgroud)

题:

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

python boto amazon-web-services botocore boto3

27
推荐指数
5
解决办法
2万
查看次数

如何在python中使用boto3查询cloudwatch日志

我有一个将指标写入 Cloudwatch 的 lambda 函数。虽然它写入指标,但它会在日志组中生成一些日志。

INFO:: username: simran+test@abc.com ClinicID: 7667 nodename: MacBook-Pro-2.local

INFO:: username: simran+test2@abc.com ClinicID: 7667 nodename: MacBook-Pro-2.local

INFO:: username: simran+test@abc.com ClinicID: 7668 nodename: MacBook-Pro-2.local

INFO:: username: simran+test3@abc.com ClinicID: 7667 nodename: MacBook-Pro-2.local
Run Code Online (Sandbox Code Playgroud)

我想x根据任何参数查询过去几小时内的AWS 日志,其中 x 可以是 12 到 24 小时之间的任何时间。

例如:

  1. 查询过去 5 小时内的 Cloudwatch 日志,其中 ClinicID=7667

或者

  1. 查询过去 5 小时内的 Cloudwatch 日志,其中ClinicID=7667username='simran+test@abc.com'

或者

  1. 查询过去 5 小时内的 Cloudwatch 日志,其中 username='simran+test@abc.com'

boto3在 Python 中使用。我可以在这方面有指导吗?

python amazon-web-services amazon-cloudwatch boto3 aws-lambda

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

dynamodb boto3中update_item的示例

文档之后,我正在尝试创建一个更新或添加的更新语句,如果在dynamodb表中只存在一个属性.

我正在尝试这个

response = table.update_item(
    Key={'ReleaseNumber': '1.0.179'},
    UpdateExpression='SET',
    ConditionExpression='Attr(\'ReleaseNumber\').eq(\'1.0.179\')',
    ExpressionAttributeNames={'attr1': 'val1'},
    ExpressionAttributeValues={'val1': 'false'}
)
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the UpdateItem operation: ExpressionAttributeNames contains invalid key: Syntax error; key: "attr1"

如果有人做了类似于我想要实现的任何事情,请分享示例.

python amazon-dynamodb botocore boto3

25
推荐指数
5
解决办法
4万
查看次数

如何使用pyarrow从S3读取镶木地板文件列表作为pandas数据框?

我有一种使用boto3(1.4.4),pyarrow(0.4.1)和pandas(0.20.3)实现这一目标的hacky方法.

首先,我可以在本地读取单个镶木地板文件,如下所示:

import pyarrow.parquet as pq

path = 'parquet/part-r-00000-1e638be4-e31f-498a-a359-47d017a0059c.gz.parquet'
table = pq.read_table(path)
df = table.to_pandas()
Run Code Online (Sandbox Code Playgroud)

我也可以在本地读取镶木地板文件目录,如下所示:

import pyarrow.parquet as pq

dataset = pq.ParquetDataset('parquet/')
table = dataset.read()
df = table.to_pandas()
Run Code Online (Sandbox Code Playgroud)

两者都像魅力一样.现在我想用存储在S3存储桶中的文件远程实现相同的功能.我希望这样的东西能起作用:

dataset = pq.ParquetDataset('s3n://dsn/to/my/bucket')
Run Code Online (Sandbox Code Playgroud)

但它没有:

OSError: Passed non-file path: s3n://dsn/to/my/bucket

在仔细阅读了pyarrow的文档后,目前似乎无法做到这一点.所以我提出了以下解决方案:

从S3读取单个文件并获取pandas数据帧:

import io
import boto3
import pyarrow.parquet as pq

buffer = io.BytesIO()
s3 = boto3.resource('s3')
s3_object = s3.Object('bucket-name', 'key/to/parquet/file.gz.parquet')
s3_object.download_fileobj(buffer)
table = pq.read_table(buffer)
df = table.to_pandas()
Run Code Online (Sandbox Code Playgroud)

在这里,我的hacky,not-so-optimized,解决方案从S3文件夹路径创建一个pandas数据框:

import io
import …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas boto3 pyarrow

25
推荐指数
7
解决办法
2万
查看次数