【问题标题】:AWS Lambda - Python - Filter Attribute with Price ListAWS Lambda - Python - 使用价目表过滤属性
【发布时间】:2021-10-29 19:41:41
【问题描述】:

我在 AWS 中使用 python + lambda 来获取带有属性的价格。
按照此代码。我得到4个结果。
但结果有完整的信息。
你能告诉我如何过滤结果吗?如何打印 4 个结果和一些属性(例如:vcpu、Ram、network、os、price)
谢谢大家:)

import json
import boto3
client = boto3.client('pricing')
response1 = client.get_products(ServiceCode='AmazonEC2',
    Filters=[
        {
            'Field': 'instanceType', 'Type': 'TERM_MATCH', 'Value': 'r5.xlarge',
        },
        {
            'Field': 'operatingSystem', 'Type': 'TERM_MATCH', 'Value': 'Linux',
        },
        {
            'Field': 'vcpu','Type': 'TERM_MATCH', 'Value': '4',
        },
        {
            'Field': 'networkPerformance', 'Type': 'TERM_MATCH','Value': 'Up to 10 Gigabit',
        },
        {
            'Field': 'location','Type': 'TERM_MATCH', 'Value': 'EU (Paris)',
        },
        {
            'Field': 'usagetype', 'Type': 'TERM_MATCH', 'Value': 'EUW3-BoxUsage:r5.xlarge',
        },
    ],
    FormatVersion='aws_v1',
    MaxResults=100,
)

def lambda_handler(event, context):
    return response1

【问题讨论】:

  • 分享response1 (作为文本)并解释预期的输出。
  • 输出太长 - 我不能在那里发帖。你能帮忙自己跑吗?感谢您的帮助。

标签: python aws-lambda price


【解决方案1】:

类似下面的东西

import ast

REQUESTED_ATTRIBUTES = {'servicecode', 'storageMedia', 'location', 'productFamily'}

products = {
    'FormatVersion': 'aws_v1',
    'NextToken': '57r3EXAMPLEujbzWfHF7Ciw==:ywSmZsD3mtpQmQLQ5XfOsIMkYybSj+vAT+kGmwMFq+K9DGmIoJkz7lunVeamiOPgthdWSO2a7YKojCO+zY4dJmuNl2QvbNhXs+AJ2Ufn7xGmJncNI2TsEuAsVCUfTAvAQNcwwamtk6XuZ4YdNnooV62FjkV3ZAn40d9+wAxV7+FImvhUHi/+f8afgZdGh2zPUlH8jlV9uUtj0oHp8+DhPUuHXh+WBII1E/aoKpPSm3c=',
    'PriceList': [
        '{"product":{"productFamily":"Storage","attributes":{"storageMedia":"SSD-backed","maxThroughputvolume":"320 MB/sec","volumeType":"Provisioned IOPS","maxIopsvolume":"20000","servicecode":"AmazonEC2","usagetype":"CAN1-EBS:VolumeUsage.piops","locationType":"AWS Region","location":"Canada (Central)","servicename":"Amazon Elastic Compute Cloud","maxVolumeSize":"16 TiB","operation":""},"sku":"WQGC34PB2AWS8R4U"},"serviceCode":"AmazonEC2","terms":{"OnDemand":{"WQGC34PB2AWS8R4U.JRTCKXETXF":{"priceDimensions":{"WQGC34PB2AWS8R4U.JRTCKXETXF.6YS6EN2CT7":{"unit":"GB-Mo","endRange":"Inf","description":"$0.138 per GB-month of Provisioned IOPS SSD (io1)  provisioned storage - Canada (Central)","appliesTo":[],"rateCode":"WQGC34PB2AWS8R4U.JRTCKXETXF.6YS6EN2CT7","beginRange":"0","pricePerUnit":{"USD":"0.1380000000"}}},"sku":"WQGC34PB2AWS8R4U","effectiveDate":"2017-08-01T00:00:00Z","offerTermCode":"JRTCKXETXF","termAttributes":{}}}},"version":"20170901182201","publicationDate":"2017-09-01T18:22:01Z"}',
        '{"product":{"productFamily":"Compute","attributes":{"storageMedia":"SSD-backed","maxThroughputvolume":"320 MB/sec","volumeType":"Provisioned IOPS","maxIopsvolume":"20000","servicecode":"AmazonEC2","usagetype":"CAN1-EBS:VolumeUsage.piops","locationType":"AWS Region","location":"Canada (Central)","servicename":"Amazon Elastic Compute Cloud","maxVolumeSize":"16 TiB","operation":""},"sku":"WQGC34PB2AWS8R4U"},"serviceCode":"AmazonEC2","terms":{"OnDemand":{"WQGC34PB2AWS8R4U.JRTCKXETXF":{"priceDimensions":{"WQGC34PB2AWS8R4U.JRTCKXETXF.6YS6EN2CT7":{"unit":"GB-Mo","endRange":"Inf","description":"$0.138 per GB-month of Provisioned IOPS SSD (io1)  provisioned storage - Canada (Central)","appliesTo":[],"rateCode":"WQGC34PB2AWS8R4U.JRTCKXETXF.6YS6EN2CT7","beginRange":"0","pricePerUnit":{"USD":"0.1380000000"}}},"sku":"WQGC34PB2AWS8R4U","effectiveDate":"2017-08-01T00:00:00Z","offerTermCode":"JRTCKXETXF","termAttributes":{}}}},"version":"20170901182201","publicationDate":"2017-09-01T18:22:01Z"}',
    ]
}
result = []
for entry in products['PriceList']:
    data = ast.literal_eval(entry)
    temp = {}
    for k, v in data['product']['attributes'].items():
        if k in REQUESTED_ATTRIBUTES:
            temp[k] = v
    result.append(temp)
print(result)

输出

[{'storageMedia': 'SSD-backed', 'servicecode': 'AmazonEC2', 'location': 'Canada (Central)'}, {'storageMedia': 'SSD-backed', 'servicecode': 'AmazonEC2', 'location': 'Canada (Central)'}]

【讨论】:

  • 我们还能得到 [term] [OnDemand] 吗?例如价格和描述?
  • 尝试修改代码获取。让我知道..(它对你有用吗?)
  • 谢谢。现在它还在工作。但我尝试编辑更多以获取价格和描述。我会尽快与您分享状态。
  • 我尝试编辑代码然后结果更短,但也不能只得到描述和价格。
  • @NiNoMax 在我的回答中根据products 分享您正在寻找的确切输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多