dullwhaleのメモ帳

何度も同じことを調べなくてよいように...

Lambda棚卸し

全般的な注意

  • Lambda関数本体とLambdaレイヤの両方を確認しろ。
  • リージョンごとにチェックしろ。特にバージニアリージョンus-east-1に注意せよ。Lambda@Edgeがいるかもしれない。AWS CLIではリージョン指定に--regionオプションが使える。

--region us-east-1

Lambdaレイヤを列挙する

# nodejsを使っていて、レイヤ名にfooを含むラムダレイヤを列挙
aws lambda list-layers --query 'Layers[*].LatestMatchingVersion' | jq --monochrome-output '.[] | select((.CompatibleRuntimes[] | test("^nodejs")) and (.LayerVersionArn | contains("foo"))) | .LayerVersionArn' | cut -d: -f7
# nodejsを使っていて、レイヤ名にfooを含むラムダレイヤの全バージョンを列挙
aws lambda list-layers --query 'Layers[*].LatestMatchingVersion' | jq --monochrome-output '.[] | select((.CompatibleRuntimes[] | test("^nodejs")) and (.LayerVersionArn | contains("foo"))) | .LayerVersionArn' | cut -d: -f7 | xargs -I {} aws lambda list-layer-versions --query 'LayerVersions[*].[LayerVersionArn]' --output text --layer-name {}

# より他のコマンドへの入力に適した形で出力
# レイヤ名とバージョンがタブ区切りで列挙される
aws lambda list-layers --query 'Layers[*].LatestMatchingVersion' | jq --monochrome-output '.[] | select((.CompatibleRuntimes[] | test("^nodejs")) and (.LayerVersionArn | contains("foo"))) | .LayerVersionArn' | cut -d: -f7 | xargs -I {} aws lambda list-layer-versions --query 'LayerVersions[*].[LayerVersionArn]' --output text --layer-name {} | cut -d: -f7,8 | tr : '\t'

Lambda関数を列挙する

# nodejsを使っていて、関数名にfooを含むラムダを列挙
aws lambda list-functions --query 'Functions[]' | jq --monochrome-output '.[] | select((.Runtime != null) and  (.Runtime | test("^nodejs")) and (.FunctionName | contains("foo"))) | .FunctionArn'
# nodejsを使っていラムダを単純に列挙
aws lambda list-functions --query 'Functions[]' | jq --monochrome-output '.[] | select((.Runtime != null) and  (.Runtime | test("^nodejs"))) | .FunctionArn' | xargs -I {} aws lambda list-versions-by-function --query 'Versions[*].[FunctionArn]' --output text --function-name {}

# nodejsを使っていて、関数名にfooを含むラムダの全バージョンを列挙
aws lambda list-functions --query 'Functions[]' | jq --monochrome-output '.[] | select((.Runtime != null) and  (.Runtime | test("^nodejs")) and (.FunctionName | contains("foo"))) | .FunctionArn' | xargs -I {} aws lambda list-versions-by-function --query 'Versions[*].[FunctionArn]' --output text --function-name {}

Lambda関数を削除する

削除対象の関数のリストをファイルに溜めておき

cat remove-func.txt | xargs -I {} aws lambda delete-function --function-name {}

Lambdaレイヤを削除する

削除対象のレイヤのリストをTSVファイルに溜めておく。一行目にレイヤ名、二行目にバージョン番号が書かれることを想定する。

cat remove-layer.txt | xargs -n2 bash -c 'aws lambda delete-layer-version --layer-name $0 --version-number $1'