2013年5月14日火曜日

EC2の価格のJSONを"jq"でいじってみた

スズキです。

@ar1さんが下記記事(EC2およびS3の価格がJSONで取得できる)を公開してくれました。
EC2およびS3の価格をプログラマブルで計算したい人はJSONをたたこう
JSONとくれば「jq」でしょ、ということで"jq"で色々と整形してみました。

まずはリージョン一覧です。
# curl -s http://aws.amazon.com/jp/ec2/pricing/pricing-on-demand-instances.json \
> | jq ' .config.regions[].region '
"us-east"
"us-west-2"
"us-west"
"eu-ireland"
"apac-sin"
"apac-tokyo"
"apac-syd"
"sa-east-1"
何か微妙に期待していた値と違うような...

次にインスタンスタイプです。
# curl -s http://aws.amazon.com/jp/ec2/pricing/pricing-on-demand-instances.json \
> | jq ' .config.regions[] | select(.region == "sa-east-1").instanceTypes[].type '
"stdODI"
"secgenstdODI"
"uODI"
"hiMemODI"
"hiCPUODI"
インスタンスタイプといっても、"m1, m2, m3, c1, ..."の部分ですね...

さらに、"small, large, ..."の部分まで出力してみます。
# curl -s http://aws.amazon.com/jp/ec2/pricing/pricing-on-demand-instances.json \
> | jq ' .config.regions[] | select(.region == "apac-tokyo").instanceTypes[] | { (.type): [ .sizes[].size ] }'
{
  "stdODI": [
    "sm",
    "med",
    "lg",
    "xl"
  ]
}
{
  "secgenstdODI": [
    "xl",
    "xxl"
  ]
}
{
  "uODI": [
    "u"
  ]
}
{
  "hiMemODI": [
    "xl",
    "xxl",
    "xxxxl"
  ]
}
{
  "hiCPUODI": [
    "med",
    "xl"
  ]
}
マイクロって"u"なんですね...(最初よくわからなかった...)

最後にLinuxの金額まで出力してみます。
# curl -s http://aws.amazon.com/jp/ec2/pricing/pricing-on-demand-instances.json \
> | jq ' .config.regions[] | select(.region == "apac-tokyo").instanceTypes[] | { (.type): [ .sizes[] | { (.size): .valueColumns[] | select(.name == "linux").prices.USD } ] } '
{
  "stdODI": [
    {
      "sm": "0.088"
    },
    {
      "med": "0.175"
    },
    {
      "lg": "0.350"
    },
    {
      "xl": "0.700"
    }
  ]
}
{
  "secgenstdODI": [
    {
      "xl": "0.760"
    },
    {
      "xxl": "1.520"
    }
  ]
}
{
  "uODI": [
    {
      "u": "0.027"
    }
  ]
}
{
  "hiMemODI": [
    {
      "xl": "0.505"
    },
    {
      "xxl": "1.010"
    },
    {
      "xxxxl": "2.020"
    }
  ]
}
{
  "hiCPUODI": [
    {
      "med": "0.185"
    },
    {
      "xl": "0.740"
    }
  ]
}
「24時間 x 30日 x 100円(1$)」して一ヶ月分の金額にもしてみました。
# curl -s http://aws.amazon.com/jp/ec2/pricing/pricing-on-demand-instances.json | jq ' .config.regions[] | select(.region == "apac-tokyo").instanceTypes[] | { (.type): [ .sizes[] | { (.size): .valueColumns[] | select(.name == "linux").prices.USD | ( tonumber * 24 * 30 * 100 ) } ] } '
{
  "stdODI": [
    {
      "sm": 6336
    },
    {
      "med": 12599.999999999996
    },
    {
      "lg": 25199.999999999993
    },
    {
      "xl": 50399.999999999985
    }
  ]
}
{
  "secgenstdODI": [
    {
      "xl": 54720.00000000001
    },
    {
      "xxl": 109440.00000000001
    }
  ]
}
{
  "uODI": [
    {
      "u": 1944.0000000000002
    }
  ]
}
{
  "hiMemODI": [
    {
      "xl": 36360
    },
    {
      "xxl": 72720
    },
    {
      "xxxxl": 145440
    }
  ]
}
{
  "hiCPUODI": [
    {
      "med": 13319.999999999998
    },
    {
      "xl": 53279.99999999999
    }
  ]
}
小数点がうざい...

まあ、"jq"の練習です...
--------
http://www.suz-lab.com

0 コメント: