在常规的boto 2.38中,我曾经通过boto访问实例元数据(例如获取当前的堆栈名称)
boto.utils.get_instance_metadata()
Run Code Online (Sandbox Code Playgroud)
在boto3中是否有等价物,或者我是否需要转到下层直接http地址来获取有关正在运行的实例的元数据?
有没有办法查询global secondary index使用的dynamodb boto3.我找不到任何在线教程或资源.
我一直在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 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 类型。
预先感谢您的任何帮助。
我在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.
我有两个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) 我正在尝试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)
clients使用配置文件变量?我有一个将指标写入 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 小时之间的任何时间。
例如:
ClinicID=7667或者
ClinicID=7667和username='simran+test@abc.com'或者
username='simran+test@abc.com'我boto3在 Python 中使用。我可以在这方面有指导吗?
python amazon-web-services amazon-cloudwatch boto3 aws-lambda
在文档之后,我正在尝试创建一个更新或添加的更新语句,如果在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"
如果有人做了类似于我想要实现的任何事情,请分享示例.
我有一种使用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)