我想要确认正在使用Lambda函数的运行时数量
首先
请将您的函数迁移到更新的运行时版本,因为Node.js 8.10已经结束生命周期了。关于Node.js 8在各个地区的使用情况,这里留下了确认方法的备忘录。
總而言之
在准备就绪的情况下,执行下列内容的Shell脚本。
#!/bin/bash
region_list=$(aws ec2 describe-regions|jq -r '.[][].RegionName'|sort)
runtime_list=$(for x in $region_list; do aws --region $x lambda list-functions| jq -cr '.[][]|.Runtime'; done)
key_list=$(echo "$runtime_list" | sort -u)
total=$(echo "$runtime_list"|wc -l)
for x in $key_list; do c=$(echo "$runtime_list" | grep $x | wc -l); p=$(echo "scale=2; 100 * $c / $total"|bc -l); echo "$x: $c ($p%)"; done
预先准备
软件
需要准备AWS CLI和jq。如果您使用Linux或Mac,可能已经默认安装了它们。
权限
该用户需要具备以下权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EC2DescribeRegions",
"Effect": "Allow",
"Action": "ec2:DescribeRegions",
"Resource": "*"
},
{
"Sid": "LambdaListFunctions",
"Effect": "Allow",
"Action": "lambda:ListFunctions",
"Resource": "*"
}
]
}
按照顺序执行
获取区域列表
首先,使用 aws ec2 describe-regions 命令来获取区域列表。
然后,使用 jq 对区域名称进行加工,生成仅包含区域名称的列表。
region_list=$(aws ec2 describe-regions|jq -r '.[][].RegionName'|sort)
echo "$region_list"
# 例えば、こんな結果が得られる。
# ap-northeast-1
# ap-northeast-2
# ap-south-1
# ap-southeast-1
# ap-southeast-2
# ca-central-1
# eu-central-1
# eu-north-1
# eu-west-1
# eu-west-2
# eu-west-3
# sa-east-1
# us-east-1
# us-east-2
# us-west-1
# us-west-2
函数列表
接下来,使用命令 “aws –region region-name lambda list-functions” 获取每个区域的函数列表。
然后,使用 jq 对列表进行处理,仅保留运行时名称。
runtime_list=$(for x in $region_list; do aws --region $x lambda list-functions| jq -cr '.[][]|.Runtime'; done)
echo "$runtime_list"
# 例えば、こんな結果が得られる。
# nodejs8.10
# python3.6
# nodejs8.10
# python3.7
# nodejs8.10
# python3.7
# nodejs8.10
# provided
# nodejs8.10
# nodejs8.10
# nodejs8.10
# nodejs8.10
# nodejs8.10
# provided
# python3.6
# python3.6
# nodejs10.x
# python3.6
获取运行时名称的唯一值
接下来,从只包含运行时名称的列表中提取唯一值。
key_list=$(echo "$runtime_list" | sort -u)
echo "$key_list"
# 例えば、こんな結果が得られる。
# nodejs10.x
# nodejs8.10
# provided
# python3.6
# python3.7
计数
最后,统计使用各自运行环境的函数数量。
total=$(echo "$runtime_list"|wc -l)
echo $total
for x in $key_list; do c=$(echo "$runtime_list" | grep $x | wc -l); p=$(echo "scale=2; 100 * $c / $total"|bc -l); echo "$x: $c ($p%)"; done
# 例えば、こんな結果が得られる。
# nodejs10.x: 1 (5.55%)
# nodejs8.10: 9 (50.00%)
# provided: 2 (11.11%)
# python3.6: 4 (22.22%)
# python3.7: 2 (11.11%)